C ++ arv

I denne vejledning lærer vi om arv i C ++ ved hjælp af eksempler.

Arv er en af ​​nøglefunktionerne i Objektorienteret programmering i C ++. Det giver os mulighed for at oprette en ny klasse (afledt klasse) fra en eksisterende klasse (basisklasse).

Den afledte klasse arver funktionerne fra basisklassen og kan have sine egne yderligere funktioner. For eksempel,

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

Her Dogstammer Animalklassen fra klassen. Siden Doger afledt af Animal, er medlemmer af Animaltilgængelige for Dog.

Arv i C ++

Bemærk brugen af ​​nøgleordet, publicmens du arver hund fra dyr.

 class Dog : public Animal (… );

Vi kan også bruge nøgleordene privateog i protectedstedet for public. Vi vil lære om forskellene mellem at bruge private, publicog protectedsenere i denne tutorial.

er-et forhold

Arv er et is-a forhold . Vi bruger kun arv, hvis der er et forhold mellem de to klasser.

Her er nogle eksempler:

  • En bil er et køretøj.
  • Orange er en frugt.
  • En kirurg er læge.
  • 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; )

Produktion

Jeg kan spise! Jeg kan sove! Jeg kan gø! Woof woof !!

Her kan dog1 (objektet for afledt klasse Dog) få adgang til medlemmer af basisklassen Animal. Det er fordi Dogdet arves fra Animal.

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

C ++ beskyttede medlemmer

Adgangsmodifikatoren protecteder især relevant, når det kommer til C ++ arv.

Ligesom privatemedlemmer er protectedmedlemmer utilgængelige uden for klassen. Der er dog adgang til dem med afledte klasser og vensklasser / -funktioner .

Vi har brug for protectedmedlemmer, hvis vi vil skjule dataene for en klasse, men stadig ønsker, at dataene nedarves af dens afledte klasser.

For at lære mere om beskyttet henvises til vores 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; )

Produktion

Jeg kan spise! Jeg kan sove! Jeg kan gø! Woof woof !! Jeg er et pattedyr. Min farve er sort

Her er variabeltypen protectedog er således tilgængelig fra den afledte klasse Dog. Vi kan se dette, som vi har initialiseret typei Dogklassen ved hjælp af funktionen setType().

På den anden side kan den privatevariable farve ikke initialiseres i Dog.

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

Da protectednøgleordet skjuler data, kan vi heller ikke få adgang til typen direkte fra et objekt Dogeller en Animalklasse.

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

Adgangstilstande i C ++ arv

I vores tidligere tutorials har vi lært om C ++ adgangsspecifikatorer såsom offentlige, private og beskyttede.

Indtil videre har vi brugt publicnøgleordet for at arve en klasse fra en tidligere eksisterende basisklasse. Men vi kan også bruge privateog protectednøgleord til at arve klasser. For eksempel,

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

De forskellige måder, vi kan udlede klasser på, kaldes adgangstilstande . Disse adgangstilstande har følgende effekt:

  1. offentlig: Hvis en afledt klasse erklæres i publictilstand, arves medlemmerne af baseklassen af ​​den afledte klasse, ligesom de er.
  2. privat: I dette tilfælde bliver alle medlemmer af basisklassen privatemedlemmer i den afledte klasse.
  3. beskyttet: De publicmedlemmer af basen klassen bliver protectedmedlemmer i den afledte klasse.

De privatemedlemmer af basen klassen er altid privatei den afledte klasse.

For at lære mere, besøg vores C ++ offentlige, private, beskyttede arvevejledning.

Medlem Funktion Tilsidesættelse af arv

Antag, baseklasse og afledt klasse har medlemsfunktioner med samme navn og argumenter.

Hvis vi opretter et objekt fra den afledte klasse og forsøger at få adgang til denne medlemsfunktion, kaldes medlemsfunktionen i den afledte klasse i stedet for den i basisklassen.

Medlemfunktionen for afledt klasse tilsidesætter baseformens medlemsfunktion.

Lær mere om funktionsoverstyring i C ++.

Anbefalet læsning: C ++ flere arv

Interessante artikler...