C ++ Arv

I den här handledningen lär vi oss om arv i C ++ med hjälp av exempel.

Arv är en av nyckelfunktionerna för objektorienterad programmering i C ++. Det gör att vi kan skapa en ny klass (härledd klass) från en befintlig klass (basklass).

Den härledda klassen ärver funktionerna från basklassen och kan ha ytterligare funktioner. Till exempel,

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

Här Doghärrör Animalklassen från klassen. Eftersom Doghärstammar från Animalär medlemmar Animaltillgängliga för Dog.

Arv i C ++

Lägg märke till användningen av nyckelordet publicnär du ärver Hund från djur.

 class Dog : public Animal (… );

Vi kan också använda nyckelorden privateoch protectedistället för public. Vi kommer att lära sig om skillnaderna mellan att använda private, publicoch protectedsenare i den här guiden.

är-ett förhållande

Arv är ett förhållande . Vi använder endast arv om det finns ett förhållande mellan de två klasserna.

Här är några exempel:

  • En bil är ett fordon.
  • Apelsin är en frukt.
  • En kirurg är läkare.
  • En hund är ett djur.

Exempel 1: Enkelt exempel på C ++ arv

 // 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; )

Produktion

Jag kan äta! Jag kan sova! Jag kan skälla! Voff VOFF!!

Här kan dog1 (objektet för härledd klass Dog) komma åt medlemmar i basklassen Animal. Det beror på att Dogärvs från Animal.

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

C ++ skyddade medlemmar

Åtkomstmodifieraren protectedär särskilt relevant när det gäller C ++ -arv.

Liksom privatemedlemmar är protectedmedlemmar oåtkomliga utanför klassen. De kan dock nås med härledda klasser och vänklasser / funktioner .

Vi behöver protectedmedlemmar om vi vill dölja data för en klass, men ändå vill att dessa data ärvs av dess härledda klasser.

För att lära dig mer om skyddad, se vår C ++ Access Modifiers tutorial.

Exempel 2: C ++ - skyddade medlemmar

 // 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; )

Produktion

Jag kan äta! Jag kan sova! Jag kan skälla! Voff VOFF!! Jag är ett däggdjur. Min färg är svart

Här är variabeltypen protectedoch är därmed tillgänglig från den härledda klassen Dog. Vi kan se detta som vi har initialiserat typei Dogklassen med funktionen setType().

Å andra sidan kan den privatevariabla färgen inte initieras Dog.

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

Eftersom protectednyckelordet gömmer data kan vi inte heller komma åt typen direkt från ett objekt av Dogeller Animalklass.

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

Åtkomstlägen i C ++ arv

I våra tidigare handledning har vi lärt oss om C ++ åtkomstspecifikatorer som offentliga, privata och skyddade.

Hittills har vi använt publicnyckelordet för att ärva en klass från en tidigare existerande basklass. Men vi kan också använda privateoch protectedsökord ska ärva klasser. Till exempel,

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

De olika sätten vi kan härleda klasser på är kända som åtkomstlägen . Dessa åtkomstlägen har följande effekt:

  1. public: Om en härledd klass deklareras i publicläge, ärvs medlemmarna i basklassen av den härledda klassen precis som de är.
  2. privat: I det här fallet blir alla medlemmar i basklassen privatemedlemmar i den härledda klassen.
  3. skyddas: De publicmedlemmar av bas klassen blir protectedmedlemmar i den härledda klassen.

De privatemedlemmar av basklassen är alltid privatei den härledda klassen.

För att lära dig mer, besök vår C ++ offentliga, privata, skyddade arvstudie.

Ledarfunktion Överstyrning i arv

Antag att basklass och härledd klass har medlemsfunktioner med samma namn och argument.

Om vi ​​skapar ett objekt av den härledda klassen och försöker komma åt den medlemsfunktionen, anropas medlemsfunktionen i den härledda klassen istället för den i basklassen.

Medlemsfunktionen för härledd klass åsidosätter basfunktionens medlemsfunktion.

Läs mer om funktionen åsidosättande i C ++.

Rekommenderad läsning: C ++ Multiple Arv

Intressanta artiklar...