類和結構體:
類預設的是私有的
結構體預設的是公有的
内聯函數:
内聯函數從源代碼層看,有函數的結構,而在編譯後,卻不具備函數的性質。内聯函數不是在調用時發生控制轉移,而是在編譯時将函數體嵌入在每一個調用處。編譯時,類似宏替換,使用函數體替換調用處的函數名。一般在代碼中用inline修飾,但是能否形成内聯函數,需要看編譯器對該函數定義的具體處理。
同一個類的所有對象共享同一組類方法,即每種方法隻有一個副本
構造函數&析構函數:
預設構造函數:當且僅當沒有定義任何構造函數的時候,編譯器會提供預設構造函數
也就是說,如果想定義一個構造函數,就必須額外提供一個預設構造函數,否則
Class object;類似這樣的定義對象的操作就會出錯。
建立對象數組的時候會(必須)調用預設構造函數
構造函數是可以重載的,因為可以定義不同的參數清單來建立一個對象
定義預設構造函數的方式有兩種:
1. 構造函數參數提供預設值
2. 重載編譯器提供的沒有參數的預設構造函數
析構函數:
如果在構造函數裡面使用了new來申請記憶體,則它将主流在棧記憶體或者自由存儲區中,那麼析構函數會負責delete掉;
但是如果構造函數沒有動态申請記憶體,那麼定義析構函數什麼都不用做;
如果是靜态的記憶體,應該是交給對象所在的函數結束的時候,讓函數負責銷毀就可以了(自動調用)。
如果自定義的構造函數使用了new,則必須提供使用delete的析構函數
const 成員函數:
1. 如果我們定義了一個常量對象,則這個常量對象所調用的函數必須是 const 成員函數
例如:
const Class object = Class(value1, value2);
object.function();
const常量函數的定義:
void Class::function() const {
//do something
}
2. 如果參數是常量則在函數中,該參數則不允許被改變
3. 如果函數是const成員函數,那麼在函數中不能使用this來改變調用函數的對象