Nasljeđivanje C ++

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 Dogklasa izvedena iz Animalklase. Budući da Dogje izvedeno iz Animal, članovi Animalsu dostupni Dog.

Nasljeđivanje u C ++

Primijetite upotrebu ključne riječi publictijekom nasljeđivanja Psa od Životinje.

 class Dog : public Animal (… );

Također možemo koristiti ključne riječi privatei protectedumjesto public. Mi ćemo naučiti o razlikama između koristi private, publica protectedkasnije 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 Dogje naslijeđeno od Animal.

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

C ++ zaštićeni članovi

Modifikator pristupa protectedposebno 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 protecteddostupan i stoga je dostupan iz izvedene klase Dog. To možemo vidjeti jer smo inicijalizirali typeu Dogklasi pomoću funkcije setType().

S druge strane, privatevarijabilnu 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 protectedključna riječ skriva podatke, ne možemo pristupiti tipu izravno iz objekta Dogili Animalklase.

 // 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 publicključnu riječ kako bismo naslijedili klasu iz prethodno postojeće osnovne klase. Međutim, ključne riječi privatei možemo koristiti i protectedza 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:

  1. public: Ako je izvedena klasa deklarirana u publicnačinu rada, izvedena klasa nasljeđuje članove osnovne klase baš kao što jesu.
  2. private: U ovom slučaju, svi članovi osnovne klase postaju privatečlanovi izvedene klase.
  3. zaštićeni: The publicČlanovi baze klase postaju protectedčlanova u izvedene klase.

Na privatečlanovi bazne klase su uvijek privateu 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

Zanimljivi članci...