C++知識點總結篇
阿新 • • 發佈:2019-02-04
const在不同位置時的不同意義
- 指標型別前:宣告一個指向常量的指標,程式中不能通過指標來改變它所指向的值,但指標本身的值可以改變,即指標可以指向其他資料;
- "*"號和指標名之間,宣告一個指標常量(常指標),指標本身的值不可改變,即不能指向其他資料,但指向的資料的值可以改變;
- 兩個地方都加,宣告指向常量的指標常量,指標本身的值不可改變,指向的資料也不能通過指標改變;
####函式指標
- 使用函式指標之前,必須先賦值,使它指向一個函式入口地址,賦值語法格式為:函式指標名 = 函式名,其中函式名代表的函式必須是一個已經定義過的,和函式指標具有相同返回型別的函式,指標呼叫函式格式:(*指標變數)(實參列表);
訪問許可權
- public:可被任意實體訪問;
- protected:只允許本類及子類的成員函式訪問;
- private:只允許本類的成員函式訪問;
建構函式
- 建立物件時,自動呼叫建構函式,不能在程式中直接呼叫,可有任意型別引數,但不能有返回型別;
- 建構函式作用:為物件分配空間、為資料成員賦初值、請求其他資源;
- 建構函式工作:初始化虛擬函式表、建立基類物件、建立非靜態資料成員物件、安置虛基類物件資訊、執行建構函式體中的程式碼;
- 若一個類中沒有定義建構函式,編譯器會自動生成不帶引數的預設建構函式,格式為:
<類名>::<預設建構函式名>()
{
}
解構函式
- 解構函式作用:清除物件、釋放記憶體;
- 解構函式工作:執行解構函式中的程式碼、將物件佔據的儲存空間歸還系統、做公共及使用者要求的善後工作;
- 解構函式無引數和返回值,一個類中只能定義一個解構函式,故不能過載,格式為:
~<類名>();
記憶體佈局
- 全域性資料區:存放全域性變數、靜態資料、常量;
- 程式碼區:存放類成員函式、其他函式程式碼;
- 棧區:存放區域性變數、函式引數、返回資料、返回地址;
- 堆區:自由儲存區;
運算子過載過載形式
- 過載為類的成員函式,引數個數比原來的運算數少一個
<函式型別> operator <運算子> (<形參列表>) { <函式體>; }
- 過載為類的友元函式,引數個數與原運算數個數一樣多;
friend <函式型別> operator <運算子> (<形參列表>)
{
<函式體>;
}
- 函式過載:返回值型別可以相同可以不同,但形參列表一定不同;
靜態資料成員
- 初始化格式:
<型別><類名>::<靜態資料成員>=<值>;
- 引用格式:
<類名>::<靜態資料成員>;
繼承方式
- 私有繼承private:父類的公有成員和保護成員作為子類的的私有成員,且不能被子類的派生類訪問;
- 公有繼承public:父類的公有成員和保護成員作為子類的成員時,仍保持原有狀態,父類私有成員仍為私有;
- 保護繼承protected:父類的公有成員和保護成員成為子類的保護成員,且只能被他的派生類成員函式或友元訪問,父類私有成員仍為私有;
####派生類建構函式呼叫順序:
- 呼叫基類的建構函式,呼叫順序按繼承時說明的順序;
- 呼叫子物件類的建構函式,呼叫順序按在類中說明的順序;
- 派生類建構函式體中內容;
函式模版
template < 模板形參表 >template <typename T>
返回值型別 函式名(形式引數列表)
{
函式體語句
}
例:
template <typename T>
void swap( T& v1, T& v2)
{
T temp;
temp = v1;
v1 = v2;
v2 = temp;
}
虛擬函式
- 虛擬函式必須是類的成員函式,不能是友元,但可以是另一個類的友元,不能為全域性函式,也不能為靜態函式,解構函式可以為虛擬函式,但建構函式不能為虛擬函式;
變數初始化
- 區域性變數:定義時,系統不會進行初始化;
- 全域性變數:定義時,系統自動初始化,
友元函式
- 在類中定義過,但不是成員函式,定義在類外部,但有權訪問類中成員;
this指標
- 只有成員函式才有this指標,友元函式沒有this指標;
靜態成員函式與普通成員函式區別:
- 靜態成員函式沒有this指標,只能訪問靜態成員(包括靜態成員變數和靜態成員函式);
- 普通成員函式有this指標,可以訪問類中任意成員,而靜態成員函式無this指標;