建構函式初始化列表
建構函式初始化列表示例如下:
sales_item::sales_item(const
string &book) :
isbn(book), units_sold(0), revenue(0)
建構函式初始化列表以冒號開始,以逗號分隔資料成員,每個資料成員後面跟上其初始值,上面的建構函式將isbn成員初始化為book形參的值,將units_sold和revenue初始化為0,建構函式初始化列表只能出現在建構函式定義中而不是宣告中。
sales_item::sales_item(const
string &book)
以上是在建構函式體內對成員變數進行賦值,那麼上面兩種方法有什麼不同呢?
建構函式可以分兩個階段進行:
(1)初始化階段;
(2)普通計算階段。
計算階段也就是由函式體內所有的語句組成。不管成員是否在建構函式初始化列表中顯式初始化,類的資料成員初始化總是在初始化階段進行,初始化階段先於計算階段。從這裡可以看出,前面兩種方式不同之處,建構函式初始化列表是對類的成員做初始化,而在建構函式體內只是對類的資料成員進行了一次賦值操作。
那麼什麼時候需要建構函式初始化列表呢?
(1) const成員
(2) 引用型別成員
(3) 沒有預設建構函式的類成員
以上3種情況需要在建構函式初始化列表中對資料成員進行顯式初始化。因為const和引用型別成員只能初始化,不能對其進行賦值操作。
初始化順序
建構函式初始化列表只是指定了成員的初始值,並沒有指定初始化順序,那麼成員初始化順序又是怎樣的呢?成員的初始化順序就是定義成員的順序,第乙個定義的成員首先被初始化,然後是第二個等等。
初始化可以任意的表示式
初始化可以是任意複雜的表示式,例如:
sales_item::sales_item(const
string &book)
上述都是通過形參來決定初始值。
類型別的資料成員的初始化形式
初始化類型別的成員時,可以使用該型別任意的建構函式。
建構函式初始化列表
建構函式初始化列表以乙個冒號開始,接著是以逗號分隔的資料成員列表,每個資料成員後面跟乙個放在括號中的初始化式。例如 example example ival 0 dval 0.0 ival 和dval 是類的兩個資料成員 上面的例子和下面不用初始化列表的建構函式看似沒什麼區別 example exa...
建構函式初始化列表
c 程式語言中有很多比較重要的概念值得我們去深入 比如今天為大家介紹的有關c 建構函式的相關概念。這一方面的知識在實際程式設計中就是乙個比較重要的應用技術。希望能個大家可以從中學到一些知識。c 建構函式初始化列表以乙個冒號開始,接著是以逗號分隔的資料成員列表,每個資料成員後面跟乙個放在括號中的初始化...
建構函式初始化列表
class object private int v1,v2 看看願意是 先初始化v2為5,然後初始化v1為 3 倍的 v2 但是結果卻是奇葩的,這個是因為建構函式的初始化列表遵循的原則是先初始化父類 父類也是這個原則,那麼就相當於遞迴 然後初始化本類的成員,最後執行建構函式的函式體 而初始化本類的...