C ++ mantojums

Šajā apmācībā mēs uzzināsim par mantojumu C ++, izmantojot piemērus.

Mantošana ir viena no objektorientētās programmēšanas galvenajām iezīmēm C ++. Tas ļauj mums izveidot jaunu klasi (atvasinātu klasi) no esošās klases (bāzes klases).

Atvasinātā klase pārmanto iezīmes no bāzes klases, un tai var būt savas papildu pazīmes. Piemēram,

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

Šeit Dogklase ir atvasināta no Animalklases. Tā kā tas Dogir atvasināts no Animal, grupas locekļi Animalir pieejami Dog.

Mantojums C ++

Ievērojiet atslēgvārda lietošanu public, mantojot suni no dzīvnieka.

 class Dog : public Animal (… );

Mēs varam arī izmantot atslēgvārdus privateun protectedvietā public. Mēs uzzināt par atšķirībām, izmantojot private, publicun protectedvēlāk šo pamācību.

ir-attiecības

Mantošana ir attiecības . Mēs izmantojam mantojumu tikai tad, ja ir, attiecības ir klāt starp abām klasēm.

Šeit ir daži piemēri:

  • Automašīna ir transportlīdzeklis.
  • Apelsīns ir auglis.
  • Ķirurgs ir ārsts.
  • Suns ir dzīvnieks.

1. piemērs: vienkāršs C ++ mantojuma piemērs

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

Rezultāts

Es varu ēst! Es varu gulēt! Es varu rej! Woo woo !!

Šeit dog1 (atvasinātās klases objekts Dog) var piekļūt pamatklases dalībniekiem Animal. Tas ir tāpēc, ka Dogir mantots no Animal.

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

C ++ aizsargātie locekļi

Piekļuves modifikators protectedir īpaši aktuāls, ja runa ir par C ++ mantojumu.

Tāpat kā privatebiedri, arī protecteddalībnieki nav sasniedzami ārpus klases. Tomēr tiem var piekļūt, izmantojot atvasinātas klases un draugu klases / funkcijas .

Mums ir vajadzīgi protecteddalībnieki, ja mēs vēlamies paslēpt klases datus, bet tomēr vēlamies, lai šie dati tiktu mantoti no tā atvasinātajām klasēm.

Lai uzzinātu vairāk par aizsargāto, skatiet mūsu C ++ piekļuves modifikatoru apmācību.

2. piemērs: C ++ aizsargātie locekļi

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

Rezultāts

Es varu ēst! Es varu gulēt! Es varu rej! Woo woo !! Es esmu zīdītājs Mana krāsa ir melna

Šeit mainīgā tips ir protectedun tādējādi ir pieejams no atvasinātās klases Dog. Mēs varam redzēt to, kā mēs esam inicializēts typešajā Dogklasē, izmantojot funkciju setType().

No otras puses, privatemainīgo krāsu nevar inicializēt Dog.

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

Tā kā protectedatslēgvārds slēpj datus, mēs nevaram piekļūt tipam tieši no objekta Dogvai Animalklases.

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

Piekļuves režīmi C ++ mantojumā

Iepriekšējās apmācībās mēs esam uzzinājuši par C ++ piekļuves specifikatoriem, piemēram, publiskiem, privātiem un aizsargātiem.

Līdz šim mēs izmantojām publicatslēgvārdu, lai mantotu klasi no iepriekš pastāvošas bāzes klases. Taču mēs varam arī izmantot private, un protectedatslēgvārdus, lai mantot klasēs. Piemēram,

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

Dažādi veidi, kā mēs varam iegūt klases, ir pazīstami kā piekļuves režīmi . Šiem piekļuves režīmiem ir šāda ietekme:

  1. public: Ja atvasinātā klase tiek deklarēta publicrežīmā, tad atvasinātā klase pārmanto bāzes klases dalībniekus tāpat kā viņi.
  2. privāts: šajā gadījumā visi pamatklases privatelocekļi kļūst par locekļiem atvasinātajā klasē.
  3. aizsargāti: Pamatklases publicdalībnieki kļūst protectedpar atvasinātās klases biedriem.

Pamatklases privatedalībnieki vienmēr privateir atvasinātajā klasē.

Lai uzzinātu vairāk, apmeklējiet mūsu C ++ publisko, privāto, aizsargāto mantojuma apmācību.

Dalībnieka funkcija, kas ir svarīgāka par mantojumu

Pieņemsim, ka bāzes klasei un atvasinātajai klasei ir dalībnieku funkcijas ar tādu pašu nosaukumu un argumentiem.

Ja mēs izveidojam atvasinātas klases objektu un mēģinām piekļūt šai dalībnieka funkcijai, tiek izsaukta atvasinātās klases dalībnieka funkcija, nevis tā, kas atrodas pamatklasē.

Atvasinātās klases dalībnieka funkcija ignorē bāzes klases locekļa funkciju.

Uzziniet vairāk par funkciju ignorēšanu C ++.

Ieteicamā literatūra: C ++ vairākkārtēja mantošana

Interesanti raksti...