Š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 publickodā
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,, protectedun 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
publicpamatklasespublicdalībniekus atvasinātajā klasē, unprotectedpamatklases dalībnieki paliekprotectedatvasinātajā klasē. - aizsargāts mantojums padara pamatklases locekļus
publicunprotectedlocekļusprotectedatvasinātajā klasē. - privātais mantojums padara pamatklases locekļus
publicunprotectedlocekļusprivateatvasinā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 PublicDerivedno 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 ProtectedDerivedno Basešajā aizsargātajā režīmā .
Rezultātā ProtectedDerived:
- prot, krogs un
getPVT()tiek mantoti kā aizsargāti . pvtnav 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 PrivateDerivedno Basešajā privātajā režīmā .
Rezultātā PrivateDerived:
- prot,
pubungetPVT()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) |








