Š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 Dog
klase ir atvasināta no Animal
klases. Tā kā tas Dog
ir atvasināts no Animal
, grupas locekļi Animal
ir pieejami Dog
.

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 private
un protected
vietā public
. Mēs uzzināt par atšķirībām, izmantojot private
, public
un protected
vē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 Dog
ir mantots no Animal
.
// Calling members of the Animal class dog1.eat(); dog1.sleep();
C ++ aizsargātie locekļi
Piekļuves modifikators protected
ir īpaši aktuāls, ja runa ir par C ++ mantojumu.
Tāpat kā private
biedri, arī protected
dalībnieki nav sasniedzami ārpus klases. Tomēr tiem var piekļūt, izmantojot atvasinātas klases un draugu klases / funkcijas .
Mums ir vajadzīgi protected
dalī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 protected
un 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ā Dog
klasē, izmantojot funkciju setType()
.
No otras puses, private
mainī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ā protected
atslēgvārds slēpj datus, mēs nevaram piekļūt tipam tieši no objekta Dog
vai Animal
klases.
// 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 public
atslēgvārdu, lai mantotu klasi no iepriekš pastāvošas bāzes klases. Taču mēs varam arī izmantot private
, un protected
atslē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:
- public: Ja atvasinātā klase tiek deklarēta
public
režīmā, tad atvasinātā klase pārmanto bāzes klases dalībniekus tāpat kā viņi. - privāts: šajā gadījumā visi pamatklases
private
locekļi kļūst par locekļiem atvasinātajā klasē. - aizsargāti: Pamatklases
public
dalībnieki kļūstprotected
par atvasinātās klases biedriem.
Pamatklases private
dalībnieki vienmēr private
ir 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