面向对象的程序设计-学习笔记-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值是一样的
}
虚基类仅仅适用于多继承。一个类是不能够多次作为某个派生类的直接基类。但是可以多次作为一个
派生类的间接基类。
*/
#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值是一样的
}
相关文章推荐
- PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
- c++ primer(第五版)学习笔记及习题答案代码版(第十五章)面向对象程序设计
- C++primer学习笔记----面向对象程序设计(2)
- Java学习笔记16(面向对象九:补充内容)
- JavaSE入门学习24:Java面向对象补充
- PHP 面向对象程序设计(oop)学习笔记(一) - 抽象类、对象接口、instanceof 和契约式编程
- 《c++ primer》 第15章 面向对象程序设计 学习笔记
- C++primer学习笔记----面向对象程序设计(2)
- php学习笔记------[PHP面向对象的程序设计]
- 《Javascript高级程序设计》(第2版)学习笔记08--面向对象的程序设计
- PHP 面向对象程序设计(oop)学习笔记 (二) - 静态变量的属性和方法及延迟绑定
- C++primer学习笔记----面向对象程序设计(2)
- 面向对象的程序设计学习笔记-19-静态成员函数的使用
- C++primer学习笔记----面向对象程序设计(2)
- C++ 学习笔记(15)面向对象程序设计(类、继承、虚函数、抽象类、using命令、容器与继承)
- JavaScript基础学习笔记(四) ---面向对象的程序设计
- PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
- 面向对象的程序设计1 理解对象—— JS学习笔记2015-7-4(第75天)
- C++primer学习笔记----面向对象程序设计(2)
- 面向对象的程序设计-学习笔记-20-常量对象