2番目のケースを実装する唯一のポイントは、オブジェクトではなくCollidableから派生させたいのですか?そうであれば、第2のケースはより柔軟性を提供するので、第1のケースは常に好都合である。どのタイプの継承がより望ましいですか?
両方の衝突可能オブジェクトは純粋な仮想関数のみを持ち、Objectは(私の場合は)画面に描画できるオブジェクトの基本クラスです。
マットに基づいて/セス・
class Object
class Collidable
class Clickable
class Trackable
class BlowUppable
class Actor : public Object, public Collidable, public Clickable, public Trackable,
public BlowUppable
class SomeObjectThatIsTakenForGrantedThatEverythingElseIsInherited : public Actor
まず例:
^私が正しく、次のコードを理解してると仮定
class Object
class CollidableObject : Object
class Actor : public CollidableObject
class Object
class Collidable
class Actor : public Object, public Collidable
編集(私はTBHあまりにもわからないんだけど)第2の場合であり、第2の例は第1の場合である。私はそれが最初のケースのために見る唯一の使用だと思います。
@ルチアン
あなたの返信がどちらでもなかったため、これは元のものとは異なる質問になります。
この場合、オブジェクトをis-a関係からhas-a関係に変更する違いはありますか?それぞれの場合において、衝突をチェックするためには、オブジェクトは、衝突がチェックされるべきかどうかを知るためのフラグを持たなければならない。あなたの場合、メンバはnullかどうかを調べることができますが、派生した場合、オブジェクト自体が衝突する可能性があるかどうかを通知します。配列/ツリーでは、get()メソッドを使用して、派生オブジェクトを引数として渡すか、またはヒットボックスを引数として渡すことができます。
深さでより多くのことには、私は別のクラスを持っている - 2番目のケースに
class Hitbox : public Object, public Collidable
を使用し、Actorクラスはメンバーとしてそれを持って衝突を持って
class Actor : public Object
{
Hitbox *box;
};
オブジェクトがヒットボックスを持っているでしょう代わりに、これはあなたの投稿を正確に表していると思います。しかし、まだ私を得ることは、あなたの例をもう一度見直すと、代わりにHitboxにCollidableメンバーが必要だということですか?
私が持っているclass Hitbox
{
Collidable *collision;
};
:メンバー
俳優がすでにフォローしているよう
継承衝突可能か
持って衝突可能:俳優はヒットボックスが何をすべき衝突
を扱うヒットボックスを保持している
あなたの大会Hitboxは同じようにする必要がありますか?
最初に「CollidableTrackableClickableBlowuppableObject」を設定する必要はありません。最初の方法と同様に、 'Collidable'、' Trackable'、 'Clickable'、' Blowuppable'から継承したクラスですが、最初のように 'Object'を継承しません。私は最初のものがより有用であるかどうか分からない。すべての「Clickable」が画面に描画可能であるべきではないか?それらをすべて別々にすると、 'Object'がクリック可能かどうか、あるいは' Clickable'がドロウアブルかどうかは分かりません。 2番目の方法では、「Clickable」はドロウアブルであることがわかります。 –
あなたは私が言っていた_second_をしたら、あなたは...持っている必要はありません。 –