Dedičnosť v C ++

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 Dogtrieda odvodená od Animaltriedy. Pretože Dogje odvodený od Animal, členovia Animalsú prístupní k Dog.

Dedenie v C ++

Všimnite si použitie kľúčového slova publicpri dedení psa zo zvieraťa.

 class Dog : public Animal (… );

Môžeme tiež použiť kľúčové slová privatea protectednamiesto public. Dozvieme sa o rozdieloch medzi použitím private, publica 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 Dogsa dedí z Animal.

 // Calling members of the Animal class dog1.eat(); dog1.sleep();

Členovia chránení v C ++

Modifikátor prístupu protectedje 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 protecteda je tak prístupný z odvodenej triedy Dog. Vidíme to tak, že sme sa typev Dogtriede inicializovali pomocou funkcie setType().

Na druhej strane privatepremennú 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 protectedkľúčové slovo skrýva údaje, nemôžeme tiež získať prístup k typu priamo z objektu Dogalebo Animaltriedy.

 // 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 publickľúčové slovo používali na dedenie triedy z predtým existujúcej základnej triedy. Na zdedenie tried však môžeme použiť privateaj protectedkľúč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:

  1. public: Ak je odvodená trieda deklarovaná v publicrežime, potom členovia základnej triedy dedia odvodenou triedou rovnako, ako sú.
  2. private: V tomto prípade sa všetci členovia základnej triedy stanú privatečlenmi v odvodenej triede.
  3. chránené: Tieto publicčlenovia základnej triedy stať protectedčlenmi odvodené triedy.

Medzi privatečlenmi základnej triedy sú vždy privatev 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

Zaujímavé články...