U ovom uputstvu naučit ćemo o nasljeđivanju u C ++ uz pomoć primjera.
Nasljeđivanje je jedna od ključnih značajki Objektno orijentiranog programiranja u C ++-u. Omogućuje nam stvaranje nove klase (izvedene klase) od postojeće klase (bazne klase).
Izvedena klasa nasljeđuje značajke iz osnovne klase i može imati vlastite dodatne značajke. Na primjer,
class Animal ( // eat() function // sleep() function ); class Dog : public Animal ( // bark() function );
Ovdje je Dog
klasa izvedena iz Animal
klase. Budući da Dog
je izvedeno iz Animal
, članovi Animal
su dostupni Dog
.
Primijetite upotrebu ključne riječi public
tijekom nasljeđivanja Psa od Životinje.
class Dog : public Animal (… );
Također možemo koristiti ključne riječi private
i protected
umjesto public
. Mi ćemo naučiti o razlikama između koristi private
, public
a protected
kasnije u ovom vodiču.
je-odnos
Nasljeđivanje je veza . Nasljeđe koristimo samo ako je između te dvije klase prisutan odnos is -a .
Evo nekoliko primjera:
- Automobil je vozilo.
- Naranča je voće.
- Kirurg je liječnik.
- Pas je životinja.
Primjer 1: Jednostavni primjer nasljeđivanja C ++
// 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; )
Izlaz
Mogu jesti! Mogu spavati! Mogu lajati! Woof woof !!
Ovdje dog1 (objekt izvedene klase Dog
) može pristupiti članovima osnovne klase Animal
. To je zato što Dog
je naslijeđeno od Animal
.
// Calling members of the Animal class dog1.eat(); dog1.sleep();
C ++ zaštićeni članovi
Modifikator pristupa protected
posebno je važan kada je u pitanju nasljeđivanje C ++.
Poput private
članova, protected
članovi su nepristupačni izvan razreda. Međutim, mogu im pristupiti izvedene klase i klase / funkcije prijatelja .
protected
Članovi su nam potrebni ako želimo sakriti podatke klase, ali i dalje želimo da te podatke nasljeđuju izvedene klase.
Da biste saznali više o zaštićenim, pogledajte naš vodič za C ++ Modifikatore pristupa.
Primjer 2: C ++ zaštićeni članovi
// 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; )
Izlaz
Mogu jesti! Mogu spavati! Mogu lajati! Woof woof !! Ja sam sisavac Moja boja je crna
Ovdje je tip varijable protected
dostupan i stoga je dostupan iz izvedene klase Dog
. To možemo vidjeti jer smo inicijalizirali type
u Dog
klasi pomoću funkcije setType()
.
S druge strane, private
varijabilnu boju nije moguće inicijalizirati u Dog
.
class Dog : public Animal ( public: void setColor(string clr) ( // Error: member "Animal::color" is inaccessible color = clr; ) );
Također, budući da protected
ključna riječ skriva podatke, ne možemo pristupiti tipu izravno iz objekta Dog
ili Animal
klase.
// Error: member "Animal::type" is inaccessible dog1.type = "mammal";
Načini pristupa u nasljeđivanju C ++
U našim prethodnim vodičima naučili smo o C ++ specifikatorima pristupa kao što su javni, privatni i zaštićeni.
Do sada smo koristili public
ključnu riječ kako bismo naslijedili klasu iz prethodno postojeće osnovne klase. Međutim, ključne riječi private
i možemo koristiti i protected
za nasljeđivanje klasa. Na primjer,
class Animal ( // code ); class Dog : private Animal ( // code );
class Cat : protected Animal ( // code );
Različiti načini na koje možemo izvesti klase poznati su kao načini pristupa . Ovi načini pristupa imaju sljedeći učinak:
- public: Ako je izvedena klasa deklarirana u
public
načinu rada, izvedena klasa nasljeđuje članove osnovne klase baš kao što jesu. - private: U ovom slučaju, svi članovi osnovne klase postaju
private
članovi izvedene klase. - zaštićeni: The
public
Članovi baze klase postajuprotected
članova u izvedene klase.
Na private
članovi bazne klase su uvijek private
u izvedene klase.
Da biste saznali više, posjetite naš C ++ javni, privatni, zaštićeni vodič za nasljeđivanje.
Nadjačavanje funkcije člana u nasljeđivanju
Pretpostavimo da osnovna klasa i izvedena klasa imaju funkcije člana s istim imenom i argumentima.
Ako stvorimo objekt izvedene klase i pokušamo pristupiti toj funkciji člana, poziva se funkcija člana u izvedenoj klasi umjesto one u osnovnoj klasi.
Funkcija člana izvedene klase nadjačava funkciju člana osnovne klase.
Saznajte više o poništavanju funkcija u C ++.
Preporučena literatura: C ++ Višestruko nasljeđivanje