MST

星途 面试题库

面试题:C++ 多继承二义性在复杂继承体系中的处理

假设有如下复杂的继承体系:A 类为基类,B 和 C 类都继承自 A,D 类同时继承 B 和 C,E 类继承自 D。现在 E 类对象想要访问 A 类的某个成员函数,在不修改 A、B、C 类的情况下,如何清晰且高效地解决可能出现的二义性问题?请写出具体的代码示例。
48.3万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

在 C++ 中,这种情况被称为菱形继承,会导致二义性问题。可以使用虚继承来解决。以下是代码示例:

#include <iostream>

class A {
public:
    void someFunction() {
        std::cout << "This is A's someFunction." << std::endl;
    }
};

class B : virtual public A {};

class C : virtual public A {};

class D : public B, public C {};

class E : public D {};

int main() {
    E e;
    e.someFunction();
    return 0;
}

在上述代码中,BC 类通过 virtual public A 虚继承 A 类,这样在 E 类中就只会有一份 A 类的成员,避免了二义性问题,e.someFunction() 可以清晰且高效地调用到 A 类的 someFunction 函数。