C++成員初始化列表
文章轉(zhuǎn)自: 公眾號:Coder梁(ID:Coder_LT)
除了可以使用構(gòu)造函數(shù)Classy::Classy(int n, int m): mem1(n), mem2(0), mem3(n*m+2) {
...
};類成員進行初始化之外,C++還提供了另外一種初始化的方法,叫做成員初始化列表。
我們假設(shè)Classy
是一個類,而mem1
,mem2
和mem3
都是這個類的數(shù)據(jù)成員,那么類構(gòu)造函數(shù)可以寫成:
Classy::Classy(int n, int m): mem1(n), mem2(0), mem3(n*m+2) { ? ? ... };
上述代碼將mem1
初始化為n,將mem2初始化為了0,mem3
初始化成了n*m+2。這些初始化工作是對象創(chuàng)建是完成的,并且在執(zhí)行花括號中的內(nèi)容之前。
有這么幾點需要注意:
- 這種格式只能用于構(gòu)造函數(shù)
- 必須用這種格式初始化非靜態(tài)const數(shù)據(jù)成員(C++11之前)
- 必須用這種格式初始化引用數(shù)據(jù)成員
數(shù)據(jù)成員被初始化的順序和它們在類中定義的順序相同,和初始化列表中的排列順序無關(guān)。
C++11的類內(nèi)初始化:
C++11當中允許我們直接對成員變量進行賦值:
class Classy { ? ? int mem1 = 10; ? ? const int mem2 = 20; };
這和在構(gòu)造函數(shù)當中使用成員初始化列表等價:
Classy::Classy() : mem1(0), mem2(20) {...}
我們在類當中直接初始化之后,我們也可以在成員初始化列表當中進行覆蓋:
Classy::Classy(int n) : mem1(n) {...}
在這種情況下,mem1的值會被替換成n。
到此這篇關(guān)于C++成員初始化列表的文章就介紹到這了,更多相關(guān)C++成員初始化列表內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++?opencv圖像處理實現(xiàn)圖像腐蝕和膨脹示例
這篇文章主要為大家介紹了C++?opencv圖像處理實現(xiàn)圖像腐蝕和圖像膨脹示例代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05C++基于Boost.Asio實現(xiàn)端口映射器的過程詳解
Boost.Asio 是一個功能強大的 C++ 庫,用于異步編程和網(wǎng)絡編程,它提供了跨平臺的異步 I/O 操作,在這篇文章中,我們將深入分析一個使用 Boost.Asio 實現(xiàn)的簡單端口映射服務器,文中有詳細的代碼講解,需要的朋友可以參考下2023-11-11