我不是筆記的創造者,我只是筆記的搬運工~
1 ,建構函式可以過載,也可以帶有預設引數
匹配string的無參建構函式
string s;
匹配string的有參(const char*)建構函式
string s("hello");
2 ,預設建構函式(無參建構函式)
1)如果類中沒有定義任何建構函式,編譯器會為該類提供乙個預設(無參)建構函式:
--》對於基本型別成員變數不做初始化
--》對於類 型別的成員變數(成員子物件),將會自動呼叫相應類的無參建構函式來初始化
2)如果自己定義了建構函式,無論是否有引數,那麼編譯器都不會再提供預設的無參建構函式了.
3 ,型別轉換建構函式(單參建構函式) //建構函式的型別轉換
class 類名
};-----------------------------------
class 類名
4, 拷貝建構函式(複製建構函式)
這部分我覺得還挺難理解的
1)用乙個已存在的物件作為同類物件的構造實參,建立新的副本物件時,會呼叫該類拷貝建構函式。
class 類名
};------------
eg:class a;
a a1(...);
a a2(a1);//匹配a的拷貝建構函式
2)如果乙個類沒有自己定義拷貝建構函式,那麼編譯器會為該類提供乙個預設的拷貝建構函式:
--》對於基本型別的成員變數,按位元組複製
--》對於類型別的成員變數(成員子物件),將自動呼叫相應類的拷貝建構函式來初始化
注:一般不需要自己定義拷貝建構函式函式,因為編譯器預設提供的已經很好用了.
class a1{};//預設無參,預設拷貝
class a2
};class a3
};class a4
};3)拷貝構造函式呼叫時機
--》用乙個已存在物件作為同類物件的構造實參
--》以物件形式向函式傳遞引數
--》從函式中返回物件(有可能被編譯器優化掉)
建構函式初始化列表和初始化函式
其實並沒有所謂的初始化函式的概念,本文中的初始化函式只是說明在函式體內進行賦值。而初始化列表才是真正意義上的物件初始化。使用初始化列表效率會高一點。c 規定,物件的成員變數的初始化動作發生在進入建構函式本體之前。在建構函式體內只是賦值,並不是初始化。請看下面這個栗子 class base publi...
C 建構函式 ,初始化列表
c 中的類的建構函式 1.如果類中沒有定義建構函式,編譯器將生成乙個預設建構函式,這個預設建構函式會呼叫類中所有成員的預設建構函式,但不會對如int,double的基本資料型別做初始化 2.類中可以定義多個建構函式,但每個建構函式應該有不同的引數實現 3.預設建構函式必須定義的情況,當需要定義乙個物...
C 建構函式初始化列表
從概念上講,可以認為建構函式分兩個階段進行 1.初始化階段 2.普通的計算階段。計算階段由建構函式函式體中的所有語句組成 不管成員是否在建構函式初始化列表中顯示初始化,類型別的資料成員總是在初始化階段初始化。初始化發生在計算階段的開始之前。建議 使用建構函式初始化列表 注 必須對任何const或引用...