MST

星途 面试题库

面试题:C++ 纯虚函数接口设计下的多重继承问题

在 C++ 中,若一个类基于包含纯虚函数的接口类进行多重继承,可能会遇到哪些问题?如何解决这些问题?请举例分析。
28.8万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

可能遇到的问题

  1. 菱形继承问题:当多个父接口类有共同基类时,可能出现菱形继承,导致数据冗余和二义性。例如,若接口类 ABC 的共同基类,D 类多重继承 BC,那么 D 类会包含两份 A 的成员,访问 A 的成员时会出现二义性。
  2. 纯虚函数实现问题:多重继承多个接口类意味着需要实现多个接口中的纯虚函数,如果遗漏实现某个接口的纯虚函数,会导致编译错误,使得该类仍为抽象类,无法实例化。

解决方法

  1. 解决菱形继承问题:使用虚继承。通过在继承关系中使用 virtual 关键字,使得从不同路径继承过来的相同基类只保留一份实例。例如:
class A {
public:
    virtual void func() = 0;
};

class B : virtual public A {
};

class C : virtual public A {
};

class D : public B, public C {
public:
    void func() override {
        // 具体实现
    }
};
  1. 解决纯虚函数实现问题:仔细检查并确保实现了所有父接口类中的纯虚函数。在实现时,清晰地按照每个接口的要求编写函数体。例如,若有接口 Interface1Interface2Derived 类继承它们:
class Interface1 {
public:
    virtual void method1() = 0;
};

class Interface2 {
public:
    virtual void method2() = 0;
};

class Derived : public Interface1, public Interface2 {
public:
    void method1() override {
        // method1 的实现
    }
    void method2() override {
        // method2 的实现
    }
};