C++ では、継承を使用して「is-a」関係を確立し、インターフェースの一貫性を確保します。また、合成は「1 つを含む」関係を確立するために使用され、柔軟性が提供されます。継承: サブクラスが基本クラスと「is-a」関係を持つ場合 (車両や車など) に使用されます。組み合わせ: コンテナ クラスとコンポーネント クラスが「1 つを含む」関係にある場合に使用されます。たとえば、ゲーム内のキャラクターに武器、防御力、体力の値が含まれています。
C++ の継承と合成: いつ使用するか?
C++ では、継承と合成はオブジェクトの編成とコードの再利用に使用される 2 つの手法です。どのテクノロジーをいつ使用するかを理解することは、保守可能でスケーラブルなコードを作成するために重要です。
継承
継承により、あるクラス (サブクラス) が別のクラス (基本クラス) からデータと動作を継承できます。サブクラスは、基本クラス内のすべての非プライベート メンバー変数および関数にアクセスでき、これらのメンバーをオーバーライドして異なる動作を実現できます。
継承を使用する場合:
サブクラスが基本クラスと「is-a」関係を持つ場合、たとえば:
特定のインターフェイスを適用する必要がある場合、たとえば:
利点:
合成
合成には、クラス (コンテナ クラス) を作成し、その中にポインタまたは参照を介して別のクラス (コンポーネント クラス) をデータ メンバーとして含めることが含まれます。合成により、コンテナ クラスがコンポーネント クラスの機能を使用できるようになりますが、この 2 つはメモリ内の別個のエンティティです。
コンポジションを使用する場合:
コンテナ クラスがコンポーネント クラスと「contains-one」関係を持つ場合: 例:
さらに高い柔軟性が必要な場合、たとえば:
利点:
実践例:
さまざまな動物を表現する必要がある動物シミュレーション プログラムを考えてみましょう。継承を使用して、共通のプロパティ (名前、種類など) を含むすべての動物の基本クラス Animal
を定義できます。次に、特定の種類の動物を表すサブクラス Cat
、Dog
、および Bird
を作成し、各サブクラス仮想関数の固有の動作の記述をオーバーライドできます。 。 Animal
,包含共同属性(例如名称、类型)。然后,我们可以创建子类 Cat
、Dog
和 Bird
来表示特定类型的动物,并为每个子类重写描述独特行为的虚函数。
另一方面,可以考虑一个游戏引擎,其中需要表示角色。我们可以使用组合为每个角色创建一个容器类 Character
Character
を作成できます: class Character { public: Sword* sword; // 组件:武器 Shield* shield; // 组件:防御 Health* health; // 组件:生命值 };
以上がC++ ではどのような場合に継承を使用し、どのような場合に合成を使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。