C++多继承的二义性问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

C++多继承的二义性问题
在多重继承中,需要解决的主要问题是标识符不唯一,即二义性问题。

比如,当在派生类继承的多个基类中有同名成员时,派生类中就会出现标识符不唯一的情况。

在多重继承中,派生类由多个基类派生时,基类之间用逗号隔开,且每个基类前都必须指明继承方式,否则默认是私有继承。

可以通过以下3种方法解决二义性问题。

使用运算符"::";
使用同名覆盖的原则;
使用虚基类;
1. 使用域运算符
如果派生类的基类之间没有继承关系,同时又没有共同的基类,则在引用同名成员时,可以在成员名前面加上类名和域运算符来区别来自不同基类的成员。

2.使用同名覆盖的原则
在派生类中重新定义与基类中同名的成员(如果是成员函数,则参数表也要相同,否则是重载)以屏蔽掉基类中的同名成员,在引用这些同名成员时,引用的就是派生类中的成员。

#include
using namespace std;
class Base
{
public:
int x;
void show()
{
cout
3.虚基类
在多重继承中,要引用派生类的成员时,先是在派生类自身的作用域内寻找,如果找不到再到基类中寻找。

这时,如果这些基类有一个共同的基类,派生类访问这个共同基类的成员时,就有可能由于同名成员的问题而发生二义性,此时就需要虚基类来解决。

相关文档
最新文档