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 public
v 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řídypublic
v odvozené třídě aprotected
členové základní třídy zůstávajíprotected
v odvozené třídě. - chráněná dědičnost činí
public
aprotected
členy základní třídyprotected
v odvozené třídě. - private inheritance dělá
public
aprotected
členy základní třídyprivate
v 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 PublicDerived
od Base
ve 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ý ProtectedDerived
od Base
v chráněném režimu .
Výsledkem je ProtectedDerived
:
- prot, pub a
getPVT()
jsou zděděny jako chráněné . pvt
je 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 PrivateDerived
z Base
v soukromém režimu .
Výsledkem je PrivateDerived
:
- prot
pub
agetPVT()
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é) |