C ++ pärand

Selles õpetuses õpime näidete abil C ++ keeles pärimist.

Pärand on C ++ objektipõhise programmeerimise üks põhijooni. See võimaldab meil luua olemasolevast klassist (baasklassist) uue klassi (tuletatud klassi).

Tuletatud klass pärib tunnused baasklassilt ja sellel võib olla omaette omadusi. Näiteks,

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

Siin on Dogklass tuletatud Animalklassist. Kuna see Dogon tuletatud Animal, on domeeni liikmed Animaljuurdepääsetavad Dog.

Pärand C ++

Pange tähele märksõna kasutamist publickoera loomalt pärimisel.

 class Dog : public Animal (… );

Võime kasutada ka märksõnu privateja protectedselle asemel public. Me õppida erinevusi kasutades private, publicja protectedhiljem selle juhendaja.

on-suhe

Pärimine on suhe . Pärimist kasutame ainult siis, kui kahe klassi vahel on is-suhe .

siin on mõned näidised:

  • Auto on sõiduk.
  • Apelsin on vili.
  • Kirurg on arst.
  • Koer on loom.

Näide 1: C ++ pärandi lihtne näide

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

Väljund

Ma võin süüa! Ma saan magada! Ma oskan haukuda! Auh auh!!

Siin pääseb dog1 (tuletatud klassi objekt Dog) juurde baasklassi liikmetele Animal. Sellepärast, et Dogon päritud Animal.

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

C ++ kaitstud liikmed

Juurdepääsu modifikaator protectedon eriti oluline, kui tegemist on C ++ pärimisega.

Nagu privateliikmed, protectedei pääse liikmed ka väljaspool klassi. Neile pääseb aga juurde tuletatud klasside ja sõbraklasside / funktsioonide kaudu .

protectedLiikmeid on vaja, kui tahame klassi andmeid peita, kuid tahame siiski, et need andmed pärineksid selle tuletatud klassidest.

Kaitstud lisateabe saamiseks vaadake meie C ++ juurdepääsu modifikaatorite õpetust.

Näide 2: C ++ kaitstud liikmed

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

Väljund

Ma võin süüa! Ma saan magada! Ma oskan haukuda! Auh auh!! Olen imetaja Minu värv on must

Siin on muutuja tüüp protectedtuletatud klassist ligipääsetav Dog. Me näeme seda kui oleme lähtestatud typeon Dogklassi kasutades funktsiooni setType().

Teisest küljest privateei saa muutuvat värvi initsialiseerida Dog.

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

Kuna protectedmärksõna peidab andmeid, ei pääse me tüübile juurde otse objekti Dogvõi Animalklassi objektilt .

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

Juurdepääsurežiimid C ++ pärandis

Oma eelmistes õpetustes oleme õppinud tundma C ++ juurdepääsu täpsustajaid, nagu avalik, privaatne ja kaitstud.

Siiani oleme publicmärksõna kasutanud selleks, et pärida klass varem eksisteerinud baasklassist. Kuid me saab kasutada ka privateja protectedmärksõnad pärida klassi. Näiteks,

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

Klasside tuletamise erinevaid viise nimetatakse juurdepääsurežiimideks . Nendel juurdepääsurežiimidel on järgmine mõju:

  1. public: kui tuletatud klass deklareeritakse publicrežiimis, siis tuletatud klass pärib põhiklassi liikmed just sellisena nagu nad on.
  2. privaatne: sel juhul saavad kõik baasklassi privateliikmed tuletatud klassi liikmeteks.
  3. Kaitstud:public liikmed baasklass muutunud protectedliikmeid tuletatud klassi.

privateLiikmed baasklass on alati privatesisse tuletatud klassi.

Lisateabe saamiseks külastage meie C ++ avalikku, privaatset, kaitstud pärandiõpetust.

Liikme funktsioon pärimisel

Oletame, et baasklassil ja tuletatud klassil on sama nime ja argumentidega liikmefunktsioonid.

Kui loome tuletatud klassi objekti ja proovime sellele liikmefunktsioonile juurde pääseda, kutsutakse tuletatud klassi liikmefunktsioon baasklassi asemel.

Tuletatud klassi liikmefunktsioon alistab baasklassi liikmefunktsiooni.

Lisateave funktsioonide alistamise kohta C ++ -s.

Soovitatav kirjand: C ++ mitmekordne pärand

Huvitavad Artiklid...