C ++ Moștenire

În acest tutorial, vom afla despre moștenirea în C ++ cu ajutorul unor exemple.

Moștenirea este una dintre caracteristicile cheie ale programării orientate pe obiecte în C ++. Ne permite să creăm o nouă clasă (clasă derivată) dintr-o clasă existentă (clasă de bază).

Clasa derivată moștenește caracteristicile din clasa de bază și poate avea caracteristici suplimentare proprii. De exemplu,

 class Animal ( // eat() function // sleep() function ); class Dog : public Animal ( // bark() function );

Aici, Dogclasa este derivată din Animalclasă. Din moment ce Dogeste derivat din Animal, membrii Animalsunt accesibile pentru Dog.

Moștenirea în C ++

Observați utilizarea cuvântului cheie în publictimp ce moșteniți câine de la Animal.

 class Dog : public Animal (… );

De asemenea, putem folosi cuvintele cheie privateși protectedîn loc de public. Vom afla despre diferențele dintre utilizare și private, mai târziu, în acest tutorial.publicprotected

este-o relație

Moștenirea este o relație . Folosim moștenirea numai dacă există o relație is-a între cele două clase.

Aici sunt cateva exemple:

  • O mașină este un vehicul.
  • Portocala este un fruct.
  • Un chirurg este medic.
  • Un câine este un animal.

Exemplul 1: Exemplu simplu de moștenire 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; )

Ieșire

Pot manca! Pot dormi! Pot latra! Woof woof !!

Aici, dog1 (obiectul clasei derivate Dog) poate accesa membrii clasei de bază Animal. Este pentru că Dogeste moștenit din Animal.

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

Membri protejați C ++

Modificatorul de acces protectedeste deosebit de relevant atunci când vine vorba de moștenirea C ++.

La fel ca privatemembrii, protectedmembrii sunt inaccesibili în afara clasei. Cu toate acestea, ele pot fi accesate de clase derivate și clase / funcții de prieteni .

Avem nevoie de protectedmembri dacă vrem să ascundem datele unei clase, dar dorim totuși ca aceste date să fie moștenite de clasele derivate ale acesteia.

Pentru a afla mai multe despre protejate, consultați tutorialul Modificatori de acces C ++.

Exemplul 2: Membri protejați 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; )

Ieșire

Pot manca! Pot dormi! Pot latra! Woof woof !! Sunt un mamifer Culoarea mea este neagră

Aici, tipul de variabilă este protectedși este astfel accesibil din clasa derivată Dog. Putem vedea acest lucru așa cum am inițializat typeîn Dogclasă folosind funcția setType().

Pe de altă parte, privateculoarea variabilă nu poate fi inițializată în Dog.

 class Dog : public Animal ( public: void setColor(string clr) ( // Error: member "Animal::color" is inaccessible color = clr; ) );

De asemenea, deoarece protectedcuvântul cheie ascunde datele, nu putem accesa tipul direct dintr-un obiect Dogsau Animalclasă.

 // Error: member "Animal::type" is inaccessible dog1.type = "mammal";

Moduri de acces în moștenirea C ++

În tutorialele noastre anterioare, am aflat despre specificatorii de acces C ++ precum public, privat și protejat.

Până acum, am folosit publiccuvântul cheie pentru a moșteni o clasă dintr-o clasă de bază existentă anterior. Cu toate acestea, putem folosi privateși protectedcuvintele cheie și pentru a moșteni clase. De exemplu,

 class Animal ( // code ); class Dog : private Animal ( // code );
 class Cat : protected Animal ( // code );

Diferitele moduri în care putem obține clase sunt cunoscute sub numele de moduri de acces . Aceste moduri de acces au următorul efect:

  1. public: Dacă o clasă derivată este declarată în publicmod, atunci membrii clasei de bază sunt moșteniți de clasa derivată așa cum sunt.
  2. privat: În acest caz, toți membrii clasei de bază devin privatemembri ai clasei derivate.
  3. protejate: Cei publicmembrii clasei de bază devin protectedmembri din clasa derivată.

Cei privatemembrii clasei de bază sunt întotdeauna privateîn clasa derivată.

Pentru a afla mai multe, vizitați tutorialul nostru de moștenire public, privat, protejat C ++.

Funcția membrului suprascrie în moștenire

Să presupunem că clasa de bază și clasa derivată au funcții membre cu același nume și argumente.

Dacă creăm un obiect al clasei derivate și încercăm să accesăm acea funcție membru, funcția membru din clasa derivată este invocată în locul celei din clasa de bază.

Funcția membru a clasei derivate suprascrie funcția membru a clasei de bază.

Aflați mai multe despre suprascrierea funcției în C ++.

Citire recomandată: C ++ Multiple Moștenire

Articole interesante...