Chinaunix首页 | 论坛 | 博客
  • 博客访问: 156319
  • 博文数量: 44
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 407
  • 用 户 组: 普通用户
  • 注册时间: 2015-11-10 13:28
个人简介

仰望星空

文章分类
文章存档

2016年(22)

2015年(22)

我的朋友

分类: C/C++

2016-04-04 16:15:28


点击(此处)折叠或打开

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. class A
  5. {
  6. protected:
  7.    int a;
  8. public:
  9.    A():a(50){}
  10.    void print(){cout<<"A "<<a<<endl;}
  11. };
  12.  
  13. class B1:virtual public A
  14. {
  15. protected:
  16.    int b1;
  17. public:
  18.    B1():b1(60){}
  19.    void g(){a=10;cout<<"B1 "<<a<<" "<<b1<<endl;}
  20. };
  21.  
  22. class B2:virtual public A
  23. {
  24. protected:
  25.    int b2;
  26. public:
  27.    B2():b2(70){}
  28.    void g(){a=20;cout<<"B2 "<<a<<" "<<b2<<endl;}
  29. };
  30.  
  31. class C:public B1, public B2
  32. {
  33. protected:
  34.    int c;
  35. public:
  36.    C():c(80){}
  37.    void g(){a=30;b1=40;b2=50;cout<<"C "<<a<<" "<<b1<<" "<<b2<<" "<<c<<endl;}
  38.    /*虚基类的成员在进一步派生过程中和派生类一起维护同一个内存数据拷贝,
  39.      所以a变量只存在唯一的一个,不需使用作用域运算符*/
  40. };
  41.  
  42. int main()
  43. {
  44.    C d1;
  45.    /*使用虚基类后,类D对象中只存在一个虚基类A的子对象,所以d1.print()是合法的*/
  46.    d1.print();
  47.    d1.B1::g();
  48.    d1.B2::g();
  49.    d1.g();
  50.  
  51.    return 0;
  52. }

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