C ++ Perintö

Tässä opetusohjelmassa opitaan C ++: n perinnöstä esimerkkien avulla.

Perintö on yksi olio-ohjelmoinnin pääpiirteistä C ++: ssa. Sen avulla voimme luoda uuden luokan (johdettu luokka) olemassa olevasta luokasta (perusluokka).

Johdettu luokka perii ominaisuudet perusluokalta, ja sillä voi olla omia lisäominaisuuksia. Esimerkiksi,

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

Täällä Dogluokka on johdettu Animalluokasta. Koska se Dogon johdettu Animal, jäsenet Animalovat käytettävissä Dog.

Perintö C ++: ssa

Huomaa avainsanan käyttö publicsamalla kun perit koiran eläimestä.

 class Dog : public Animal (… );

Voimme käyttää myös avainsanoja privateja protectedsen sijaan public. Me oppia eroista käyttäen private, publicja protectedmyöhemmin tässä opetusohjelmassa.

on-suhde

Perintö on suhde . Käytämme perintöä vain, jos kahden luokan välillä on is-suhde .

Tässä on joitain esimerkkejä:

  • Auto on ajoneuvo.
  • Oranssi on hedelmä.
  • Kirurgi on lääkäri.
  • Koira on eläin.

Esimerkki 1: Yksinkertainen esimerkki C ++ -perinnöstä

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

Tuotos

Voin syödä! Voin nukkua! Voin haukkua! Hau hau!!

Täällä dog1 (johdetun luokan kohde Dog) voi käyttää perusluokan jäseniä Animal. Se johtuu siitä, että se Dogon peritty Animal.

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

C ++ - suojatut jäsenet

Pääsyn modifikaattori protectedon erityisen merkityksellinen C ++ - perinnössä.

Kuten privatejäsenet, protectedjäsenet eivät ole tavoitettavissa luokan ulkopuolella. Niihin pääsee kuitenkin johdetuilla luokilla ja ystäväluokilla / toiminnoilla .

Tarvitsemme protectedjäseniä, jos haluamme piilottaa luokan tiedot, mutta silti haluamme, että nämä tiedot peritään sen johdetuista luokista.

Lisätietoja suojatusta on C ++ Access Modifiers -oppaassa.

Esimerkki 2: C ++ - suojatut jäsenet

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

Tuotos

Voin syödä! Voin nukkua! Voin haukkua! Hau hau!! Olen nisäkäs Värini on musta

Tässä muuttujatyyppi on protectedja on siten käytettävissä johdetusta luokasta Dog. Voimme nähdä tämän olemme alustettu typevuonna Dogluokan funktiolla setType().

Toisaalta privatevaihtelevaa väriä ei voida alustaa Dog.

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

Koska protectedavainsana piilottaa tiedot, emme voi käyttää tyyppiä suoraan objektista Dogtai Animalluokasta.

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

Pääsytilat C ++ -perinnössä

Aikaisemmissa opetusohjelmissamme olemme oppineet C ++ - käyttöoikeuksien määrittelijöistä, kuten julkisista, yksityisistä ja suojatuista.

Toistaiseksi olemme käyttäneet publicavainsanaa perimään luokan aikaisemmasta perusluokasta. Voimme kuitenkin käyttää ja privateja protectedavainsanoja myös luokkien perimiseen. Esimerkiksi,

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

Eri tapoja, joilla voimme johtaa luokkia, kutsutaan pääsytiloiksi . Näillä käyttömuodoilla on seuraava vaikutus:

  1. public: Jos johdettu luokka ilmoitetaan publictilassa, johdettu luokka perii perusluokan jäsenet samalla tavalla kuin he ovat.
  2. yksityinen: Tällöin kaikista perusluokan privatejäsenistä tulee jäseniä johdetussa luokassa.
  3. suojattu: Perusluokan publicjäsenistä tulee protectedjäseniä johdetussa luokassa.

Perusluokan privatejäsenet ovat aina privatejohdetussa luokassa.

Jos haluat lisätietoja, käy C ++: n julkisessa, yksityisessä, suojatussa perintöoppaassa.

Jäsentoiminto, joka ohittaa perinnön

Oletetaan, että perusluokalla ja johdetulla luokalla on jäsenfunktioita samalla nimellä ja argumenteilla.

Jos luomme johdetun luokan objektin ja yritämme käyttää kyseistä jäsenfunktiota, johdetaan johdetun luokan jäsenfunktio perusluokan sijasta.

Johdetun luokan jäsenfunktio ohittaa perusluokan jäsenfunktion.

Lisätietoja toimintojen ohittamisesta C ++: ssa.

Suositeltava lukeminen: C ++ - moniperintö

Mielenkiintoisia artikkeleita...