V tomto tutoriále sa pomocou príkladov dozvieme o dedičnosti v C ++.
Dedičnosť je jednou z kľúčových vlastností objektovo orientovaného programovania v C ++. Umožňuje nám vytvoriť novú triedu (odvodenú triedu) z existujúcej triedy (základnej triedy).
Odvodená trieda dedí funkcie od základnej triedy a môže mať ďalšie vlastné vlastnosti. Napríklad,
class Animal ( // eat() function // sleep() function ); class Dog : public Animal ( // bark() function );
Tu je Dog
trieda odvodená od Animal
triedy. Pretože Dog
je odvodený od Animal
, členovia Animal
sú prístupní k Dog
.

Všimnite si použitie kľúčového slova public
pri dedení psa zo zvieraťa.
class Dog : public Animal (… );
Môžeme tiež použiť kľúčové slová private
a protected
namiesto public
. Dozvieme sa o rozdieloch medzi použitím private
, public
a protected
ďalej v tomto výukovom programe.
je-vzťah
Dedenie je vzťahom . Dedičstvo používame, iba ak je medzi týmito dvoma triedami vzťah typu is-a .
Tu je niekoľko príkladov:
- Auto je vozidlo.
- Oranžová je ovocie.
- Chirurg je lekár.
- Pes je zviera.
Príklad 1: Jednoduchý príklad dedičnosti C ++
// C++ program to demonstrate inheritance #include using namespace std; // base class class Animal ( public: void eat() ( cout << "I can eat!" << endl; ) void sleep() ( cout << "I can sleep!" << endl; ) ); // derived class class Dog : public Animal ( public: void bark() ( cout << "I can bark! Woof woof!!" << endl; ) ); int main() ( // Create object of the Dog class Dog dog1; // Calling members of the base class dog1.eat(); dog1.sleep(); // Calling member of the derived class dog1.bark(); return 0; )
Výkon
Môžem jesť! Môžem spať! Môžem štekať! Haf haf!!
Tu má dog1 (objekt odvodenej triedy Dog
) prístup k členom základnej triedy Animal
. Je to preto, že Dog
sa dedí z Animal
.
// Calling members of the Animal class dog1.eat(); dog1.sleep();
Členovia chránení v C ++
Modifikátor prístupu protected
je obzvlášť dôležitý, pokiaľ ide o dedičnosť C ++.
Rovnako ako private
členovia, aj protected
členovia sú mimo triedy neprístupní. Je k nim však možné získať prístup z odvodených tried a tried / funkcií priateľov .
Potrebujeme protected
členov, ak chceme skryť údaje triedy, ale stále chceme, aby tieto údaje dedili jej odvodené triedy.
Ak sa chcete dozvedieť viac informácií o chránených položkách, prečítajte si náš tutoriál Modifikátory prístupu C ++.
Príklad 2: Členovia chránení v C ++
// C++ program to demonstrate protected members #include #include using namespace std; // base class class Animal ( private: string color; protected: string type; public: void eat() ( cout << "I can eat!" << endl; ) void sleep() ( cout << "I can sleep!" << endl; ) void setColor(string clr) ( color = clr; ) string getColor() ( return color; ) ); // derived class class Dog : public Animal ( public: void setType(string tp) ( type = tp; ) void displayInfo(string c) ( cout << "I am a " << type << endl; cout << "My color is " << c << endl; ) void bark() ( cout << "I can bark! Woof woof!!" << endl; ) ); int main() ( // Create object of the Dog class Dog dog1; // Calling members of the base class dog1.eat(); dog1.sleep(); dog1.setColor("black"); // Calling member of the derived class dog1.bark(); dog1.setType("mammal"); // Using getColor() of dog1 as argument // getColor() returns string data dog1.displayInfo(dog1.getColor()); return 0; )
Výkon
Môžem jesť! Môžem spať! Môžem štekať! Haf haf!! Som cicavec Moja farba je čierna
Typ premennej tu je protected
a je tak prístupný z odvodenej triedy Dog
. Vidíme to tak, že sme sa type
v Dog
triede inicializovali pomocou funkcie setType()
.
Na druhej strane private
premennú farbu nie je možné inicializovať v Dog
.
class Dog : public Animal ( public: void setColor(string clr) ( // Error: member "Animal::color" is inaccessible color = clr; ) );
Pretože protected
kľúčové slovo skrýva údaje, nemôžeme tiež získať prístup k typu priamo z objektu Dog
alebo Animal
triedy.
// Error: member "Animal::type" is inaccessible dog1.type = "mammal";
Prístupové režimy v dedičnosti C ++
V našich predchádzajúcich tutoriáloch sme sa dozvedeli o špecifikátoroch prístupu C ++, ako sú verejné, súkromné a chránené.
Doteraz sme public
kľúčové slovo používali na dedenie triedy z predtým existujúcej základnej triedy. Na zdedenie tried však môžeme použiť private
aj protected
kľúčové slová a. Napríklad,
class Animal ( // code ); class Dog : private Animal ( // code );
class Cat : protected Animal ( // code );
Rôzne spôsoby, ako môžeme odvodiť triedy, sú známe ako režimy prístupu . Tieto režimy prístupu majú nasledujúci účinok:
- public: Ak je odvodená trieda deklarovaná v
public
režime, potom členovia základnej triedy dedia odvodenou triedou rovnako, ako sú. - private: V tomto prípade sa všetci členovia základnej triedy stanú
private
členmi v odvodenej triede. - chránené: Tieto
public
členovia základnej triedy staťprotected
členmi odvodené triedy.
Medzi private
členmi základnej triedy sú vždy private
v odvodenej triede.
Ak sa chcete dozvedieť viac, navštívte náš verejný, súkromný a chránený program dedenia v C ++.
Členská funkcia má prednosť v dedení
Predpokladajme, že základná trieda a odvodená trieda majú členské funkcie s rovnakým názvom a argumentmi.
Ak vytvoríme objekt odvodenej triedy a pokúsime sa získať prístup k tejto členskej funkcii, namiesto v základnej triede sa vyvolá členská funkcia v odvodenej triede.
Členská funkcia odvodenej triedy má prednosť pred členskou funkciou základnej triedy.
Získajte viac informácií o prepísaní funkcií v jazyku C ++.
Odporúčané čítanie: C ++ viacnásobné dedenie