class A{
public A { std::cout<<A<<}
}
class B: public A{
... // print B
}
class C: public A, pulic B {
... // print C
}
int main(){
C obj;
}
輸出: AABC。繼承關系是三角形:A->B->C加A->C。
問題是:這三條邊如果考慮虛繼承,每條邊有兩種可能,共八種。那么其他七種組合的
輸出是什么。
編譯器: VC6.0
#include "stdafx.h"
#include "iostream"
using namespace std;
class AA {
public:
AA(){ std::cout<<"AA"<<endl;}
};
class BB: public virtual AA
{
public:
BB(){ std::cout<<"BB"<<endl;}
};
class CC: public virtual AA, public (virtual) BB //括號的virtual可有可無
{
public:
CC(){ std::cout<<"CC"<<endl;}
};
int main(int argc, char* argv[])
{
CC obj;
return 0;
}
輸出: AA
BB
CC
其它情況編譯會出錯
主要考察多繼承的虛基類在內存中只有一份copy,如果不用虛繼承的話,容易造成二義性,編譯不過:)