比較表
比較基準 | 単一継承 | 多重継承 |
---|---|---|
基本 | 派生クラスは単一の基本クラスを継承します。 | 派生クラスは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つの派生クラスですが、多重継承では2つ以上の基本クラスを持ちますが単一の派生クラスです。
- ここでは単一の派生クラスが2つ以上の基本クラスを継承するため、多重継承はかなり混乱します。 基本クラスが派生クラスと同じ名前の属性または関数を持っている場合、どの基本クラスの属性または関数を派生する必要があるのかを識別するのは困難になります。
- 単一継承の場合、間接費の問題は少なくなります。 しかし、多重継承の場合、オブジェクトの構築または破棄は、クラス階層の親クラスのコンストラクタとデストラクタを呼び出すため、オーバーヘッドが増加します。
- 単一継承は専門化に向いています。 多重継承は一般化に向いています。
- 単一継承はオーバーヘッドが少ないため、多重継承と比較してランタイムが短くなります。
結論
継承は、あたかも1つのクラスがすでに形成されているかのようにプログラマの作業を容易にします。 アクセス指定子は基本クラスのメンバーへのアクセスを特定の方法で制限しますが、データをより安全にします。 単一継承は、多重継承よりもどういうわけか単純で実装が簡単です。 継承はオブジェクトコードのサイズを縮小しますが、プログラムの実行時間にも影響します。