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ä Dog
luokka on johdettu Animal
luokasta. Koska se Dog
on johdettu Animal
, jäsenet Animal
ovat käytettävissä Dog
.

Huomaa avainsanan käyttö public
samalla kun perit koiran eläimestä.
class Dog : public Animal (… );
Voimme käyttää myös avainsanoja private
ja protected
sen sijaan public
. Me oppia eroista käyttäen private
, public
ja protected
myö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 Dog
on peritty Animal
.
// Calling members of the Animal class dog1.eat(); dog1.sleep();
C ++ - suojatut jäsenet
Pääsyn modifikaattori protected
on erityisen merkityksellinen C ++ - perinnössä.
Kuten private
jäsenet, protected
jäsenet eivät ole tavoitettavissa luokan ulkopuolella. Niihin pääsee kuitenkin johdetuilla luokilla ja ystäväluokilla / toiminnoilla .
Tarvitsemme protected
jä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 protected
ja on siten käytettävissä johdetusta luokasta Dog
. Voimme nähdä tämän olemme alustettu type
vuonna Dog
luokan funktiolla setType()
.
Toisaalta private
vaihtelevaa väriä ei voida alustaa Dog
.
class Dog : public Animal ( public: void setColor(string clr) ( // Error: member "Animal::color" is inaccessible color = clr; ) );
Koska protected
avainsana piilottaa tiedot, emme voi käyttää tyyppiä suoraan objektista Dog
tai Animal
luokasta.
// 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 public
avainsanaa perimään luokan aikaisemmasta perusluokasta. Voimme kuitenkin käyttää ja private
ja protected
avainsanoja 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:
- public: Jos johdettu luokka ilmoitetaan
public
tilassa, johdettu luokka perii perusluokan jäsenet samalla tavalla kuin he ovat. - yksityinen: Tällöin kaikista perusluokan
private
jäsenistä tulee jäseniä johdetussa luokassa. - suojattu: Perusluokan
public
jäsenistä tuleeprotected
jäseniä johdetussa luokassa.
Perusluokan private
jäsenet ovat aina private
johdetussa 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ö