C 建構函式初始化列表與賦值

2022-09-04 02:39:08 字數 1235 閱讀 2973

初始化和賦值對內建型別的成員沒有什麼大的區別,像任乙個建構函式都可以。但有的時候必須用帶有初始化列表的建構函式

(1) 成員型別是沒有預設建構函式的類。若沒有提供顯式初始化時,則編譯器隱式使用成員型別的預設建構函式,若類沒有預設建構函式,則編譯器嘗試使用預設建構函式將會失敗。

(2)const成員引用型別的成員。因為const物件或引用型別只能初始化,不能對他們賦值。

還有乙個賦值次數,效率上的區別

初始化引數列表在物件初始化時對成員變數賦值一次

建構函式內直接賦值,對成員變數賦值兩次,一次是物件構造是用預設值進行賦值,第二次是呼叫建構函式賦值

顯然使用 建構函式初始化列表 的方式得到更高的效率

舉例:

class food

food(food &other) //拷貝建構函式

food & operator =(food &other) //過載賦值=函式

private:

int m_type;

};(1)建構函式賦值方式 初始化成員物件m_food

class dog: public animal

private:

food m_food;

};//使用

food fd;

dog dog(fd); //

dog dog(fd);結果:

先執行了 物件型別建構函式food(int type = 10)——>

然後在執行 物件型別建構函式food & operator =(food &other)

想象是為什麼?

(2)建構函式初始化列表方式

class dog: public animal

private:

food m_food;

};//使用

food fd;

dog dog(fd); //

dog dog(fd);結果:執行food(food &other)拷貝建構函式完成初始化

C 建構函式初始化列表與賦值

c 類中成員變數的初始化有兩種方式 建構函式初始化列表和建構函式體內賦值。下面看看兩種方式有何不同。成員變數初始化的順序是按照在那種定義的順序。1 內部資料型別 char,int 指標等 class animal animal int weight,int height b函式體內初始化 priva...

C 建構函式初始化列表與賦值

c 類中成員變數的初始化有兩種方式 建構函式初始化列表和建構函式體內賦值。下面看看兩種方式有何不同。成員變數初始化的順序是按照在那種定義的順序。1 內部資料型別 char,int 指標等 class animal animal int weight,int height b函式體內初始化 priva...

C 建構函式初始化列表與賦值

初始化和賦值對內建型別的成員沒有什麼大的區別,像任乙個建構函式都可以。但有的時候必須用帶有初始化列表的建構函式 1 成員型別是沒有預設建構函式的類。若沒有提供顯式初始化時,則編譯器隱式使用成員型別的預設建構函式,若類沒有預設建構函式,則編譯器嘗試使用預設建構函式將會失敗。2 const成員或引用型別...