Nyilvános, védett és magánöröklés a C ++ programozásban

Ebben az oktatóanyagban példák segítségével megtanuljuk használni a nyilvános, védett és magán öröklést a C ++ nyelven.

A C ++ öröklésben különböző hozzáférési módokban levezethetünk egy gyermekosztályt az alaposztályból. Például,

 class Base (… .… … . ); class Derived : public Base (… .… … . );

Figyelje publicmeg a kódban szereplő kulcsszót

 class Derived : public Base

Ez azt jelenti, hogy nyilvános módban létrehoztunk egy származtatott osztályt az alaposztályból . Alternatív megoldásként származtathatunk védett vagy privát módban is.

Ez a 3 kulcsszó ( public,, protectedés private) hozzáférési specifikációként ismert a C ++ öröklésben.

nyilvános, védett és magánöröklés C ++ nyelven

nyilvános , védett, és saját öröklés jellemzői a következők:

  • a nyilvános örökléspublic az alaposztály tagjait publica származtatott osztályba teszi , az alaposztály tagjai pedig a származtatott protectedosztályban maradnak protected.
  • a védett öröklés az alaposztály tagjait publicés protectedtagjait teszi protecteda származtatott osztályba.
  • privát öröklés teszi publicés protectedtagjait az alap osztály privatea származtatott osztály.

Megjegyzés: private az alaposztály tagjai nem férhetnek hozzá a származtatott osztályhoz.

 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. példa: C ++ nyilvános öröklés

 // 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; )

Kimenet

 Privát = 1 Védett = 2 Nyilvános = 3

Itt, már abból PublicDerivedszármazó Basea nyilvános mód .

Ennek eredményeként PublicDerived:

  • prot védettként öröklődik .
  • kocsmában, és nyilvánoskéntgetPVT() örökölnek .
  • Pvt elérhetetlen, hiszen magán az Base.

Mivel a magán- és védett tagok nem férhetnek hozzá, létre kell hoznunk a nyilvános funkciókat getPVT()és getProt()hozzáférnünk kell hozzájuk:

 // Error: member "Base::pvt" is inaccessible cout << "Private = " << object1.pvt; // Error: member "Base::prot" is inaccessible cout << "Protected = " << object1.prot;

Hozzáférhetőség a nyilvános öröklésben

Megközelíthetőség magántagok védett tagok nyilvános tagok
Alaposztály Igen Igen Igen
Származtatott osztály Nem Igen Igen

2. példa: C ++ védett öröklés

 // 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; )

Kimenet

A privát nem érhető el. Védett = 2 Nyilvános = 3

Itt, már abból ProtectedDerivedszármazó Basea védett módban .

Ennek eredményeként ProtectedDerived:

  • prot, kocsma és védettkéntgetPVT() öröklődnek .
  • pvtmegközelíthetetlen, hiszen magán az Base.

Mint tudjuk, a védett tagok nem férhetnek hozzá közvetlenül.

Ennek eredményeként nem használhatjuk getPVT()a ProtectedDerived. Ezért kell létrehoznunk a getPub()függvényt ProtectedDeriveda kocsma változó eléréséhez.

 // Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;

Hozzáférhetőség a védett öröklésben

Megközelíthetőség magántagok védett tagok nyilvános tagok
Alaposztály Igen Igen Igen
Származtatott osztály Nem Igen Igen (védett változóként öröklődik)

3. példa: C ++ magánöröklés

 // 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; )

Kimenet

A privát nem érhető el. Védett = 2 Nyilvános = 3

Itt, már abból PrivateDerivedszármazó Basea privát módban .

Ennek eredményeként PrivateDerived:

  • prot, pubés getPVT()öröklődnek magán .
  • Pvt elérhetetlen, hiszen magán az Base.

Mint tudjuk, a magántagokhoz nem lehet közvetlenül hozzáférni.

Ennek eredményeként nem használhatjuk getPVT()a PrivateDerived. Ezért kell létrehoznunk a getPub()függvényt PrivateDeriveda kocsma változó eléréséhez.

 // Error: member "Base::getPVT()" is inaccessible cout << "Private = " << object1.getPVT(); // Error: member "Base::pub" is inaccessible cout << "Public = " << object1.pub;

Hozzáférhetőség a magánöröklésben

Megközelíthetőség magántagok védett tagok nyilvános tagok
Alaposztály Igen Igen Igen
Származtatott osztály Nem Igen (privát változóként öröklődik) Igen (privát változóként öröklődik)

érdekes cikkek...