大きなクラスの最小限のインターフェイスとして機能するいくつかの非常に小さなクラスを含むプロジェクトがあります。これらのインターフェースのいくつかを必要とするオブジェクトがある場合があります。また、これらのインターフェイスが同じ派生基本クラスを共有する場合もあります。すべてのインターフェイスが共有する派生基本クラスのコピーを 1 つだけ持つように、コードを構造化する方法はありますか?
コード例を次に示します。
class A {
public:
virtual void f(int a)=0;
virtual int g() const {
return m_inner;
}
protected:
int m_inner;
};
class B : public A {
public:
virtual void f(int a)=0;
virtual void h(int b) {
m_stuff = b;
m_inner = 0;
}
protected:
int m_stuff;
};
class C : public A {
public:
virtual void f(int a)=0;
virtual int i() const {
return m_otherstuff;
}
protected:
int m_otherstuff;
};
class D : public B, public C {
public:
void f(int a) { //do stuff }
//fill in the rest of a big actual class.
};
D には A の 2 つのコピーがあり、A:: の参照はあいまいです。一日の終わりに A のコピーを 1 つだけ取得するようにクラスを構成する最良の方法は何ですか? 私は、A、B、C をどのような方法でも喜んで再構築します。これは可能ですか?