多继承

多继承允许一个类从多个基类继承特性,形成派生类。在构造顺序上,先执行基类构造函数,然后是派生类。若多条继承路径存在公共基类,可能导致二义性。此时,通过声明公共基类为虚基类可以消除这种问题,确保只有一个实例。文章以代码示例解释了如何使用虚基类解决二义性问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发工具与关键技术: Visual Studio / C++
作者:何文涛
撰写时间:2019-5-27

多继承是一个类有多个直接基类的继承关系,多继承可以说是单继承的扩展。多继承是指派生类有多个基类,派生类与每个基类之间的关系也看作是一个单继承。

多继承语句写法:
class 派生类名:访问语句 基类名A ,访问语句 基类名B …
{
数据成员和成员函数声明
};

一个简单的多继承:
class Ared{
};
class Bred{
};
class Cred :public Ared , public Bred{
};
以上就是一个多继承派生类Cred同时继承于Ared和Bred两个基类,
也就是有有多个父类。

多继承构造访问:
派生类构造函数执行顺序是先执行所继承基类的构造函数,再执行派生类本身构造函数,处于同一层次的各基类构造函数的执行顺序取决于定义派生类时所指定的各基类顺序。
构造对象的规则需要扩展以控制多重继承。构造函数按下列顺序被调用。
任何 虚拟基类的构造函数按照它们被继承的顺序构造。
任何非虚拟基类的构造函数按照它们被继承的顺序构造。
任何成员对象的构造函数按照它们声明的顺序调用。
类自己的构造函数。

虚基类:
如果一个派生类从多个基类派生而且刚好有这些基类刚好又有共同的一个基类,要是只是通过名字进行访问的话,就有可能产生二义性,当在多条继承路径上有一个公共的基类,在这些路径中的某几条汇合处,这个公共的基类就会产生多个实例,要只想保存这个基类的一个实例,可以将这个公共基类说明为虚基类。
定义虚基类方法:在继承的类前面添加virtual限定符。

下面就举了个例子:
如图所示

在这里插入图片描述

图中定义了四个类,Sred,Ared,Bred和Cred其中,派生类类Cred直接多继承了了
类Ared和类Bred,而这两个类又继承了一个父类,所以第一个基类被继承了两次,这
里直接使用类对象访问的话就会出现二义性。

Main函数主方法:
void main()
{
Cred C;
C.S;
}

这里定义了类Cred一个对象,通过类对象来访问成员S,这里是不能被访问的
因为系统不知道你要访问的是哪个类里面的成员S。

要消除这个二义性就可以用虚基类来解决

在这里插入图片描述

类Sred只有一个成员变量,由于该子类被定义为虚基类,所以继承下来的成员S被约束了
无论使用不同的路径来访问S都是那唯一的对象,所以就不存在二义性了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值