C++的初始化列表

前言

被一道題目困擾了好久,搞死我了。一直學Java的我,根本不知道C++竟然有這種神仙玩意兒,實屬給我整懵了。

它是個啥

  • Initializers List

  • 顧名思義,就是初始化 ,但和構造函數的賦值不同的是

    • 初始化列表在對象被構造前執行
    • 構造函數的賦值是在構造時執行

使用

  • "a(value)" 即 “a = value”

搞我的題目

  • 要求輸出

5,5

5,5

#include <iostream>
using namespace std;

class Base
{
public: 
    int k;
    Base(int n):k(n) {}//類型轉換構造函數
};
class Big
{
public:
    int v;
    Base b;
    /*
    	題目原來是:
    	Big【      】
    	Big【      】
    	【填空題】
    */
    Big
    Big

};
int main()
{
    Big a1(5);
    Big a2 = a1;
    cout << a1.v << "," << a1.b.k << endl;
    cout << a2.v << "," << a2.b.k << endl;
    return 0;
}
  • 咱來分析一下,觀察一下Big的成員變量

    • int v
    • Base b
  • 巧了,Base是個類,那我們再看看Base類

class Base
{
public: 
    int k;
    Base(int n):k(n) {}//類型轉換構造函數
};
  • 很容易看到,它沒有無參構造函數,它不像Java那樣有默認無參構造啊!!!而,Big類裏面,直接Base b,沒有初始化,動不動就給你丟個“no match”噁心你。

  • 那咋辦??對象創建了,得構造啊!!!!成員變量不都得準備好嘛!!!!

  • 所以,只要我E得夠快初始化在構造之前,不就行了嗎!!!!!!

  • 所以用到我們的初始化列表

Big():b(0){this->v=0;}
Big(int n):b(n){this->v = n;}

好言相勸

  • 所以呀,以後凡是要構造賦值的,直接整這個就完了!!!a(v)

出答案了哈哈哈哈哈哈,寫錯了,尷尬的一批

我的原答案:

// 題目沒說要0,這邊要寫的應該是【拷貝構造】!!!
Big():b(0){this->v=0;}
// 要用初始化列表就都用,不要用一半,{}空着就空着
Big(int n):b(n){this->v = n;}

老師給的答案:

Big(const Big& a):v(a.v),b(a.b.k){}
Big(int n):v(n),b(n){}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章