0

現在、Drawable と Transformable の 2 つのクラスがあり、Actors のようなものはこれらの両方を継承しています。問題は、オブジェクトを画面に描画するときに、Transformable に getPosition() 関数が含まれていない Drawables のベクトルを反復処理することです。仮想 getPosition() を Drawable に追加すると、これは解決されますが、別の場所で関数へのあいまいな呼び出しの問題が発生します。それでは、Drawable に Transformable を継承させ、Actor に Drawable を継承させて、両方のクラスを継承しているかのように同じ結果を得ることができますか?

編集: ドローアブルはすべてのアクターではなく、スプライト (ゲーム オブジェクト)、プリミティブ シェイプなどもあります。実際には、描画ループで getPosition() が必要な唯一の理由は、深さを偽造するためにベクターをループしてY 座標が 0 から画面の下部に移動すると、画面のより高い位置にあるオブジェクトが最初に描画され、次に「前面」に近いオブジェクトの背後に表示されます。Drawable/Transformable クラスは作成していません。1 つのインスタンスで 1 つの関数呼び出しを満たすために、それらを完全に変更する必要はありません。これが問題になるのは、Drawables のベクトルを参照するときだけです。ドローアブル クラスを使用するものはすべてトランスフォーマブル クラスも継承するため、このように設計された理由がよくわかりません。

私の質問は、これが次のとおりかどうかです。

class foo {}
class bar{}
class foobar : public foo, public bar {}

これと同じです

class foo {}
class bar : public foo {}
class foobar : public bar {}

オブジェクトは、親が継承するクラスの public および protected メンバーを継承できますか?

4

2 に答える 2

0

この場合、私が選択する設計は、Transformable クラスを削除し、位置属性とメンバー関数を Drawable クラスに移動することです。「描画可能」なものはどこかに描画する必要があるため、移動できるかどうかに関係なく、位置が必要です。

オブジェクトは、親が継承するクラスの public および protected メンバーを継承できますか?

短くて甘い:はい。(継承がpublicまたはの場合のみprotected)

継承の種類の詳細については、こちらを参照してください。

于 2013-10-27T13:44:08.413 に答える
0

描画可能でないオブジェクトが最初に変換されるかどうかを検討してください。決して見られないものを動かすのはなぜですか。

また、getPosition (およびおそらく setPosition) は、実際に描画可能なものの一部であってはなりませんか? そうでなければ、どこにそれを描くべきかをどのように知っていますか。

クラス構造を慎重に再検討し、一般的な機能を組み合わせて、何百万もの不要なインターフェースを持たないようにすることを強くお勧めします。

于 2013-10-27T13:44:47.503 に答える