Publiska, aizsargāta un privāta mantošana C ++ programmēšanā

Š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 publicpamatklases publicdalībniekus atvasinātajā klasē, un protectedpamatklases dalībnieki paliek protectedatvasinātajā klasē.
  • aizsargāts mantojums padara pamatklases locekļus publicun protectedlocekļus protectedatvasinātajā klasē.
  • privātais mantojums padara pamatklases locekļus publicun protectedlocekļus privateatvasinā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
Atvasinātā klase

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
Atvasinātā klase 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, pubun getPVT()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
Atvasinātā klase Jā (mantots kā privāti mainīgie) Jā (mantots kā privāti mainīgie)

Interesanti raksti...