面向对象的程序设计-学习笔记-24-虚基类的例题补充

/*关于虚基类的说明和使用
虚基类仅仅适用于多继承。一个类是不能够多次作为某个派生类的直接基类。但是可以多次作为一个
派生类的间接基类。
*/
#include<iostream>
using namespace std;
class A
{
public:
int value;
A(int v){value=v;}
int get_value(){return value;}


};
class B:virtual public A
{
public:
int b_value;
B(int v,int b);//构造函数
int get_b_value(){return b_value;}
};
B::B(int v,int b):A(v)//派生类的构造函数
{b_value=b;}
class C:virtual public A
{
public:
int c_value;
C(int v,int c);//构造函数
int get_c_value(){return c_value;}
};
C::C(int v,int c):A(v)
{
c_value=c;
};
class D:public B,public C//多继承,都是公有继承
{
public:
int d_value;
D(int v1,int v2,int b,int c,int d);//构造函数
int get_d_value(){return d_value;}
int get_value(){return value;}//读取从虚基类A继承的公有数据成员value
};
D::D(int v1,int v2,int b,int c,int d):B(v1,v2),C(b,c),A(v1)//当C的函数是私有的时候,是不能访问的
/*需要对A进行初始化的,当A(V2),或者A(v3)时,则得到不同的赋值*/
{
d_value=d;
}
void main()
{
D d1(1,2,3,4,5);
cout<<"最底层类D的对象d1的value="<<d1.get_value()<<endl;//读取虚基类中的值
cout<<"最底层类D的对象d1的b_value="<<d1.get_b_value()<<endl;
cout<<"最底层类D的对象d1的c_value="<<d1.get_c_value()<<endl;
cout<<"最底层类D的对象d1的d_value="<<d1.get_d_value()<<endl;
//2为B的b_value值,同理访问3值.由于B和C中形参v1和b都是对从A中继承来的私有数据的初始化的。
cout<<"请注意下面的值;"<<endl;
cout<<"最底层类D的对象d1的b_value="<<d1.B::get_b_value()<<endl;
cout<<"最底层类D的对象d1从基类继承来的value值="<<d1.B::get_value()<<endl;
cout<<"最底层类D的对象d1的从基类继承来的value值="<<d1.C::get_value()<<endl;//由于是虚基类,所以C中继承的value跟D中的value值是一样的


}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值