面试题答案
一键面试class A {
public:
void print() {
// 函数实现
}
};
class B {
public:
void print() {
// 函数实现
}
};
class C : public A, public B {
public:
// 可在这里根据需求重写print函数
// void print() {
// // 函数实现
// }
};
当类C的对象调用print()
函数时,会出现二义性问题,因为编译器无法确定应该调用类A的print()
还是类B的print()
。
解决这个二义性问题有以下几种方法:
- 在类C中重写
print()
函数:在类C中定义自己的print()
函数,在该函数中可以根据需求决定调用类A还是类B的print()
函数,例如:
class C : public A, public B {
public:
void print() {
A::print(); // 调用类A的print函数
// 或者
// B::print(); // 调用类B的print函数
}
};
- 显式指定调用基类的函数:在调用
print()
函数时,显式指定调用哪个基类的函数,例如:
C c;
c.A::print(); // 调用类A的print函数
c.B::print(); // 调用类B的print函数