天天看點

【《C++ Primer Plus》讀書筆記】第10章 對象和類

類和結構體:

類預設的是私有的

結構體預設的是公有的

内聯函數:

内聯函數從源代碼層看,有函數的結構,而在編譯後,卻不具備函數的性質。内聯函數不是在調用時發生控制轉移,而是在編譯時将函數體嵌入在每一個調用處。編譯時,類似宏替換,使用函數體替換調用處的函數名。一般在代碼中用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來改變調用函數的對象