C++ の公開、保護、非公開の継承
C++ の公開、保護、非公開の継承
このチュートリアルでは、例を使用して、C++ でパブリック、プロテクト、およびプライベートの継承を使用する方法を学習します。
C++ 継承では、さまざまなアクセス モードで基本クラスから子クラスを派生させることができます。たとえば、
class Base {
.... ... ....
};
class Derived : public Base {
.... ... ....
};
キーワード public に注意してください コード内
class Derived : public Base これは、パブリック モードで基本クラスから派生クラスを作成したことを意味します。 .または、protected でクラスを派生させることもできます または非公開 モード。
これらの 3 つのキーワード (public 、 protected 、および private ) は アクセス指定子 として知られています C++ 継承で。
C++ での public、protected、および private 継承
公開 、保護、 と非公開 継承には次の機能があります:
- 公開継承
publicになります 基本クラスpublicのメンバー 派生クラス、およびprotected基本クラスのメンバーはprotectedのままです 派生クラスで。 - 保護された継承
publicになります とprotected基本クラスprotectedのメンバー 派生クラスで。 - プライベート継承
publicになります とprotected基本クラスprivateのメンバー 派生クラスで。
注: private 基本クラスのメンバーは、派生クラスからアクセスできません。
class Base {
public:
int x;
protected:
int y;
private:
int z;
};
class PublicDerived: public Base {
// x is public
// y is protected
// z is not accessible from PublicDerived
};
class ProtectedDerived: protected Base {
// x is protected
// y is protected
// z is not accessible from ProtectedDerived
};
class PrivateDerived: private Base {
// x is private
// y is private
// z is not accessible from PrivateDerived
} 例 1:C++ パブリック継承
// C++ program to demonstrate the working of public inheritance
#include <iostream>
using namespace std;
class Base {
private:
int pvt = 1;
protected:
int prot = 2;
public:
int pub = 3;
// function to access private member
int getPVT() {
return pvt;
}
};
class PublicDerived : public Base {
public:
// function to access protected member from Base
int getProt() {
return prot;
}
};
int main() {
PublicDerived object1;
cout << "Private = " << object1.getPVT() << endl;
cout << "Protected = " << object1.getProt() << endl;
cout << "Public = " << object1.pub << endl;
return 0;
} 出力
Private = 1 Protected = 2 Public = 3
ここで、PublicDerived を導き出しました。 Base から 公開モードで .
その結果、PublicDerived で :
- 利益 保護されたとして継承されます .
- パブ と
getPVT()パブリックとして継承されます . - pvt 非公開であるため、アクセスできません
Baseで .
プライベート以来 そして保護 メンバーは main() からアクセスできません 、パブリック関数 getPVT() を作成する必要があります と getProt() それらにアクセスするには:
// Error: member "Base::pvt" is inaccessible
cout << "Private = " << object1.pvt;
// Error: member "Base::prot" is inaccessible
cout << "Protected = " << object1.prot;
getPVT() 関数は Base 内で定義されています .しかし、getProt() 関数は PublicDerived 内で定義されています .
これは pvt のためです 、これは非公開です Base で 、PublicDerived にアクセスできません .
ただし、prot PublicDerived にアクセス可能です 公共の継承によるものです。つまり、getProt() PublicDerived 内から保護された変数にアクセスできます .
パブリック継承のアクセシビリティ
| アクセシビリティ | 非公開メンバー | 保護されたメンバー | 公開メンバー |
|---|---|---|---|
| 基本クラス | はい | はい | はい |
| 派生クラス | いいえ | はい | はい |
例 2:C++ で保護された継承
// C++ program to demonstrate the working of protected inheritance
#include <iostream>
using namespace std;
class Base {
private:
int pvt = 1;
protected:
int prot = 2;
public:
int pub = 3;
// function to access private member
int getPVT() {
return pvt;
}
};
class ProtectedDerived : protected Base {
public:
// function to access protected member from Base
int getProt() {
return prot;
}
// function to access public member from Base
int getPub() {
return pub;
}
};
int main() {
ProtectedDerived object1;
cout << "Private cannot be accessed." << endl;
cout << "Protected = " << object1.getProt() << endl;
cout << "Public = " << object1.getPub() << endl;
return 0;
}
出力
Private cannot be accessed. Protected = 2 Public = 3
ここで、ProtectedDerived を導き出しました。 Base から 保護モードで .
その結果、ProtectedDerived で :
- 利益 、パブ そして
getPVT()保護されたとして継承されます . pvt非公開であるため、アクセスできませんBaseで .
保護されている クラス外からメンバーに直接アクセスすることはできません。その結果、getPVT() は使用できません。 ProtectedDerived から .
getPub() を作成する必要があるのもそのためです。 ProtectedDerived の関数 pub にアクセスするには
// Error: member "Base::getPVT()" is inaccessible
cout << "Private = " << object1.getPVT();
// Error: member "Base::pub" is inaccessible
cout << "Public = " << object1.pub; 保護された継承のアクセシビリティ
| アクセシビリティ | 非公開メンバー | 保護されたメンバー | 公開メンバー |
|---|---|---|---|
| 基本クラス | はい | はい | はい |
| 派生クラス | いいえ | はい | はい (保護変数として継承) |
例 3:C++ のプライベート継承
// C++ program to demonstrate the working of private inheritance
#include <iostream>
using namespace std;
class Base {
private:
int pvt = 1;
protected:
int prot = 2;
public:
int pub = 3;
// function to access private member
int getPVT() {
return pvt;
}
};
class PrivateDerived : private Base {
public:
// function to access protected member from Base
int getProt() {
return prot;
}
// function to access private member
int getPub() {
return pub;
}
};
int main() {
PrivateDerived object1;
cout << "Private cannot be accessed." << endl;
cout << "Protected = " << object1.getProt() << endl;
cout << "Public = " << object1.getPub() << endl;
return 0;
} 出力
Private cannot be accessed. Protected = 2 Public = 3
ここで、PrivateDerived を導き出しました。 Base から プライベート モードで .
その結果、PrivateDerived で :
- 利益 、
pubとgetPVT()非公開として継承されます . - pvt 非公開であるため、アクセスできません
Baseで .
ご存知のように、クラスの外部からプライベート メンバーに直接アクセスすることはできません。その結果、getPVT() は使用できません。 PrivateDerived から .
getPub() を作成する必要があるのもそのためです。 PrivateDerived の関数 pub にアクセスするには
// Error: member "Base::getPVT()" is inaccessible
cout << "Private = " << object1.getPVT();
// Error: member "Base::pub" is inaccessible
cout << "Public = " << object1.pub; プライベート継承でのアクセシビリティ
| アクセシビリティ | 非公開メンバー | 保護されたメンバー | 公開メンバー |
|---|---|---|---|
| 基本クラス | はい | はい | はい |
| 派生クラス | いいえ | はい (プライベート変数として継承) | はい (プライベート変数として継承) |
C言語