改进C ++类架构,其中许多类派生自相同的两个基础

时间:2013-10-22 14:41:06

标签: c++ architecture

我有一个C ++架构,我有很多类,它们都来自两个不同的基类。所有派生类都以稍微不同的方式覆盖/实现基类中的相同方法。举例说明:

class B1 {
public:
    // method_1 is pure virtual.
    virtual void method_1() = 0;
};

class B2 {
public:
    // method_2 is not pure virtual.
    virtual void method_2();
};

class D1 : public B1, public B2 {
public:
    virtual void method_1() { // Does something... }
    virtual void method_2() { // Does something... }
};

class D2 : public B1, public B2 {
public:
    virtual void method_1() { // Does something slightly different... }
    virtual void method_2() { // Does something slightly different... }
};

一切正常,但由于有大约20个派生类,感觉就像应该是一种改进这种设计的方法,所以我必须编写更少的代码,特别是作为派生类在他们正在做的事情上往往非常相似。任何人都能为我提供未来的指示吗?

2 个答案:

答案 0 :(得分:1)

在不了解您的实施的的情况下,分析或建议更好的设计几乎是不可能的(例如, 正是您的程序尝试模型)。在这里做出一个非常广泛的陈述,很少有一些情况下使用一般形式的多重继承(即除了通过接口继承行为之外)是合理的。同样,这是一个一揽子声明,仍然有一些例外,具体取决于域。

答案 1 :(得分:1)

看一下策略设计模式。基本上,方法1和2包装在B1和B2类上,由D类的唯一指针拥有。然后你可以在D的构造函数中传递B1和B2实例。