溫故知新——C++兩個相互關聯的類

來源:互聯網
上載者:User

標籤:

我們都必須意識到,寫程式其實是一個心思要細膩的活~

一開始,My Code大概是這個樣子的:

class B;class A{public:  A(){}  A(int a) : id(a){}   private:  B b;   };class B{ public:   B(){}  B(int b): num(b){}private:A a;};

很顯然,我沒有能夠成功編譯~我承認,上面的代碼我都沒有仔細去想,就寫出來了~最近煩心事比較多。

上面的代碼,有一個嚴重的問題是,相互迭代:

如果上面的代碼能夠成功執行,會發生:

class A中有一個class B的成員,於是,編譯器去初始化B,於是進入B中,發現class B有一個A的成員,於是初始化A。。。就這麼無窮無盡的初始化下去

還好編譯器阻止了這一切~

 

進一步改進:

class B;class A{public:  A(){}  A(int a) : id(a),b(new b()){}   private:  B* b;   };class B{ public:   B(){}  B(int b): num(b){}private:A a;};

感覺這樣能夠解決問題~實際上,你編譯上面的代碼,會得到:

”A(int a) : id(a),b(new b())“ Error: incomplete type is not allowed

這是什麼錯誤?仔細的回想下代碼,我們只聲明了class B,沒有B的定義。

知道錯在哪裡就容易修改了,代碼就不上了,簡單說一下

在類的外部new b(),傳入指標給A的建構函式,初始化B* b;

 

溫故知新——C++兩個相互關聯的類

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.