C ++ Arv

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 Dogklassen avledet fra Animalklassen. Siden Doger avledet av Animal, er medlemmer av Animaltilgjengelige for Dog.

Arv i C ++

Legg merke til bruken av nøkkelordet publicmens du arver hund fra dyr.

 class Dog : public Animal (… );

Vi kan også bruke nøkkelordene privateog i protectedstedet for public. Vi vil lære om forskjellene mellom å bruke private, publicog protectedsenere 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 Doger arvet fra Animal.

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

C ++ beskyttede medlemmer

Tilgangsmodifikatoren protecteder spesielt relevant når det gjelder C ++ arv.

I likhet med privatemedlemmer er protectedmedlemmene utilgjengelige utenfor klassen. Imidlertid har de tilgang til avledede klasser og venneklasser / funksjoner .

Vi trenger protectedmedlemmer 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 protectedog er dermed tilgjengelig fra den avledede klassen Dog. Vi kan se dette slik vi har initialisert typei Dogklassen ved hjelp av funksjonen setType().

På den annen side kan den privatevariable fargen ikke initialiseres i Dog.

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

Siden protectednøkkelordet skjuler data, kan vi heller ikke få tilgang til typen direkte fra et objekt fra Dogeller Animalklasse.

 // 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 publicnøkkelordet for å arve en klasse fra en tidligere basisklasse. Men vi kan også bruke privateog protectedsø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:

  1. offentlig: Hvis en avledet klasse er erklært i publicmodus, arves medlemmene av baseklassen av den avledede klassen akkurat som de er.
  2. privat: I dette tilfellet blir alle medlemmene i baseklassen privatemedlemmer i den avledede klassen.
  3. beskyttet: De publicmedlemmer av basisklassen blir protectedmedlemmer i den avledede klassen.

De privatemedlemmer av basisklassen er alltid privatei 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

Interessante artikler...