推奨されます, 2024

エディターズチョイス

単一継承と多重継承の違い

継承は再利用性の概念を強く支持します。つまり、新しく作成されたクラスは既存のクラスのプロパティを再利用します。 アクセス指定子は、基本クラスメンバが派生クラスによって継承される方法を決定します。 継承シングル、マルチ、階層、マルチレベル、ハイブリッドを実現する方法はたくさんあります。 私たちの主な話題は単一継承と多重継承の違いです。 単一継承では、派生クラスが1つだけ継承する基本クラスは1つだけです。 多重継承では、2つ以上の基本クラスがあり、それらは1つの派生クラスによって組み合わせて継承されます。


比較表

比較基準単一継承多重継承
基本派生クラスは単一の基本クラスを継承します。派生クラスは2つ以上の基本クラスを継承します。
実装derived_classクラス:access_specifier基本クラスクラス派生クラス_class:access_specifier base_class1、access_specifier base_class2、...
アクセス
派生クラスが単一基本クラスの機能にアクセスする派生クラスは継承された基本クラスの複合機能にアクセスする
視認性公開、非公開、保護公開、非公開、保護
実行時間わずかな実行時間でオーバーヘッドが必要単一継承と比較してランタイムオーバーヘッドがさらに必要

単一継承の定義

単一継承には、単一の基本クラスと単一の派生クラスがあります。 派生クラスは、基本クラスを公的に、保護的に、そして個人的に継承します。 基本クラスのメンバーは、基本クラスの継承中に指定されたアクセス指定子に従って派生クラスからアクセスできます。

実際の例として、「口座クラス」と「普通預金クラス」の2つのクラスがあります。 ここで「普通預金クラス」は「普通預金クラス」の機能を継承することができるので、「普通預金クラス」クラスは普通預金クラスの基本クラス/上位クラス/親クラスになり、「普通預金クラス」は派生クラスになります。

ここでは、「アカウントクラス」の属性はacc_no(private)とbalance(public)、そしてメンバー関数はpublicのinitialize()とget_accno()です。 現在、「アカウントクラス」は「普通預金クラス」に継承されているため、「普通預金クラス」のすべてのパブリックメンバーは「普通預金クラス」から直接アクセスできます。 「アカウントクラス」のパブリックメンバー機能を介して「アカウントクラス」のプライベートメンバーにアクセスできますが、直接アクセスすることはできません。

単一継承の実装

 #名前空間stdの使用を含みます。 クラスAccount {int acc_no、; 公開:フロートバランス。 void initialize(int x、int y){acc_no = x;} バランス= y。 } int get_accno。(){return acc_no;}; ;}}; クラスSaving_acc:public Account {float intrest_rate;} public:// Saving_accクラスのコンストラクタSaving_acc(int c){interest_rate = c; void display(){cout < 

多重継承の定義

多重継承により、派生クラスは複数の基本クラスの複合機能を継承できます。つまり、単一の派生クラスと複数の基本クラスがあります。 すべての基本クラスは、それぞれのクラスごとに別々のアクセス指定子を記述することによって継承する必要があります。 派生クラスは、基本クラスが継承されるアクセス指定子に基づいて基本クラスのメンバーにアクセスできます。

Bike、Car、Vehicleという3つのクラスがある例で簡単に説明しましょう。 現在、「Vehicle」は「Bike」​​および「Car」の機能を継承できます。 したがって、「Vehicle」は派生クラスになり、「Bike」​​と「Car」は基本クラスになります。 現在、“ Bike”と“ Car”は“ Vehicle”に公的に継承されていますが、“ Bike”と“ Car”のすべてのパブリックメンバーにアクセスできますが、Model_noエンティティは“ Car”で保護されているので「Vehicle」からアクセスできます。

多重継承の実装

 #名前空間stdを使用して含める。 クラスBike {int engine_cost; ; public:void set_engine_cost(int x){engine_cost = x;} ;}}; クラスCar {protected:int Model_no;} public:void set_Model_no(int p){Model_no = p; ;}}; class Vehical:公用自転車、公用車{int no_of_wheels public:vehicle(int w){no_of_wheels = w; cout << "no of wheels" < 

単一継承と多重継承の主な違い

  1. 単一継承は単一の基本クラスを持つ1つの派生クラスですが、多重継承では2つ以上の基本クラスを持ちますが単一の派生クラスです。
  2. ここでは単一の派生クラスが2つ以上の基本クラスを継承するため、多重継承はかなり混乱します。 基本クラスが派生クラスと同じ名前の属性または関数を持っている場合、どの基本クラスの属性または関数を派生する必要があるのか​​を識別するのは困難になります。
  3. 単一継承の場合、間接費の問題は少なくなります。 しかし、多重継承の場合、オブジェクトの構築または破棄は、クラス階層の親クラスのコンストラクタとデストラクタを呼び出すため、オーバーヘッドが増加します。
  4. 単一継承は専門化に向いています。 多重継承は一般化に向いています。
  5. 単一継承はオーバーヘッドが少ないため、多重継承と比較してランタイムが短くなります。

結論

継承は、あたかも1つのクラスがすでに形成されているかのようにプログラマの作業を容易にします。 アクセス指定子は基本クラスのメンバーへのアクセスを特定の方法で制限しますが、データをより安全にします。 単一継承は、多重継承よりもどういうわけか単純で実装が簡単です。 継承はオブジェクトコードのサイズを縮小しますが、プログラムの実行時間にも影響します。

Top