I denne opplæringen vil vi lære om arv i C ++ ved hjelp av eksempler.
Arv er en av nøkkelegenskapene til Objektorientert programmering i C ++. Det lar oss lage en ny klasse (avledet klasse) fra en eksisterende klasse (basisklasse).
Den avledede klassen arver funksjonene fra basisklassen og kan ha flere egne funksjoner. For eksempel,
class Animal ( // eat() function // sleep() function ); class Dog : public Animal ( // bark() function );
Her er Dog
klassen avledet fra Animal
klassen. Siden Dog
er avledet av Animal
, er medlemmer av Animal
tilgjengelige for Dog
.

Legg merke til bruken av nøkkelordet public
mens du arver hund fra dyr.
class Dog : public Animal (… );
Vi kan også bruke nøkkelordene private
og i protected
stedet for public
. Vi vil lære om forskjellene mellom å bruke private
, public
og protected
senere i denne opplæringen.
er-et forhold
Arv er et er-et forhold . Vi bruker arv bare hvis det er et forhold mellom de to klassene.
Her er noen eksempler:
- En bil er et kjøretøy.
- Appelsin er en frukt.
- En kirurg er lege.
- En hund er et dyr.
Eksempel 1: Enkelt eksempel 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; )
Produksjon
Jeg kan spise! Jeg kan sove! Jeg kan bjeffe! Voff voff!!
Her kan dog1 (gjenstand for avledet klasse Dog
) få tilgang til medlemmer av basisklassen Animal
. Det er fordi Dog
er arvet fra Animal
.
// Calling members of the Animal class dog1.eat(); dog1.sleep();
C ++ beskyttede medlemmer
Tilgangsmodifikatoren protected
er spesielt relevant når det gjelder C ++ arv.
I likhet med private
medlemmer er protected
medlemmene utilgjengelige utenfor klassen. Imidlertid har de tilgang til avledede klasser og venneklasser / funksjoner .
Vi trenger protected
medlemmer hvis vi ønsker å skjule dataene til en klasse, men fortsatt vil at dataene skal arves av de avledede klassene.
For å lære mer om beskyttet, se C ++ Access Modifiers tutorial.
Eksempel 2: C ++ -beskyttede medlemmer
// 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; )
Produksjon
Jeg kan spise! Jeg kan sove! Jeg kan bjeffe! Voff voff!! Jeg er et pattedyr. Fargen min er svart
Her er variabeltypen protected
og er dermed tilgjengelig fra den avledede klassen Dog
. Vi kan se dette slik vi har initialisert type
i Dog
klassen ved hjelp av funksjonen setType()
.
På den annen side kan den private
variable fargen ikke initialiseres i Dog
.
class Dog : public Animal ( public: void setColor(string clr) ( // Error: member "Animal::color" is inaccessible color = clr; ) );
Siden protected
nøkkelordet skjuler data, kan vi heller ikke få tilgang til typen direkte fra et objekt fra Dog
eller Animal
klasse.
// Error: member "Animal::type" is inaccessible dog1.type = "mammal";
Få tilgang til moduser i C ++ arv
I våre tidligere veiledninger har vi lært om C ++ tilgangsspesifikatorer som offentlige, private og beskyttede.
Så langt har vi brukt public
nøkkelordet for å arve en klasse fra en tidligere basisklasse. Men vi kan også bruke private
og protected
søkeord til å arve klasser. For eksempel,
class Animal ( // code ); class Dog : private Animal ( // code );
class Cat : protected Animal ( // code );
De forskjellige måtene vi kan utlede klasser på er kjent som tilgangsmodus . Disse tilgangsmodusene har følgende effekt:
- offentlig: Hvis en avledet klasse er erklært i
public
modus, arves medlemmene av baseklassen av den avledede klassen akkurat som de er. - privat: I dette tilfellet blir alle medlemmene i baseklassen
private
medlemmer i den avledede klassen. - beskyttet: De
public
medlemmer av basisklassen blirprotected
medlemmer i den avledede klassen.
De private
medlemmer av basisklassen er alltid private
i den avledede klassen.
For å lære mer, besøk vår C ++ offentlige, private, beskyttede arveopplæring.
Medlemsfunksjon Overstyring i arv
Anta at basisklasse og avledet klasse har medlemsfunksjoner med samme navn og argumenter.
Hvis vi lager et objekt av den avledede klassen og prøver å få tilgang til den medlemsfunksjonen, blir medlemsfunksjonen i den avledede klassen påkalt i stedet for den i basisklassen.
Medlemsfunksjonen til avledet klasse overstyrer medlemsfunksjonen til baseklassen.
Lær mer om funksjonsoverstyring i C ++.
Anbefalt lesing: C ++ Multiple Arv