前言:
建構函式可以分為:
(1)不帶預設引數的建構函式,也叫做預設建構函式,如果自己不寫,編譯器會自動生成;
(2)帶有預設引數的建構函式,如果未指定引數,則需要的引數被初始化為預設值;
(3)拷貝建構函式
;預設建構函式:
多數情況下,編譯器為類生成乙個公有的預設建構函式,只有下面兩種情況特殊:
(1).乙個類顯示地宣告了任何建構函式,則編譯器不生成公有的預設建構函式。也就是說如果你自己宣告了乙個帶有引數的建構函式,那麼此時編譯器就不再為你生成預設的建構函式了,只能你自己顯示的宣告一下;
(2). 乙個類宣告了乙個非公有的預設建構函式,編譯器就不會生成公有的預設建構函式。
複製建構函式:
發生複製建構函式的三種情況(假設類名為classname = myclass,物件依次為obj1...)
(1)定義乙個物件時,以本類另乙個物件作為初始值,呼叫複製建構函式;
------用乙個物件去初始化另乙個物件;
myclass obj1;
myclass obj2 = obj1;
(2)如果函式的形參是類的物件,呼叫函式時,將使用實參物件初始化形參物件時,呼叫複製建構函式;
------乙個物件以值傳遞的方式進入函式體(一定要是值傳遞才會呼叫複製建構函式);
void myclass::func(myclass m);
(3)如果函式的返回值是類的物件,函式執行完成後返回主調函式時,將使用return語句中的物件初始化乙個臨時無名物件傳遞給主調函式,此時呼叫複製建構函式。
------乙個物件以值傳遞的方式從函式體返回;
myclass fund();
例項:
#include using namespace std;
class myclass
myclass(const myclass &x)
myclass &operator=(const myclass &x)
~myclass() };
void fun()
int main()
我們定義了obj0-4,四個不同的物件,其中obj0物件沒有引數,此處呼叫的是帶預設引數的建構函式,所以輸出0;obj1物件傳遞給建構函式的引數是1,所以輸出1;同理obj2也是呼叫的帶預設引數的建構函式;重點看obj4,首先我們明確一點obj4這個物件以前不存在,那麼這個地方呼叫的就是複製建構函式,滿足其中(以乙個物件去初始化另乙個物件),因為obj4以前未定義,所以不會過載=號操作符;下面的obj1=obj2因為obj1已經存在過,所以此處過載了=號操作符,故結果是:012234444
關於建構函式的總結
當類的例項進入作用域時,即物件被建立,則就會呼叫建構函式。建構函式的作用是 建立乙個物件時,建構函式可以對這個物件進行初始化。建構函式名和類名相同。建構函式沒有返回值。建構函式可以在類內和類外定義。建構函式可以過載。建構函式在物件被建立時自動呼叫。成員初始化列表,格式為 類名 類名 形參表 內嵌物件...
關於建構函式 複製建構函式與析構函式的總結
建構函式 建構函式的作用 1 建立物件 2 初始化其值 建構函式所具有的的特性 1 建構函式的函式名與類名相同 2 沒有返回值 建構函式的執行順序 1 傳參 2 按照類中成員變數宣告順序,依次構造其成員 3 執行建構函式的函式體 建構函式有兩種過載形式 1 帶有引數的 2 無引數的,即預設建構函式 ...
關於建構函式的預設構造
拷貝建構函式 是用於當乙個 使用者自定義型別的物件 作為函式引數時,系統預設 的拷貝建構函式 不能達到目地,這時需要用到 使用者自己定義 的拷貝建構函式 通常是 類的私有成員裡有起到重要作用的指標變數 當進行函式引數的 值傳遞 時,系統會呼叫 拷貝建構函式 如果沒有 自定義 拷貝建構函式 則系統會呼...