0

アプリケーションにいくつかのクラスがあり、クラス間の相互作用を基本クラスに制限したいと考えています。これを具体的にするために、今私は次のようなことをしたいと思っています:

    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++でこれを行う方法があると思いますか? このようなものがどのように機能するか、またはこれを行う方法を説明するページへのリンクの例を教えてもらえますか?

ありがとう。

4

2 に答える 2

0

B_childコンストラクターが を受け取る場合、" is-an" であるため(パブリック継承を介して)A *を渡すことができます。これを試してみて、エラーが発生しましたか?A_child *A_childA

于 2013-06-06T20:20:22.490 に答える