推薦使用初始化列表初始化
初始化列表我們不寫,但是編譯器依然會自動初始化一次
———》針對自定義類型
聲明和定義,聲明是告訴程序我要定義這個東西
定義是實際開闢空間,分配內存
初始化列表可以認爲初始化列表是成員變量定義的地方。
必須放在初始化列表:
常量,引用,沒有初始化的
必須要顯示的寫出構造函數的情況:
const類型的成員變量(還必須在初始化列表)、引用(引用必須在定 義的時候初始化)、沒有缺省構造函數的自定義類型的成員變量
成員變量按照聲明的順序初始化,而不是按照初始化列表順序。
const可以修飾函數,但是隻能修飾成員函數。修飾的是this指針指向的對象。
const在*之前修飾的都是指針指向的內容
const在*之後修飾的都是指針變量本身
如果成員函數不修改成員變量,可以const修飾
如果要修改,不能使用const修飾<display 例子>
作用域只能被縮小,不能被放大
成員函數:
取地址運算符的重載。99%都不需要自己定義,系統默認的就可以。
內聯函數
在調用的地方展開,不會有棧楨開銷,是一種以空間換時間的做法,神去了函數調用的開銷。
代碼很長或者/遞歸的函數都不適合展開。
inline對於編譯器而言只是一個建議,如果有遞歸或者循環,編譯器會忽略inline
定義在類裏的成員函數會默認成爲內聯函數。一般而言(十幾行二十幾行都會被展開),和編譯器有關。
宏函數也可以減少壓棧開銷,宏常量增強代碼的可維護性。
友元函數
突破類的封裝限制。