C++ におけるパブリック、プライベート、および保護された継承の違い
継承は、オブジェクト指向プログラミングの基本概念です。 クラスの機能を拡張するのに役立ちます。 継承により、あるクラスで既に作成およびテストされたコードを再利用して別のクラスで使用できるため、時間を節約し、エラーを減らし、プログラムの設計を簡素化できます。
継承は、クラス間の is-a
関係と呼ぶことができます。 したがって、たとえば、車が自動車であると言う場合、すべての車は自動車であり、すべての自動車は車であると言っています.
この記事では、次の 3 種類の継承について説明します。
- 公の相続
- 私的相続
- 保護された継承
ただし、継承の種類について説明する前に、C++ の基本クラスと派生クラスの概念について説明します。
C++ の基本クラスと派生クラス
基本クラスと派生クラスは、オブジェクトの階層を作成するために使用されます。 元のクラスは基本クラスと呼ばれ、継承された他のクラスは派生クラスと見なされます。
基本クラスは、必要に応じて派生クラスによってオーバーライドできる、すべてのメンバーの既定の実装を提供します。
派生クラスは、その基本クラスの非プライベート メンバーのすべてにアクセスできます。 したがって、派生クラスのメンバー関数が基本クラスのメンバーにアクセスできないようにするには、それらの基本クラスのメンバーを基本クラスでプライベートにする必要があります。
C++ での公開継承
パブリック継承は、あるクラスが別のクラスの機能またはプロパティを取得する一種の継承です。 これは、継承クラスが継承クラスの拡張または特殊化と見なされる is-a
関係の実装と見なすことができます。
クラスがパブリック基本クラスから派生する場合、基本クラスのパブリック メンバーは派生クラスのパブリック メンバーになり、基本クラスの保護メンバーは派生クラスの保護メンバーになります。 基本クラスのプライベート メンバーは、派生クラスから容易に到達することはできませんが、基本クラスのパブリック メンバーおよび保護されたメンバーへの呼び出しを介して取得できます。
#include <iostream>
using namespace std;
class Demo {
private:
int x = 56;
protected:
int y = 27;
public:
int z = 67;
int getX() { return x; }
};
class PublicInheritance : public Demo {
public:
int getY() { return y; }
};
int main() {
PublicInheritance sam;
cout << "Private member = " << sam.getX() << endl;
cout << "Protected member= " << sam.getY() << endl;
cout << "Public member= " << sam.z << endl;
return 0;
}
ここをクリック 上記のコードの動作を確認します。
C++ の保護された継承
保護された継承は、基本クラスが保護されている継承の形式です。 これは、派生クラスが、基本クラスのすべてのパブリック メンバーと保護メンバーを保護メンバーとして持つことを意味します。
保護された基本クラスからの派生には、特定のシナリオで利点があります。 たとえば、関連するクラスのセットを作成したいが、それらは内部使用のみを目的としているために公開したくない場合、これは適切なソリューションです。
#include <iostream>
using namespace std;
class Demo {
private:
int x = 56;
protected:
int y = 27;
public:
int z = 67;
int getX() { return x; }
};
class ProtectedInheritance : protected Demo {
public:
int getY() { return y; }
int getZ() { return z; }
};
int main() {
ProtectedInheritance sam;
cout << "Protected member= " << sam.getY() << endl;
cout << "Public member= " << sam.getZ() << endl;
return 0;
}
ここをクリック 上記のコードの動作を確認します。
C++ でのプライベート継承
プライベート継承は、派生クラスがプライベート基本クラスから継承する場合です。 これは、パブリックまたは保護された基底クラスのメンバーが、派生クラスのプライベート メンバーになることを意味します。
これは、スーパークラスの一部の機能のみを提供するサブクラスを作成する場合に役立ちます。
#include <iostream>
using namespace std;
class Demo {
private:
int x = 56;
protected:
int y = 27;
public:
int z = 67;
int getX() { return x; }
};
class PrivateInheritance : private Demo {
public:
int getY() { return y; }
int getZ() { return z; }
};
int main() {
PrivateInheritance sam;
cout << "Protected member= " << sam.getY() << endl;
cout << "Public member= " << sam.getZ() << endl;
return 0;
}
ここをクリック 上記のコードの動作を確認します。
Muhammad Adil is a seasoned programmer and writer who has experience in various fields. He has been programming for over 5 years and have always loved the thrill of solving complex problems. He has skilled in PHP, Python, C++, Java, JavaScript, Ruby on Rails, AngularJS, ReactJS, HTML5 and CSS3. He enjoys putting his experience and knowledge into words.
Facebook