面向对象设计C---虚基类(四十二)

1208阅读 0评论2011-04-20 yuweixian4230
分类:C/C++


                        虚基类

通过下图,多继承 ,我们知道一共有 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. };










上一篇:面向对象设计C---派生类对象的初始化 实验(四十一)
下一篇:面向对象设计C---虚函数(四十三)