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,如果不用虚继承的话,容易造成二义性,编译不过:)