-1

オブジェクトと、オブジェクトを拡張するとどうなるかについて、私は本当に少し混乱していると思います。

ここでの私の目標は、 A() を拡張して B() を作成し、 A() のすべての関数などを取得することですが、 B() 自体を作成する際に完全に自己完結型にすることです

B() は、どこかからインスタンス化されると、最終的に色を設定し、サイズを変更し、位置を設定するなどして、次のようなことができるようにします。

B::B *b = new B:B(something in);
this -> addChild(b, 1);

したがって、 this->addChild() を追加すると、 B() で設定した方法で機能します

対:

B::B *b = new B:B(something in);
b->setPosition();
b->setColor();
...
this -> addChild(b, 1);

カプセル化と継承にありますか?

更新:だから、私を混乱させているのは、次の場合だと思います:

class A : public Z {

}

class b : public Z {

}

A:

B::B *b = new B::B()
this-> addChild(b,1)

これはうまくいかないのですか?

4

1 に答える 1

1

あなたは拡張しているのではなく、構成を作っています。

クラス B を A から拡張する場合 (A ですべての保護されたメソッドとパブリック メソッドを取得するため)、次のように B を定義する必要があります。

class B : public A { ... }

B の中に A を含めたい場合は、読者にわかりやすくする必要があります。明確でない限り、両方のオプションは問題ではありません。あなたの場合、 addChild は1つの操作にすぎないように見えるため、最初のものを好みます。

編集:わかりました、編集後ははい、動作するはずです。ただし、B が B 名前空間内にない限り、B::B を配置する必要はありません。new B()、new A() を呼び出すだけです。

A *a = new A(..);

いくつかの URI: -継承よりも構成を優先しますか? - http://en.wikipedia.org/wiki/Composition_over_inheritance

于 2013-05-06T16:23:08.540 に答える