面试题答案
一键面试二义性产生原因
在C++多重继承中,当一个派生类从多个基类继承,且这些基类中有同名成员(函数或变量)时,就会产生二义性。因为编译器无法确定派生类对象访问该同名成员时,应该使用哪个基类的成员。
消除二义性的方法及示例
- 使用作用域运算符明确指定
#include <iostream>
class Base1 {
public:
void display() {
std::cout << "Base1 display" << std::endl;
}
};
class Base2 {
public:
void display() {
std::cout << "Base2 display" << std::endl;
}
};
class Derived : public Base1, public Base2 {
public:
void callDisplay() {
// 明确指定使用Base1的display函数
Base1::display();
// 明确指定使用Base2的display函数
Base2::display();
}
};
int main() {
Derived d;
d.callDisplay();
return 0;
}
- 在派生类中重写同名成员
#include <iostream>
class Base1 {
public:
void display() {
std::cout << "Base1 display" << std::endl;
}
};
class Base2 {
public:
void display() {
std::cout << "Base2 display" << std::endl;
}
};
class Derived : public Base1, public Base2 {
public:
void display() {
// 这里可以选择调用某个基类的display,或者执行新的逻辑
Base1::display();
std::cout << "Derived display" << std::endl;
}
};
int main() {
Derived d;
d.display();
return 0;
}