ホームページ  >  記事  >  バックエンド開発  >  C++ ではどのような場合に継承を使用し、どのような場合に合成を使用する必要がありますか?

C++ ではどのような場合に継承を使用し、どのような場合に合成を使用する必要がありますか?

WBOY
WBOYオリジナル
2024-06-03 10:33:56762ブラウズ

C++ では、継承を使用して「is-a」関係を確立し、インターフェースの一貫性を確保します。また、合成は「1 つを含む」関係を確立するために使用され、柔軟性が提供されます。継承: サブクラスが基本クラスと「is-a」関係を持つ場合 (車両や車など) に使用されます。組み合わせ: コンテナ クラスとコンポーネント クラスが「1 つを含む」関係にある場合に使用されます。たとえば、ゲーム内のキャラクターに武器、防御力、体力の値が含まれています。

C++ 中什么时候应该使用继承,什么时候应该使用组合?

C++ の継承と合成: いつ使用するか?

C++ では、継承と合成はオブジェクトの編成とコードの再利用に使用される 2 つの手法です。どのテクノロジーをいつ使用するかを理解することは、保守可能でスケーラブルなコードを作成するために重要です。

継承

継承により、あるクラス (サブクラス) が別のクラス (基本クラス) からデータと動作を継承できます。サブクラスは、基本クラス内のすべての非プライベート メンバー変数および関数にアクセスでき、これらのメンバーをオーバーライドして異なる動作を実現できます。

継承を使用する場合:

  • サブクラスが基本クラスと「is-a」関係を持つ場合、たとえば:

    • 乗り物: 車、トラック、オートバイ
    • 動物: 猫、犬、鳥
  • 特定のインターフェイスを適用する必要がある場合、たとえば:

    • 形状: 円、正方形、三角形

利点:

  • コードの再利用性を提供
  • ポリモーフィズム (仮想経由
  • インターフェイスの一貫性の強制

合成

合成には、クラス (コンテナ クラス) を作成し、その中にポインタまたは参照を介して別のクラス (コンポーネント クラス) をデータ メンバーとして含めることが含まれます。合成により、コンテナ クラスがコンポーネント クラスの機能を使用できるようになりますが、この 2 つはメモリ内の別個のエンティティです。

コンポジションを使用する場合:

  • コンテナ クラスがコンポーネント クラスと「contains-one」関係を持つ場合: 例:

    • 車: エンジン、タイヤ、ボディ
    • コンピューター: マザーボード、CPU 、メモリ
  • さらに高い柔軟性が必要な場合、たとえば:

    • 実行時にコンテナ クラスのコンポーネントを変更する
    • 異なるタイプのコンポーネントを使用して同じインターフェイスを実装する

利点:

  • の提供 柔軟性の向上
  • コードの再利用が可能
  • モジュール性の促進

実践例:

さまざまな動物を表現する必要がある動物シミュレーション プログラムを考えてみましょう。継承を使用して、共通のプロパティ (名前、種類など) を含むすべての動物の基本クラス Animal を定義できます。次に、特定の種類の動物を表すサブクラス CatDog、および Bird を作成し、各サブクラス仮想関数の固有の動作の記述をオーバーライドできます。 。 Animal,包含共同属性(例如名称、类型)。然后,我们可以创建子类 CatDogBird 来表示特定类型的动物,并为每个子类重写描述独特行为的虚函数。

另一方面,可以考虑一个游戏引擎,其中需要表示角色。我们可以使用组合为每个角色创建一个容器类 Character

一方、キャラクターを表現する必要があるゲーム エンジンを考えてみましょう。コンポジションを使用して、他のクラスをコンポーネントとして含む各キャラクターのコンテナ クラス Character を作成できます:

class Character {
public:
  Sword* sword;  // 组件:武器
  Shield* shield;  // 组件:防御
  Health* health;  // 组件:生命值
};

この方法では、作成することなく、異なる武器、防御力、健康値の役割を持つ各キャラクターを簡単に作成できます。複数の継承クラス。

要約すると、C++ では、継承は主に「is-a」関係を確立し、インターフェイスの一貫性を強制するために使用され、合成は主に「contains-one」関係を確立し、より高い柔軟性を提供するために使用されます。アプリケーションの特定の要件に応じて、これらのテクノロジを賢明に選択することが、明確で保守可能なコードを作成するために重要です。 🎜

以上がC++ ではどのような場合に継承を使用し、どのような場合に合成を使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。