C ++での継承について知っておくべきことすべて



この記事では、C ++の継承、さまざまなタイプ、およびその実装方法に関する詳細で包括的な知識を提供します。

C ++はオブジェクト指向言語です。データの抽象化、ポリモーフィズム、カプセル化、および継承は、OOPの基礎です。この投稿では、継承とは何かを理解しますか? C ++での継承の種類、およびそれに関連するすべての必要な概念を最初から。最後に、この強力な概念の欠点も見て、それを解決しようとします。

C ++の継承とは何ですか

継承は、C ++またはその他のオブジェクト指向言語で最も強力で広く使用されている概念の1つです。この概念を理解するには、クラスとオブジェクトについて少し知識が必要です。継承を使用して、一般的なメソッドと属性で構成されるクラスを作成できます。このクラスは、より具体的なメソッドを含む他のクラスに継承できます。





C ++での継承

これを行うことで、同じ機能を何度も書く必要がなくなり、時間を節約し、コードの可読性を向上させることができます。



構文:

クラスderived_class:access_type base_class {//クラス本体}

基本クラス: コードの可読性を高めるために他のクラスで共有できるすべての一般的なメソッドと属性で構成されるクラスは、基本クラスと呼ばれます。

派生クラス: より具体的なメソッドで構成され、クラスを継承するクラスは、派生クラスと呼ばれます。派生クラスは、他の派生クラスの基本クラスにすることもできます。



は関係があります

いくつかの属性とメソッドを使用してクラスXYZを作成する場合。これで、クラスの学生は他のいくつかの属性を持ちますが、XYZクラスの要素も含まれ、同じことが教員クラスにも当てはまります。図を見てみましょう:

したがって、学生と教職員のクラスはXYZから継承されます。

アクセス指定子- クラスが別のクラスを継承する方法を理解しました。しかし、基本クラスまたは親クラスのすべての属性とメソッドが子クラスまたは派生クラスと共有されているため、これは安全でないメソッドであると言う人もいるかもしれません。たとえば、クラス「Bank」がクラス「customers」と「investors」に継承されている場合です。 「vaultpassword」、その他の顧客関連情報、個人データなどのクラス「Bank」の属性は、安全ではない「customers」および「investors」クラスと共有されます。

上記の問題を解決するために、C ++はアクセス指定子を使用して、派生クラスへの基本クラス属性のアクセスを制限します。 C ++には合計3種類のアクセス指定子があります

  1. 公衆
  2. 民間
  3. 保護されています

次の表は、さまざまなアクセス指定子に従って派生クラスがアクセスできるデータのタイプをよく理解していることを示しています。

アクセス指定子 公開データ プライベートデータ 保護されたデータ
民間 継承されません継承されません継承されません
保護されています 保護されています 民間 保護されています
公衆 公衆 民間 保護されています

単一継承

単一の継承は、単純なバニラ形式の継承と見なすことができます。単一継承では、単一クラスが基本クラスから継承します。

#include using namespace std class Train {int Numberofwheels int Numberofcoaches public:void Traininfo(int n、int m){Numberofwheels = n Numberofcoaches = m} void showinfo(){cout<この継承のケースは、マルチレベル継承と呼ばれます。最初のクラスと最後のクラスの間にあるクラスは、中間基本クラスとも呼ばれます。最後のクラスは最初のクラスのメンバーを継承できると思いますか?はい、できます

#include using namespace std class First {protected:int a public:void getinfofirst(int x){a = x} void showinfofirst(){std :: cout<< 'Value of a = ' < 

出力:

a = 10の値

bの値= 20

cの値= 30

dの値= 50

階層継承

特定の問題は、単一レベルまたは複数レベルの継承の助けを借りて解決することはできません。階層継承では、複数のクラスが単一の基本クラスから継承します。

#include using namespace std class College {public:College(){cout<< 'We are in class College' << endl } } class Student: public College { } class Faculty: public College { } int main() { Student student Faculty faculty return 0 }

出力:

javaインスタンス変数とは

私たちはクラスカレッジにいます

私たちはクラスカレッジにいます

C ++での多重継承

階層継承では、1つの基本クラスに複数の派生クラスがあることがわかりました。多重継承では、1つの派生クラスに複数の基本クラスがあります。

#include using namespace std class One {protected:int a public:void getinfoOne(int x){a = x}} class Two {protected:int b public:void getinfoTwo(int y){b = y}} class Main: public One、public Two {public:void Display(){std :: cout<< 'Value of a = ' < この時点で、C ++で使用されるすべてのタイプの継承について十分に理解しています。しかし、2つの異なるタイプの継承を使用したい場合はどうなるでしょうか。出来ますか?はい、それはハイブリッド継承の助けを借りて可能です。ハイブリッド継承では、2つの異なるタイプの継承を組み合わせます。例-マルチレベルおよび多重継承、階層および多重継承など。

#include using namespace std class World {protected:int a public:void getinfoWorld(int x){a = x}} class Continent:public World {protected:int b public:void getinfoContinent(int y){b = y}} class Country {protected:int d public:void getinfoCountry(int m){d = m}} class Australia:public Continent、public Country {public:void Display(){std :: cout<< 'Value of a = ' < 

ダイヤモンドの問題を理解するのに役立つ上の図を理解しましょう。クラスBとクラスCはクラスAから継承するため、クラスAとクラスBの両方にクラスAの属性とメソッドがあります。クラスDがクラスBとクラスCから継承する場合、クラスDにはクラスBとクラスCのすべての属性があります。また、クラスBとクラスCから継承されたクラスAのすべての属性があります。したがって、クラスDのオブジェクトを作成し、クラスAのメソッドを呼び出すと、あいまいな状況が作成され、コンパイラがどこから混乱するかがわかります。クラスBまたはクラスDからAのメソッドをクラス化する必要があります。

このあいまいさを解決するために、仮想基本クラスと呼ばれる概念を使用します。基本クラスを仮想基本クラスにすると、仮想基本クラスと派生クラスの間の既存のパスの数に関係なく、そのクラスのコピーが1つだけ継承されます。

クラスA {}クラスB:仮想パブリックA {}クラスC:仮想パブリックA {}クラスD:パブリックC、パブリックD {}

これで、このC ++での継承の記事は終わりです。詳細を知りたい場合は、 信頼できるオンライン学習会社であるEdurekaによる。 EdurekaのJavaJ2EEおよびSOAトレーニングおよび認定コースは、Hibernate&SpringなどのさまざまなJavaフレームワークに加えて、コアJavaコンセプトと高度なJavaコンセプトの両方についてトレーニングするように設計されています。

質問がありますか?このブログのコメントセクションでそれについて言及してください。できるだけ早くご連絡いたします。