C ++ paveldėjimas

Š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 Dogklasė yra kilusi iš Animalklasės. Kadangi Dogyra kilęs iš Animal, „“ nariai Animalyra prieinami Dog.

Paveldėjimas C ++

Atkreipkite dėmesį, kad raktinis žodis naudojamas publicpaveldint šunį iš gyvūno.

 class Dog : public Animal (… );

Taip pat galime naudoti raktinius žodžius privateir protectedvietoj public. Mes sužinoti apie tarp naudojant skirtumų private, publicir protectedvė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 Dogpaveldėta iš Animal.

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

C ++ saugomi nariai

Prieigos modifikatorius protectedypač aktualus, kai kalbama apie C ++ paveldėjimą.

Kaip ir privatenariai, protectednariai yra neprieinami už klasės ribų. Tačiau prie jų galima naudotis išvestinėmis klasėmis ir draugų klasėmis / funkcijomis .

Mums reikia protectednarių, 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 protectedir yra prieinamas iš išvestinės klasės Dog. Mes matome tai kaip mes inicializuoti typeį Dogklasę naudojant funkciją setType().

Kita vertus, privatekintamos spalvos negalima inicializuoti Dog.

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

Be to, kadangi protectedraktinis žodis slepia duomenis, negalime pasiekti tipo tiesiogiai iš objekto Dogar Animalklasė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 publicraktinį žodį naudojome tam, kad paveldėtume klasę iš anksčiau egzistavusios pagrindinės klasės. Tačiau klasėms paveldėti galime naudoti privateir protectedraktinius ž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į:

  1. public: Jei išvestinė klasė deklaruojama publicrežimu, tai išvestinė klasė paveldi bazinės klasės narius tokius pat, kokie jie yra.
  2. privatus: šiuo atveju visi bazinės klasės privatenariai tampa išvestinės klasės nariais.
  3. apsaugotas: Pateikti publiciš pagrindinės klasės tampa prisijungę protectednarių išvestinės klasės.

Pagrindinės privateklasės nariai visada privateyra 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

Įdomios straipsniai...