const在不同位置時的不同意義 指針類型前:聲明一個指向常量的指針,程式中不能通過指針來改變它所指向的值,但指針本身的值可以改變,即指針可以指向其他數據; \" "號和指針名之間,聲明一個指針常量(常指針),指針本身的值不可改變,即不能指向其他數據,但指向的數據的值可以改變; 兩個地方都加,聲明指 ...
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指針;
微信公眾號:村雨1943
創作不易,未經同意,轉載請註明出處~