關於建構函式的總結

2021-08-17 08:01:57 字數 1455 閱讀 1352

前言:

建構函式可以分為:

(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 無引數的,即預設建構函式 ...

關於建構函式的預設構造

拷貝建構函式 是用於當乙個 使用者自定義型別的物件 作為函式引數時,系統預設 的拷貝建構函式 不能達到目地,這時需要用到 使用者自己定義 的拷貝建構函式 通常是 類的私有成員裡有起到重要作用的指標變數 當進行函式引數的 值傳遞 時,系統會呼叫 拷貝建構函式 如果沒有 自定義 拷貝建構函式 則系統會呼...