アプリケーションにいくつかのクラスがあり、クラス間の相互作用を基本クラスに制限したいと考えています。これを具体的にするために、今私は次のようなことをしたいと思っています:
class A
{
data
public:
void method();
};
class A_child : public A
{
//stuff
};
class B
{
public:
B(class A *a);
};
class B_child : public B
{
public:
B_child(class A *a);
B_method(); // does some stuff with data in A and B.
};
実際には、各クラスには個別のヘッダー ファイルがあるため、前後に多くのインクルードがあります...
A_child の cpp ファイルで、B_child (または B) を使用できるようにしたいと考えています。しかし、次のような呼び出しを避ける方法がわかりません
void A_child::method()
{
// stuff
B_child *example_B;
example_B = new B_child(this);
example_B->B_method();
// more stuff
}
そうである必要はありません
example_B = new B_child(this);
必然的に、A_child の親クラスを B または B_child のコンストラクターに渡す何らかの方法が必要になるだけです。
私がやりたいのは、 B_child を次のように定義する必要を避けることです:
class B_child : public B
{
public:
B_child(class A_child *a_child);
B_method();
};
これは、B_child が A ではなく A_child と連携する必要があることを暗示しているように思われるためです。これは事実ですが、B または B_child が連携する素材には、A_child を必要とするものは何もありません。つまり、A のデータです。 A_child ではなく、十分です。
C++でこれを行う方法があると思いますか? このようなものがどのように機能するか、またはこれを行う方法を説明するページへのリンクの例を教えてもらえますか?
ありがとう。