面试题答案
一键面试#include <iostream>
class A {
public:
void print() {
std::cout << "A's print function" << std::endl;
}
};
class B {
public:
void print() {
std::cout << "B's print function" << std::endl;
}
};
class C : public A, public B {
public:
// 使用using声明来消除二义性
using A::print;
// 如果想默认调用A的print函数,也可以在这里重新定义print函数
// void print() {
// A::print();
// }
};
int main() {
C c;
c.print();
return 0;
}
解释:
- using声明:在类
C
中使用using A::print;
,这样在C
的作用域内,print
函数优先解析为A
类中的print
函数,从而消除了调用print
函数时的二义性。如果同时使用using A::print;
和using B::print;
,在调用c.print()
时仍会有二义性,除非使用c.A::print();
或c.B::print();
这样明确指定作用域的方式调用。 - 重新定义:也可以在类
C
中重新定义print
函数,如上述注释部分代码,这样可以选择默认调用A
的print
函数或者按照需求自定义实现。