多重继承

多重继承的使用场景:仅允许最多一个基类中包含实现,其他基类都是以Interface为后缀的纯接口。

不好示例

class BaseClassA {
public:
    virtual void doSomething() = 0;
    void commonFunction() { /* 实现 */ }
};

class BaseClassB {
public:
    virtual void doSomething() = 0;
    void anotherCommonFunction() { /* 实现 */ }
};

class DerivedClass : public BaseClassA, public BaseClassB {
public:
    void doSomething() override { /* 实现 */ }
};
  • 两个基类BaseClassA和BaseClassB都包含实现,违反了单一实现原则。
  • 继承结构复杂,难以维护和理解。

推荐示例

class IBaseInterface : public IInterface {
public:
    virtual void doSomething() = 0;
};

class BaseImpl {
public:
    void commonFunction() { /* 实现 */ }
    void anotherCommonFunction() { /* 实现 */ }
};

class DerivedClass : public IBaseInterface, public BaseImpl {
public:
    void doSomething() override { /* 实现 */ }
};
  • IBaseInterface是一个纯接口,以Interface为后缀,清晰标识其为接口。
  • BaseImpl包含具体的实现,遵循了单一实现原则。
  • 继承结构清晰,易于理解和维护。