您的位置:首页 > 其它

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

2013-01-16 11:45 295 查看
/*关于虚基类的说明和使用

虚基类仅仅适用于多继承。一个类是不能够多次作为某个派生类的直接基类。但是可以多次作为一个

派生类的间接基类。

*/

#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值是一样的

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐