2つの抽象クラス間の構成(アグリゲーションではない)の関係を構築することは可能ですか?抽象クラス間の合成
私は抽象クラスをインスタンス化できないので、私はそうは思わない。しかし、おそらくそれを行う簡単な方法があります。
2つの抽象クラス間の構成(アグリゲーションではない)の関係を構築することは可能ですか?抽象クラス間の合成
私は抽象クラスをインスタンス化できないので、私はそうは思わない。しかし、おそらくそれを行う簡単な方法があります。
はい:あなたは抽象型へのポインタを持つことが許可されている
class A
{
virtual ~A() = 0;
};
class B
{
virtual ~B() = 0;
A* mA;
};
。
他のクラスへのポインタまたは参照を使用できます。たとえば、次のC++ 11では
class A {
public:
virtual void m() = 0;
virtual ~A() { }
};
class B {
public:
virtual void m() = 0;
virtual ~A() { }
private:
boost::scoped_ptr<A> a;
};
あなたの代わりにstd::unique_ptr
を使用することができます。これにより、B
はコピー不可能になることに注意してください。これは、サブタイプ多型を使用するクラスでは多少共通です。
aをプライベートメンバーとして宣言しました。 Bは抽象的なので、保護されていると宣言するのではないでしょうか? – Ale
AとBの間の集計ではありませんか? mAはBの外では生きていませんか? mAの寿命の責任を作成するにはBに関して、私はB ::〜B {delete mA;}を置くべきです...それは正しいですか? (virtual〜B()とvirtual〜B()= 0ではない) – Ale
は必要ありません。責任は論理的なものです。 Bの中にmAを作成する必要はありません。あなたはそれを外部から割り当てて、それを破壊する責任をクラス外のものに委譲することができます。 –