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řídypublicv odvozené třídě aprotectedčlenové základní třídy zůstávajíprotectedv odvozené třídě. - chráněná dědičnost činí
publicaprotectedčleny základní třídyprotectedv odvozené třídě. - private inheritance dělá
publicaprotectedčleny základní třídyprivatev 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
pubagetPVT()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é) |








