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 Dog
härrör Animal
klassen från klassen. Eftersom Dog
härstammar från Animal
är medlemmar Animal
tillgängliga för Dog
.

Lägg märke till användningen av nyckelordet public
när du ärver Hund från djur.
class Dog : public Animal (… );
Vi kan också använda nyckelorden private
och protected
istället för public
. Vi kommer att lära sig om skillnaderna mellan att använda private
, public
och protected
senare 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 private
medlemmar är protected
medlemmar oåtkomliga utanför klassen. De kan dock nås med härledda klasser och vänklasser / funktioner .
Vi behöver protected
medlemmar 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 protected
och är därmed tillgänglig från den härledda klassen Dog
. Vi kan se detta som vi har initialiserat type
i Dog
klassen med funktionen setType()
.
Å andra sidan kan den private
variabla färgen inte initieras Dog
.
class Dog : public Animal ( public: void setColor(string clr) ( // Error: member "Animal::color" is inaccessible color = clr; ) );
Eftersom protected
nyckelordet gömmer data kan vi inte heller komma åt typen direkt från ett objekt av Dog
eller Animal
klass.
// 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 public
nyckelordet för att ärva en klass från en tidigare existerande basklass. Men vi kan också använda private
och protected
sö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:
- public: Om en härledd klass deklareras i
public
läge, ärvs medlemmarna i basklassen av den härledda klassen precis som de är. - privat: I det här fallet blir alla medlemmar i basklassen
private
medlemmar i den härledda klassen. - skyddas: De
public
medlemmar av bas klassen blirprotected
medlemmar i den härledda klassen.
De private
medlemmar av basklassen är alltid private
i 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