如果我運行這段代碼虛基類的公共/私有構造函數的行爲差異
#include<iostream>
using namespace std;
class Final;
class MakeFinal{
public:
friend class Final;
MakeFinal(){cout<<"makefinal\n";}
};
class Final: public virtual MakeFinal{
public:
Final(){cout<<"Final\n";}
};
class Derived:public Final{
public:
Derived(){cout<<"Derived\n";}
};
int main(){
//Final f;
Derived d;
return 0;
}
輸出是:
makefinal 最終 衍生
但是,如果我讓MakeFinal()構造私有,編譯器顯示錯誤消息。基於這個不同的構造函數調用層次結構是什麼?
如果一個基類構造函數是私有的,那麼除了一個朋友類(或類本身)之外,其他任何東西都可以構造一個,包括通過繼承。 –
拋開糟糕的格式,爲什麼你在這段代碼中首先使用虛擬繼承?你知道虛擬繼承有什麼問題可以解決嗎? – thokra