多重继承和虚基类

来源:互联网 发布:下载超牛数据恢复软件 编辑:程序博客网 时间:2024/05/17 23:21

//派生类成员函数对基类成员函数的覆盖

#include "stdafx.h"

#include<iostream>

class A

{

public:

     void Show()

     {

         std::cout<<"A::Show/n";

     }

};

 

class B:public A

{

public:

     void Show()

     {

         std::cout<<"B::Show/n";

     }

     void Display()

     {

         Show();//调用派生类B的成员函数,覆盖掉继承自基类的Show()成员方法

         A::Show();//调用基类A的成员函数

     }

};

int _tmain(int argc, _TCHAR* argv[])

{

     A a;

     B b;

     a.Show();

     b.Show();

     b.Display();

     std::cin.get();

     return 0;

}

程序运行的结果:

A::Show

B::Show

B::Show

A::Show

一个派生类对象含有基类的数据成员的一个副本,在C++类的多重继承结构中,由于多层次的交叉派生关系,一个派生类中可能保留某个基类的多个实例。例如,在下图中,B:A,C:A,D:B,D:C,这是在派生类D的对象中存在间接基类A的两份副本。当试图通过派生类对象直接访问基类A中的成员是,将会导致编译二义性错误。

//多重继承的副本二义性

class A

{

public:

     int a;//a

};

 

class B:public A

{

public:

     int b;//a,b

};

class C:public A

{

public:

     int c;//a,c

};

class D:public B,public C

{

public:

     int d;//(a,b),(a,c),d

};

 

int _tmain(int argc, _TCHAR* argv[])

{

     D d1;

     d1.a=100;//此处a具有二义性,编译器无法确定a是那个副本

     d1.B::a=100;//指明访问的是通过B类间接派生的

     d1.C::a=100;//指明访问的是通过C类间接派生的

return 0;

}

编译结果:error C2385: ambiguous access of 'a'

若注释掉d1.a=100;则编译通过。

在多重继承中,C++提供了虚基类(virtual base class)来解决二义性的问题。虚基类只是一种派生的方式,类层次结构中某个虚基类成员只出现一次,即基类的一个副本被所有派生类对象共享。修改上例代码中BC的派生方式则d1.a=100;是合法的。

class B:public virtual A

{

public:

     int b;//a,b

};

class C:public virtual A

{

public:

     int c;//a,c

};

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 鸭子步蛙跳后腿疼怎么办 戴墨镜鼻子会红怎么办 校服黑色裙子染色了怎么办 新警培训时怀孕怎么办? 大学生欠了网贷怎么办? 车侧面底盘被刮怎么办 军人家属被打没人处理怎么办 孩子字写的难看怎么办 企业k宝锁死了怎么办 建行信用卡密码忘了怎么办 主卧对着卫生间怎么办 不会画农场的画怎么办 泰迪骨折了怎么办护理 狗狗的腿骨折了怎么办 狗狗摔了一下腿瘸了怎么办 狗狗前腿摔瘸了怎么办 狗摔跤腿瘸了怎么办 小狗的前腿弯了怎么办 两周的小狗缺钙怎么办 狗腿关节断了怎么办 五岁儿童抵抗力差怎么办 3岁儿童抵抗力差怎么办 四岁儿童抵抗力差怎么办 我孩子和我相冲怎么办 儿子不热母亲怎么办?单身呀? 大兔子吃小兔子怎么办 车窗贴膜里面有灰尘怎么办 陌陌小游戏不能玩游戏怎么办 电脑游戏里面的出现俄文怎么办 龙之谷手游转职业装备怎么办 如果函数值和类型不一致怎么办 qq提现不到账怎么办 提现的钱不到账怎么办 联璧金融提现不到账怎么办 孕早期拉稀拉水怎么办 兔子嘴巴摔烂了怎么办 猫咪耳朵里有黑的东西怎么办 兔子的腿骨折了怎么办 德牧耳朵立不起来怎么办 童鞋魔术贴太长了怎么办? 许昌国贸360手机没电怎么办