C++多继承二义性问题一
多继承:一个类继承了多个父类这就叫做多继承。
二义性问题描述:当C继承了A和B,A和B都恰好有相同名字的成员,C调用该成员时就出现了歧义,编译器不知道C调用的是哪一个父类的成员。
解决方法:
1、将A或B类的成员更改名字即可。
2、在C类中重新定义有歧义的成员名称,将继承的成员隐藏(重定义)。
3、指定调哪一个父类的成员,即子类名.父类名::成员方法,如下段代码所示:
#include<iostream>
using namespace std;
//定义父类A
class A{
public:
int v1;
void set(int v1);
void print(void);
};
//定义父类A
class B{
public:
int v2;
void set(int v2);
void print(void);
};
//子类继承父类A和父类B
class C: public A, public B{
};
//类A的成员方法set
void A::set(int v1)
{
this->v1 = v1;
}
//类A的成员方法print
void A::print(void)
{
cout << "v1 = " << this->v1 << endl;
}
//类B的成员方法set
void B::set(int v2)
{
this->v2 = v2;
}
//类B的成员方法print
void B::print(void)
{
cout << "v1 = " << this->v2 << endl;
}
int main()
{
C c; //定义一个子类C
c.A::set(7); //指明调用的是父类A的成员方法set
c.A::print(); //指明调用的是父类A的成员方法print
return 0;
}