C++基礎知識點

C中static做用

  (1)隱藏。 當咱們同時編譯多個文件時,全部未加static前綴的全局變量和函數都具備全局可見性,故使用static在不一樣的文件中定義同名函數和同名變量,而沒必要擔憂命名衝突。
  (2)static的第二個做用是保持變量內容的持久。存儲在靜態數據區的變量會在程序剛開始運行時就完成初始化,也是惟一的一次初始化。共有兩種變量存儲在靜態存儲區:全局變量和static變量。
  (3)static的第三個做用是默認初始化爲0.其實全局變量也具有這一屬性,由於全局變量也存儲在靜態數據區。在靜態數據區,內存中全部的字節默認值都是0×00,某些時候這一特色能夠減小程序員的工做量。程序員

C++中const做用

  const修飾的內容是隻讀的, 定義常量只是一種使用方式而已,還有const數據成員,const參數, const返回值, const成員函數等, 被const修飾的東西都受到強制保護,能夠預防意外的變更,能提升程序的健壯性。編程

C與C++定義常量的不一樣

  C中是使用宏#define定義, C++使用更好的const來定義。
  區別:
  1)const是有數據類型的常量,而宏常量沒有,編譯器能夠對前者進行靜態類型安全檢查,對後者僅是字符替換,沒有類型安全檢查,並且在字符替換時可能會產生意料不到的錯誤(邊際效應)。
  2)有些編譯器能夠對const常量進行調試, 不能對宏調試。安全

既然C++中有更好的const爲何還要使用宏?

  const沒法代替宏做爲衛哨來防止文件的重複包含。ide

C++中引用和指針的區別?

  引用是對象的別名, 操做引用就是操做這個對象, 必須在建立的同時有效得初始化(引用一個有效的對象, 不可爲NULL), 初始化完畢就不再可改變, 引用具備指針的效率, 又具備變量使用的方便性和直觀性, 在語言層面上引用和對象的用法同樣, 在二進制層面上引用通常都是經過指針來實現的, 只是編譯器幫咱們完成了轉換。 之因此使用引用是爲了用適當的工具作恰如其分的事, 體現了最小特權原則。函數

C與C++的內存分配方式

  1)從靜態存儲區域分配。內存在程序編譯的時候就已經分配好,這塊內存在程序的整個運行期間都存在,如全局變量,static變量。
  2)在棧上建立。在執行函數時,函數內局部變量的存儲單元均可以在棧上建立,函數執行結束時這些存儲單元自動被釋放。棧內存分配運算內置於處理器的指令集中,效率很高,可是分配的內存容量有限。
  3)從堆上分配(動態內存分配)程序在運行的時候用malloc或new申請任意多少的內存,程序員負責在什麼時候用free或delete釋放內存。動態內存的生存期本身決定,使用很是靈活。工具

new/delete 與 malloc()/free() 的區別

  malloc() 與 free() 是C語言的標準庫函數, new/delete 是C++的運算符, 他們均可以用來申請和釋放內存, malloc()和free()不在編譯器控制權限以內, 不能把構造函數和析構函數的任務強加給他們。www.cdtarena.com編碼

#include<a.h>和#include"a.h" 區別

  答:對於#include <a.h> ,編譯器從標準庫路徑開始搜索 a.h對於#include "a.h" ,編譯器從用戶的工做路徑開始搜索 a.h設計

在C++ 程序中調用被 C編譯器編譯後的函數,加 extern "C"

  C++語言支持函數重載,C語言不支持函數重載。函數被C++編譯後在庫中的名字與C語言的不一樣。假設某個函數的原型爲:void foo(int x, int y);該函數被C編譯器編譯後在庫中的名字爲_foo,而C++編譯器則會產生像_foo_int_int之類的名字。C++提供了C鏈接交換指定符號extern"C"來解決名字匹配問題。指針

C++中的是多態性

  多態性是面向對象程序設計語言繼數據抽象和繼承以後的第三個基本特徵。它是在運行時出現的多態性經過派生類和虛函數實現。基類和派生類中使用一樣的函數名, 完成不一樣的操做具體實現相隔離的另外一類接口,即把" what"從"how"分離開來。多態性提升了代碼的組織性和可讀性,虛函數則根據類型的不一樣來進行不一樣的隔離。調試

動態特性

  在絕大多數狀況下, 程序的功能是在編譯的時候就肯定下來的, 咱們稱之爲靜態特性。 反之, 若是程序的功能是在運行時刻才能肯定下來的, 則稱之爲動態特性。C++中, 虛函數,抽象基類, 動態綁定和多態構成了出色的動態特性。

C++封裝的實現

  封裝來源於信息隱藏的設計理念, 是經過特性和行爲的組合來建立新數據類型讓接口與具體實現相隔離。C++中是經過類來實現的, 爲了儘可能避免某個模塊的行爲干擾同一系統中的其它模塊,應該讓模塊僅僅公開必須讓外界知道的接口。

RTTI

  RTTI事指運行時類型識別(Run-time type identification)在只有一個指向基類的指針或引用時肯定一個對象的準確類型。
 

拷貝構造函數

  它是單個參數的構造函數,其參數是與它同屬一類的對象的(常)引用;類定義中,若是未提供本身的拷貝構造函數,C++提供一個默認拷貝構造函數,該默認拷貝構造函數完成一個成員到一個成員的拷貝

深淺拷貝

  淺拷貝是建立了一個對象用一個現成的對象初始化它的時候只是複製了成員(簡單賦值)而沒有拷貝分配給成員的資源(如給其指針變量成員分配了動態內存); 深拷貝是當一個對象建立時,若是分配了資源,就須要定義本身的拷貝構造函數,使之不但拷貝成員也拷貝分配給它的資源。

面向對象程序設計的優勢

  開發時間短, 效率高, 可靠性高。面向對象編程的編碼具備高可重用性,能夠在應用程序中大量採用成熟的類庫(如STL),從而雖短了開發時間,軟件易於維護和升級。

相關文章
相關標籤/搜索