7
我是C++的新生,尤其是面向對象的編程。現在我在學習期間遇到問題。虛擬繼承中的構造函數順序
有以下內容的類層次結構:
class Class{};
class Base:public Class{};
class Derived1:virtual public Base{};
class Derived2:virtual public Base{};
class MI:public Derived1,public Derived2{};
class Final:public MI,public Class{};
,現在我想知道構造爲final類對象的定義的順序是什麼。
我畫一個圖: structure of class inheritance http://hi.csdn.net/attachment/201203/16/2712336_1331902452BziD.jpg
我知道虛基類構造總是非虛基地之前類無論在哪裏,他們出現在繼承層次的。我感到困惑的是,如果Class類的構造函數在Base之前,並且Class的構造函數被調用了兩次。爲什麼?
有人可以告訴我的答案嗎?越詳細越好。
這很容易找出一個懶惰的方式。構建一個程序。把調試cout語句放在你的每個構造函數中(.e.g「我是基礎構造函數!」)。遵循結算語句,觀察施工順序。 – 2012-03-16 13:01:18
警告:直接基'Class'在'Final'人跡罕至由於歧義 – 2012-03-16 13:08:27
@ 0A0D:當然,只告訴你手頭的編譯器會發生如何實現它。這對你來說可能夠好,但也許不是。 :) – 2012-03-16 13:08:58