C++多继承时,多个基类函数有相同名称的变量,怎么解决?

不会直接覆盖?会出现二义性?是不是 要使用作用域运算符调用??

类C存在两个x成员,分别从A和B继承。若c是class C的实例,可以用c.A::x这种用法,但c.x会因为歧义引起编译错误(注意这里的成员名称解析在访问权限之前,改变访问权限无法避免歧义)。注意对于类名C直接使用成员操作符“.”是错误的,另外这里若x是C的static成员对象,则可以使用C::x或c.x引用这个成员。(另外,LZ的访问权限语法错误,类定义之后都漏了分号,会产生编译错误。Java/C#/D用惯了- -?)
测试代码:
class A
{
public:
int x;
};
class B
{
public:
int x;
};
class C: public A, public B
{
public:
} c; //这里顺便定义一个实例。
int main()
{
c.A::x++; //++只是为了防止引起“无意义语句”的编译警告,逻辑上无意义,下同。
c.B::x++;
c.x++; //编译错误:歧义的成员名称x。
return 0;
}
====
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-05-23
可使用虚基类D A,B同名函数和数据作为共性由抽象类D派生出来,这样多继承A与B时的C可以只继承重复函数或数据中的一个。

C++多继承时,多个基类函数有相同名称的变量,怎么解决?
若c是class C的实例,可以用c.A::x这种用法,但c.x会因为歧义引起编译错误(注意这里的成员名称解析在访问权限之前,改变访问权限无法避免歧义)。注意对于类名C直接使用成员操作符“.”是错误的,另外这里若x是C的static成员对象,则可以使用C::x或c.x引用这个成员。(另外,LZ的访问权限语法错误,...

C++多继承(多重继承)详解
在多继承中,如果多个基类包含同名成员,会引发命名冲突。此时,需要在成员名前加上类名和域解析符::以明确调用哪个基类的成员。举例来说,给BaseA和BaseB类添加show()函数,并在Derived类中将show()函数重命名为display():在第64、65行代码中,我们明确指出了要调用哪个基类的show()函数,以消除二...

C++的多重继承
当派生类从两个以上基类继承时,如果基类中有同名成员,需采用成员前加类名与域解析符::的方式来区分这些成员,以避免命名冲突。实例中对BaseA与BaseB类的show()函数添加了show()函数并重命名为display(),显示了明确指明调用哪个基类的成员的方法。从以上描述与实例可以看出,多继承提供了程序设计的灵...

C++的虚基类的作用是什么
虚基类的作用是解决在多重继承中重复继承的问题

麻烦大神们用用通俗的解释给我解释一下c++中的虚继承
C++允许多继承,一个类可以继承多个基类,比如:D 类继承了 B1 和 B2 两个类,这本来没什么问题。但是,如果这里的两个基类 B1 和 B2 都是从一个共同的基类 B 那里派生出来的,你就遇到了可怕的“菱形”(继承关系)。造成的问题就是,在 D 类中,B 类的内容继承了两份,不但多占用了空间,...

c++ 类的多承继承中,第一层的父类中的虚函数
1. 菱形问题是指R1中的成员在C1中会有两个拷贝。2. 当A1、B1使用virtual来继承R1时,菱形问题得到解决。3. 当A1、B1分别重载实现了R1中的相同的成员函数时,问题又来了:C1中有两个签名完全相同的函数,分别来自A1(void A1::print( ) )、B1(void B1::print( ) ),当C1对象调用print时,...

c++的多继承有什么缺点和优点?
多继承在编程语言C++中的使用既有利也有弊。理论上,多继承允许一个类同时从多个基类继承特性,这样的设计在某些情况下显得非常灵活,例如在设计一个如飞马这样的生物,它能同时具备飞行和奔跑的能力。然而,这种设计在实践中并非总是理想选择。在实际应用中,多继承的情况并不常见,因为大多数实体从多个...

关于多继承二义性的描述中,( )是错误的。
【答案】:答案:C 解析:多继承的二义性主要分为两种:调用不同基类的同名成员时可能出现二义性,访问共同基类的成员可能出现二义性 派生类都只有一个基类,称为单继承。同时C++也支持多继承,即一个派生类可以有两个或多个基类。注意:多继承容易让代码逻辑复杂、思路混乱,具有一定争议,中小型项目...

C++中多继承的练习题,请问这两题答案是? 讲解一下,谢谢
一个类可以多次成为派生类的间接基类,但是要用虚继承,如果不是虚继承,是不可以多次成为派生类的间接基类的,不然当访问基类数据的时候,派生类根本不知道你要访问的是哪一个基类的成员,但是虚继承能保证数据的唯一性,相同的基类只会存在一份数据;4选D,这个不用多说吧,规则的问题是定死了的 ...

c++单继承和多继承优缺点
同时,多继承也容易导致"菱形继承"问题,即同一个基类被多次继承,可能会带来二义性和性能损耗。3. 除了单继承和多继承,C++还提供了接口继承和虚继承等方式来满足不同的设计需求。接口继承通过纯虚函数实现,使得子类必须实现接口中定义的方法;虚继承则解决了多继承中的菱形继承问题,通过虚基类指针和...

相似回答