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 Dog
klass tuletatud Animal
klassist. Kuna see Dog
on tuletatud Animal
, on domeeni liikmed Animal
juurdepääsetavad Dog
.

Pange tähele märksõna kasutamist public
koera loomalt pärimisel.
class Dog : public Animal (… );
Võime kasutada ka märksõnu private
ja protected
selle asemel public
. Me õppida erinevusi kasutades private
, public
ja protected
hiljem 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 Dog
on päritud Animal
.
// Calling members of the Animal class dog1.eat(); dog1.sleep();
C ++ kaitstud liikmed
Juurdepääsu modifikaator protected
on eriti oluline, kui tegemist on C ++ pärimisega.
Nagu private
liikmed, protected
ei pääse liikmed ka väljaspool klassi. Neile pääseb aga juurde tuletatud klasside ja sõbraklasside / funktsioonide kaudu .
protected
Liikmeid 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 protected
tuletatud klassist ligipääsetav Dog
. Me näeme seda kui oleme lähtestatud type
on Dog
klassi kasutades funktsiooni setType()
.
Teisest küljest private
ei saa muutuvat värvi initsialiseerida Dog
.
class Dog : public Animal ( public: void setColor(string clr) ( // Error: member "Animal::color" is inaccessible color = clr; ) );
Kuna protected
märksõna peidab andmeid, ei pääse me tüübile juurde otse objekti Dog
või Animal
klassi 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 public
märksõna kasutanud selleks, et pärida klass varem eksisteerinud baasklassist. Kuid me saab kasutada ka private
ja protected
mä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:
- public: kui tuletatud klass deklareeritakse
public
režiimis, siis tuletatud klass pärib põhiklassi liikmed just sellisena nagu nad on. - privaatne: sel juhul saavad kõik baasklassi
private
liikmed tuletatud klassi liikmeteks. - Kaitstud:
public
liikmed baasklass muutunudprotected
liikmeid tuletatud klassi.
private
Liikmed baasklass on alati private
sisse 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