Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1065499
  • 博文数量: 226
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 2504
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-21 14:12
文章分类

全部博文(226)

文章存档

2011年(1)

2010年(2)

2009年(68)

2008年(4)

2007年(27)

2006年(124)

我的朋友

分类: C/C++

2006-11-05 08:37:06

/*****************************************************************************
* 本程序实现了虚基类的实现,
* 虚基类其实是继承的一种方式,class 派生类名:virtual 继承方式 基类名
* 特点: 如果将直接基类的共同基类设为虚基类,这时从不同的路径继承过来的该类(虚基类)成员在内存中只有一个拷贝
* 本程序中B0是虚基类,派生出B1,B2, 然后B1 B2共同派生出D
* 这时由于B0是虚基类,所以它的成员fun()在内存中只有一个拷贝,所以在主函数中d.fun()是唯一的
* 如果没有将B0定义为虚基类,则其成员fun()在B1 B2中各有一个内存拷贝,这样主函数中d.fun()不是唯一的,错误!
*******************************************************************************/
#include
using namespace std;
class B0
{
public:
 void fun(){printf("member of B0\n");}
};
class B1:virtual public B0
{
};
class B2:virtual public B0
{
};
class D:public B1, public B2
{
};
int main()
{
 D d;
 d.fun();
 d.B1::fun();
 d.B2::fun();
 return 0;
}
阅读(2604) | 评论(4) | 转发(1) |
0

上一篇:智能卡知识

下一篇:c++ 赋值兼容与多态性

给主人留下些什么吧!~~

xw30246882013-09-14 20:10:13

就是利用虚基类来保证它的一致性

回复 | 举报

chinaunix网友2008-12-08 17:08:46

d.B1::fun(); d.B2::fun();这两个调用同一个函数。只有一个B0