虚基类
来源:互联网 发布:win10 telnet 端口 编辑:程序博客网 时间:2024/05/17 22:31
派生类中可能包含了多个基类的实例。
多级混合继承情况下,若类D从两条不同“路径”同时对类A进行了虚拟继承的话,则类D的对象中只包含着类A的一个实例,这种继承也称为共享继承。被虚拟继承的基类A被称为虚基类(注意,虚基类的说明是在定义派生类时靠增加关键字virtual来指出的)。
说明格式:
class<派生类名> :virtual <派生方式><基类名>
{ <派生类体> };
即是说,采用虚拟继承后的类间继承关系如下所示:
classA
classB : virtual public A
classC : virtual public A
classD : public B, public C
存储结构示意:
(( (A) B C ) D )
让系统进行“干预”,在派生类中只生成公共基类A的一个拷贝,从而可用于解决二义性问题。
#include <iostream.h>
class A {
public:
int a;
void showa(){cout<<"a="<<a<<endl;}
};
class B: virtual public A //对类A进行了虚拟继承
{
public:
int b;
};
class C: virtual public A //对类A进行了虚拟继承
{
public:
int c;
};
class D : public B, public C
//派生类D的二基类B、C具有共同的基类A,但采用了虚拟继承
//从而使类D的对象中只包含着类A的1个实例
{
public:
int d;
};
void main() {
D Dobj; //说明D类对象
Dobj.a=11;
//若非虚拟继承时会出错!
// -- 因为“D::a”具有二义性
Dobj.b=22;
Dobj.showa();
//若非虚拟继承时会出错!
// -- 因为“D::showa”具有二义性
cout<<"Dobj.b="<<Dobj.b<<endl;
}
程序执行后的显示结果如下:
a=11
Dobj.b=22
- 虚基类
- 虚基类
- 虚基类
- 虚基类
- 虚基类
- 虚基类
- 虚基类
- 虚基类
- 虚基类
- 虚基类
- 虚基类
- 虚基类
- 虚基类
- 虚基类
- 虚基类
- 虚基类
- 虚基类
- 虚基类
- windows下FileZilla使用sftp(SSH-2)
- C++第一天遇到的一下问题
- POJ 2236 Wireless Network
- Codeforces 558D - Guess Your Way Out! II (求区间交,并)
- JavaWeb学习笔记:Tomcat
- 虚基类
- hdu 5310 Souvenir
- sgu296:Sasha vs. Kate(贪心)
- 使用 C# 开发智能手机软件:推箱子(二)
- 设计模式_享元模式
- 1001
- 插排最优情况
- 使用 C# 开发智能手机软件:推箱子(三)
- HDU 1501 Zipper(DFS)