Šajā apmācībā mēs iemācīsimies izmantot publisko, aizsargāto un privāto mantojumu C ++ ar piemēru palīdzību.
C ++ mantojumā mēs varam iegūt bērnu klasi no bāzes klases dažādos piekļuves režīmos. Piemēram,
class Base (… .… … . ); class Derived : public Base (… .… … . );
Ievērojiet atslēgvārdu public
kodā
class Derived : public Base
Tas nozīmē, ka mēs esam izveidojuši atvasinātu klasi no bāzes klases publiskajā režīmā . Alternatīvi, mēs varam arī iegūt klases aizsargātos vai privātajos režīmos.
Šie 3 atslēgvārdi ( public
,, protected
un private
) ir pazīstami kā piekļuves specifikatori C ++ mantojumā.
publisks, aizsargāts un privāts mantojums C ++
publiskajam , aizsargātajam un privātajam mantojumam ir šādas iezīmes:
- publiskā mantošana padara
public
pamatklasespublic
dalībniekus atvasinātajā klasē, unprotected
pamatklases dalībnieki paliekprotected
atvasinātajā klasē. - aizsargāts mantojums padara pamatklases locekļus
public
unprotected
locekļusprotected
atvasinātajā klasē. - privātais mantojums padara pamatklases locekļus
public
unprotected
locekļusprivate
atvasinātajā klasē.
Piezīme: private
atvasinātajai klasei nav pieejami bāzes klases pārstāvji.
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. piemērs: C ++ publiskā mantošana
// C++ program to demonstrate the working of public inheritance #include 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; )
Rezultāts
Privāts = 1 Aizsargāts = 2 Publisks = 3
Lūk, mēs esam iegūti PublicDerived
no Base
šajā publiskajā režīmā .
Rezultātā PublicDerived
:
- prot tiek mantots kā aizsargāts .
- krodziņā un
getPVT()
tiek mantoti kā publiski . - PVT nav pieejams, jo tas ir privāts portālā
Base
.
Tā kā privātie un aizsargātie dalībnieki nav pieejami, mums ir jāizveido publiskas funkcijas getPVT()
un getProt()
tām jāpieiet:
// Error: member "Base::pvt" is inaccessible cout << "Private = " << object1.pvt; // Error: member "Base::prot" is inaccessible cout << "Protected = " << object1.prot;
Pieejamība sabiedrības mantojumā
Pieejamība | privātie locekļi | aizsargātie locekļi | sabiedrības locekļi |
---|---|---|---|
Bāzes klase | Jā | Jā | Jā |
Atvasinātā klase | Nē | Jā | Jā |
2. piemērs: C ++ aizsargāta mantošana
// C++ program to demonstrate the working of protected inheritance #include 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; )
Rezultāts
Privātam nevar piekļūt. Aizsargāts = 2 Publisks = 3
Lūk, mēs esam iegūti ProtectedDerived
no Base
šajā aizsargātajā režīmā .
Rezultātā ProtectedDerived
:
- prot, krogs un
getPVT()
tiek mantoti kā aizsargāti . pvt
nav pieejams, jo tas ir privāts reģionāBase
.
Kā mēs zinām, aizsargātiem dalībniekiem nevar piekļūt tieši.
Rezultātā mēs nevaram izmantot getPVT()
no ProtectedDerived
. Tāpēc mums ir jāizveido getPub()
funkcija ProtectedDerived
, lai piekļūtu kroga mainīgajam.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Pieejamība aizsargātā mantojumā
Pieejamība | privātie locekļi | aizsargātie locekļi | sabiedrības locekļi |
---|---|---|---|
Bāzes klase | Jā | Jā | Jā |
Atvasinātā klase | Nē | Jā | Jā (mantots kā aizsargāti mainīgie) |
3. piemērs: C ++ privātā mantošana
// C++ program to demonstrate the working of private inheritance #include 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; )
Rezultāts
Privātam nevar piekļūt. Aizsargāts = 2 Publisks = 3
Lūk, mēs esam iegūti PrivateDerived
no Base
šajā privātajā režīmā .
Rezultātā PrivateDerived
:
- prot,
pub
ungetPVT()
tiek mantoti kā privāti . - PVT nav pieejams, jo tas ir privāts portālā
Base
.
Kā mēs zinām, privātiem biedriem nevar piekļūt tieši.
Rezultātā mēs nevaram izmantot getPVT()
no PrivateDerived
. Tāpēc mums ir jāizveido getPub()
funkcija PrivateDerived
, lai piekļūtu kroga mainīgajam.
// Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;
Pieejamība privātajā mantojumā
Pieejamība | privātie locekļi | aizsargātie locekļi | sabiedrības locekļi |
---|---|---|---|
Bāzes klase | Jā | Jā | Jā |
Atvasinātā klase | Nē | Jā (mantots kā privāti mainīgie) | Jā (mantots kā privāti mainīgie) |