Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4244653
  • 博文数量: 1148
  • 博客积分: 25453
  • 博客等级: 上将
  • 技术积分: 11949
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-06 21:14
文章分类

全部博文(1148)

文章存档

2012年(15)

2011年(1078)

2010年(58)

分类: C/C++

2011-04-20 12:01:29


                        虚基类

通过下图,多继承 ,我们知道一共有 4 个成员 被 继承,

其中有两个名字相同,而不是只继承了 3 个成员







如果 要访问 不同类 中的数据成员

  1. void C::output()
  2. {
  3.   cout<<A::x<<endl;
  4.   cout<<B::x<<endl;
  5. }

如果我们 只这么写
  1. void C::output()
  2. {
  3.    cout<<x<<endl;
  4. }
这样是错误的,是模棱两可的,编译器不知道,x是 基类A 还

是 基类B 当中的 x


这种情况,我们使用 域限制符 :: 来区别








2.。





上面的程序中:C 一共有 4  个成员,2个 x 成员变量,2

个成员函数。

但是 上面的  是错误的,模棱两可问题 x,我们只需要指定

需要的 基类::

 
  1. void C::input(int xx)
  2. {
  3.       x=xx;
  4. }
  5. void C::output()
  6. {
  7.      cout<
  8. }

  修改为:
  1. void C::input(int xx)
  2. {
  3.    A::x = xx;
  4.    B::x = xx;
  5. }

  6. void C::output()
  7. {
  8.    cout<<A::x<<endl;
  9.    cout<<B::x<<endl;
  10. }



有个想法:

    看到 A B C类 都继承了 Cbase 类,A继承了 一个x ,B

继承了一个x,但是 C 继承了2个x,多一个x,就多占用了一

个内存,如果我们只想继承B C 类的一个x,我们应该怎么办

呢??


我们C++引用了
虚基数  的继承方式 如下:

这样我们就 留下了一个 x 的副本

实现 在 c 继承类 中 只继承了一个 x


使用 virtual

  1. class A:virtual public Cbase
  2. {

  3. };

  4. class B:virtual public Cbase
  5. {

  6. };

  7. class C:public A,public B
  8. {

  9. };










阅读(1120) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~