ivy-jie

progress ...

C++博客 首页 新随笔 联系 聚合 管理
  9 Posts :: 41 Stories :: 6 Comments :: 0 Trackbacks


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

posted on 2009-06-08 22:30 ivy-jie 阅读(442) 评论(0)  编辑 收藏 引用 所属分类: c++

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理