Veřejná, chráněná a soukromá dědičnost v programování v C ++

V tomto kurzu se naučíme používat veřejnou, chráněnou a soukromou dědičnost v C ++ pomocí příkladů.

V dědičnosti C ++ můžeme odvozovat podřízenou třídu ze základní třídy v různých režimech přístupu. Například,

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

Všimněte si klíčového slova publicv kódu

 class Derived : public Base

To znamená, že jsme ve veřejném režimu vytvořili odvozenou třídu ze základní třídy . Alternativně můžeme také odvodit třídy v chráněném nebo soukromém režimu.

Tyto 3 slova ( public, protected, a private), jsou známé jako specifikátorům přístupu v dědičnosti C ++.

veřejné, chráněné a soukromé dědictví v C ++

veřejné , chráněné a soukromé dědictví mají následující funkce:

  • public inheritance dělá publicčleny základní třídy publicv odvozené třídě a protectedčlenové základní třídy zůstávají protectedv odvozené třídě.
  • chráněná dědičnost činí publica protectedčleny základní třídy protectedv odvozené třídě.
  • private inheritance dělá publica protectedčleny základní třídy privatev odvozené třídě.

Poznámka: private Členové základní třídy jsou pro odvozenou třídu nepří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 )

Příklad 1: C ++ veřejná dědičnost

 // 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ýstup

 Soukromé = 1 chráněné = 2 veřejné = 3

Zde jsme odvozen PublicDerivedod Baseve veřejném režimu .

Výsledkem je PublicDerived:

  • prot se dědí jako chráněný .
  • hospoda a getPVT()dědí se jako veřejné .
  • pvt je nepřístupný, protože je soukromý v Base.

Protože soukromí a chránění členové nejsou přístupní, musíme vytvořit veřejné funkce getPVT()a getProt()přistupovat k nim:

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

Přístupnost ve veřejném dědictví

Přístupnost soukromí členové chráněné členy veřejní členové
Základní třída Ano Ano Ano
Odvozená třída Ne Ano Ano

Příklad 2: Dědičnost chráněná 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ýstup

Soukromé nelze získat přístup. Chráněno = 2 Veřejné = 3

Zde jsme odvozený ProtectedDerivedod Basev chráněném režimu .

Výsledkem je ProtectedDerived:

  • prot, pub a getPVT()jsou zděděny jako chráněné .
  • pvtje nepřístupný, protože je v soukromí v doméněBase .

Jak víme, k chráněným členům nelze přistupovat přímo.

Ve výsledku nemůžeme použít getPVT()od ProtectedDerived. To je také důvod, proč musíme vytvořit getPub()funkci ProtectedDerived, abychom získali přístup k proměnné pub.

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

Přístupnost v chráněném dědictví

Přístupnost soukromí členové chráněné členy veřejní členové
Základní třída Ano Ano Ano
Odvozená třída Ne Ano Ano (zděděno jako chráněné proměnné)

Příklad 3: C ++ soukromá dědičnost

 // 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ýstup

Soukromé nelze získat přístup. Chráněno = 2 Veřejné = 3

Zde jsme odvodili PrivateDerivedz Basev soukromém režimu .

Výsledkem je PrivateDerived:

  • prot puba getPVT()jsou zděděny jako soukromé .
  • pvt je nepřístupný, protože je soukromý v Base.

Jak víme, k soukromým členům nelze přistupovat přímo.

Ve výsledku nemůžeme použít getPVT()od PrivateDerived. To je také důvod, proč musíme vytvořit getPub()funkci PrivateDerived, abychom získali přístup k proměnné pub.

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

Přístupnost v soukromém dědictví

Přístupnost soukromí členové chráněné členy veřejní členové
Základní třída Ano Ano Ano
Odvozená třída Ne Ano (zděděno jako soukromé proměnné) Ano (zděděno jako soukromé proměnné)

Zajímavé články...