Šioje pamokoje su pavyzdžių pagalba sužinosime apie paveldėjimą C ++ formatu.
Paveldėjimas yra viena iš pagrindinių objektinio programavimo funkcijų C ++. Tai leidžia mums sukurti naują klasę (išvestinę klasę) iš esamos klasės (bazinės klasės).
Išvestinė klasė paveldi ypatybes iš bazinės klasės ir gali turėti papildomų savybių. Pavyzdžiui,
class Animal ( // eat() function // sleep() function ); class Dog : public Animal ( // bark() function );
Čia Dog
klasė yra kilusi iš Animal
klasės. Kadangi Dog
yra kilęs iš Animal
, „“ nariai Animal
yra prieinami Dog
.

Atkreipkite dėmesį, kad raktinis žodis naudojamas public
paveldint šunį iš gyvūno.
class Dog : public Animal (… );
Taip pat galime naudoti raktinius žodžius private
ir protected
vietoj public
. Mes sužinoti apie tarp naudojant skirtumų private
, public
ir protected
vėliau šiame samouczku.
yra-santykiai
Paveldėjimas yra santykis . Paveldėjimą naudojame tik tuo atveju, jei yra santykis tarp dviejų klasių.
Štai keletas pavyzdžių:
- Automobilis yra transporto priemonė.
- Apelsinas yra vaisius.
- Chirurgas yra gydytojas.
- Šuo yra gyvūnas.
1 pavyzdys: paprastas C ++ paveldėjimo pavyzdys
// 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; )
Rezultatas
Aš galiu valgyti! Aš galiu miegoti! Aš galiu loti! Woof woof !!
Čia dog1 (išvestinės klasės objektas Dog
) gali pasiekti bazinės klasės narius Animal
. Taip yra todėl, kad Dog
paveldėta iš Animal
.
// Calling members of the Animal class dog1.eat(); dog1.sleep();
C ++ saugomi nariai
Prieigos modifikatorius protected
ypač aktualus, kai kalbama apie C ++ paveldėjimą.
Kaip ir private
nariai, protected
nariai yra neprieinami už klasės ribų. Tačiau prie jų galima naudotis išvestinėmis klasėmis ir draugų klasėmis / funkcijomis .
Mums reikia protected
narių, jei norime paslėpti klasės duomenis, bet vis tiek norime, kad tuos duomenis paveldėtų išvestinės klasės.
Norėdami sužinoti daugiau apie apsaugotą, žiūrėkite mūsų C ++ prieigos modifikatorių pamoką.
2 pavyzdys: C ++ apsaugoti nariai
// 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; )
Rezultatas
Aš galiu valgyti! Aš galiu miegoti! Aš galiu loti! Woof woof !! Aš esu žinduolis. Mano spalva yra juoda
Čia kintamojo tipas yra protected
ir yra prieinamas iš išvestinės klasės Dog
. Mes matome tai kaip mes inicializuoti type
į Dog
klasę naudojant funkciją setType()
.
Kita vertus, private
kintamos spalvos negalima inicializuoti Dog
.
class Dog : public Animal ( public: void setColor(string clr) ( // Error: member "Animal::color" is inaccessible color = clr; ) );
Be to, kadangi protected
raktinis žodis slepia duomenis, negalime pasiekti tipo tiesiogiai iš objekto Dog
ar Animal
klasės.
// Error: member "Animal::type" is inaccessible dog1.type = "mammal";
Prieigos režimai C ++ paveldėjime
Ankstesnėse mūsų pamokose sužinojome apie C ++ prieigos specifikatorius, tokius kaip viešoji, privati ir saugoma.
Iki šiol public
raktinį žodį naudojome tam, kad paveldėtume klasę iš anksčiau egzistavusios pagrindinės klasės. Tačiau klasėms paveldėti galime naudoti private
ir protected
raktinius žodžius. Pavyzdžiui,
class Animal ( // code ); class Dog : private Animal ( // code );
class Cat : protected Animal ( // code );
Įvairūs klasių išvedimo būdai yra žinomi kaip prieigos režimai . Šie prieigos režimai turi tokį poveikį:
- public: Jei išvestinė klasė deklaruojama
public
režimu, tai išvestinė klasė paveldi bazinės klasės narius tokius pat, kokie jie yra. - privatus: šiuo atveju visi bazinės klasės
private
nariai tampa išvestinės klasės nariais. - apsaugotas: Pateikti
public
iš pagrindinės klasės tampa prisijungęprotected
narių išvestinės klasės.
Pagrindinės private
klasės nariai visada private
yra išvestinėje klasėje.
Norėdami sužinoti daugiau, apsilankykite mūsų viešoje, privačioje, saugomoje C ++ paveldėjimo pamokoje.
Nario funkcija, viršijanti paveldėjimą
Tarkime, kad pagrindinė klasė ir išvestinė klasė turi narių funkcijas tuo pačiu pavadinimu ir argumentais.
Jei sukursime išvestinės klasės objektą ir bandysime pasiekti tą nario funkciją, vietoj bazinės klasės iškviečiama išvestinės klasės nario funkcija.
Išvestinės klasės nario funkcija pakeičia bazinės klasės nario funkciją.
Sužinokite daugiau apie funkcijų nepaisymą C ++.
Rekomenduojamas skaitymas: C ++ daugybinis paveldėjimas