Verejné, chránené a súkromné ​​dedenie v programovaní v C ++

V tomto tutoriále sa pomocou príkladov naučíme používať verejné, chránené a súkromné ​​dedičstvo v C ++.

V dedičnosti C ++ môžeme podradenú triedu odvodiť zo základnej triedy v rôznych režimoch prístupu. Napríklad,

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

Všimnite si kľúčové slovo publicv kóde

 class Derived : public Base

To znamená, že sme vo verejnom režime vytvorili odvodenú triedu od základnej triedy . Alternatívne môžeme triedy odvodiť aj v chránenom alebo súkromnom režime.

Tieto 3 slová ( public, protected, a private), sú známe ako specifikátorům prístupu v dedičnosti C ++.

verejné, chránené a súkromné ​​dedenie v C ++

verejné , chránené a súkromné dedičstvo majú nasledujúce vlastnosti:

  • verejné dedičstvo robí publicčlenov základnej triedy publicv odvodenej triede a protectedčlenovia základnej triedy zostávajú protectedv odvodenej triede.
  • chránené dedičstvo robí publica protectedčlenov základnej triedy protectedv odvodenej triede.
  • súkromné ​​dedičstvo robí publica protectedčlenov základnej triedy privatev odvodenej triede.

Poznámka: private Členovia základnej triedy sú pre odvodenú triedu neprístupní.

 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 )

Príklad 1: C ++ verejné dedičstvo

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

Výkon

 Súkromné ​​= 1 Chránené = 2 Verejné = 3

Tu sme odvodený PublicDerivedod Basevo verejnom režime .

Výsledkom je, že v PublicDerived:

  • prot sa dedí ako chránený .
  • krčma a getPVT()dedia sa ako verejné .
  • pvt je neprístupný, pretože je súkromný v Base.

Pretože súkromní a chránení členovia nie sú prístupní, musíme vytvoriť verejné funkcie getPVT()a getProt()získať k nim prístup:

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

Prístupnosť vo verejnom dedičstve

Prístupnosť súkromní členovia chránení členovia verejní členovia
Základná trieda Áno Áno Áno
Odvodená trieda Nie Áno Áno

Príklad 2: Dedičnosť chránená v C ++

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

Výkon

Nie je možné získať prístup k súkromným položkám. Chránené = 2 Verejné = 3

Tu sme odvodený ProtectedDerivedod Basev chránenom režime .

Výsledkom je, že v ProtectedDerived:

  • prot, pub a getPVT()dedia sa ako chránené .
  • pvtje neprístupný, pretože je v súkromí v Base.

Ako vieme, k chráneným členom nie je možné získať priamy prístup.

Vo výsledku nemôžeme použiť getPVT()z ProtectedDerived. Aj preto musíme vytvoriť getPub()funkciu, ProtectedDerivedaby sme získali prístup k premennej pub.

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

Prístupnosť v chránenom dedičstve

Prístupnosť súkromní členovia chránení členovia verejní členovia
Základná trieda Áno Áno Áno
Odvodená trieda Nie Áno Áno (zdedené ako chránené premenné)

Príklad 3: C ++ súkromné ​​dedičstvo

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

Výkon

Nie je možné získať prístup k súkromným položkám. Chránené = 2 Verejné = 3

Tu sme odvodili PrivateDerivedz Basev súkromnom režime .

Výsledkom je, že v PrivateDerived:

  • prot, puba getPVT()dedia sa ako súkromné .
  • pvt je neprístupný, pretože je súkromný v Base.

Ako vieme, k súkromným členom nie je možné získať priamy prístup.

Vo výsledku nemôžeme použiť getPVT()z PrivateDerived. Aj preto musíme vytvoriť getPub()funkciu, PrivateDerivedaby sme získali prístup k premennej pub.

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

Prístupnosť v súkromnom dedičstve

Prístupnosť súkromní členovia chránení členovia verejní členovia
Základná trieda Áno Áno Áno
Odvodená trieda Nie Áno (zdedené ako súkromné ​​premenné) Áno (zdedené ako súkromné ​​premenné)

Zaujímavé články...