Dedovanje C ++

V tej vadnici bomo s pomočjo primerov spoznali dedovanje v jeziku C ++.

Dedovanje je ena ključnih značilnosti objektno usmerjenega programiranja v jeziku C ++. Omogoča nam ustvarjanje novega razreda (izpeljani razred) iz obstoječega razreda (osnovni razred).

Izpeljani razred podeduje funkcije iz osnovnega razreda in ima lahko lastne dodatne funkcije. Na primer

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

Tu je Dograzred izpeljan iz Animalrazreda. Ker Dogizhaja iz Animal, so člani Animaldomene dostopni Dog.

Dedovanje v jeziku C ++

Upoštevajte uporabo ključne besede publicpri dedovanju psa od živali.

 class Dog : public Animal (… );

Uporabljamo lahko tudi ključne besede privatein protectednamesto public. Spoznali bomo o razlikah med uporabo private, publicin protectedpozneje v tem tečaju.

je-odnos

Dedovanje je razmerje med odnosi . Dedovanje uporabljamo le, če je med obema razredoma prisotno razmerje is -a .

Tu je nekaj primerov:

  • Avto je vozilo.
  • Pomaranča je sadje.
  • Kirurg je zdravnik.
  • Pes je žival.

Primer 1: preprost primer dedovanja 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; )

Izhod

Lahko jem! Lahko spim! Lahko lajam! Woof woof !!

Tu lahko dog1 (objekt izpeljanega razreda Dog) dostopa do članov osnovnega razreda Animal. To je zato, ker Dogje podedovano od Animal.

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

C ++ zaščiteni člani

Modifikator dostopa protectedje še posebej pomemben, ko gre za dedovanje C ++.

Tako kot privatečlani so tudi protectedčlani nedostopni zunaj predavanja. Do njih pa lahko dostopajo izvedeni razredi in razredi / funkcije prijateljev .

Potrebujemo protectedčlane, če želimo skriti podatke razreda, vendar še vedno želimo, da te podatke podedujejo izpeljani razredi.

Če želite izvedeti več o zaščiti, si oglejte našo vadnico C ++ Access Modifiers.

Primer 2: C ++ zaščiteni člani

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

Izhod

Lahko jem! Lahko spim! Lahko lajam! Woof woof !! Sem sesalec Moja barva je črna

Tu je spremenljivka vrsta protectedin je tako dostopna iz izpeljanega razreda Dog. To lahko vidimo, ko smo typev Dograzredu inicializirali funkcijo setType().

Po drugi strani pa privatespremenljive barve ni mogoče inicializirati v Dog.

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

Ker protectedključna beseda skriva podatke, ne moremo dostopati do tipa neposredno iz predmeta Dogali Animalrazreda.

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

Načini dostopa v dedovanju C ++

V naših prejšnjih vadnicah smo se seznanili s specifikacijami dostopa do C ++, kot so javni, zasebni in zaščiteni.

Do zdaj smo publicključno besedo uporabljali za podedovanje razreda iz predhodno obstoječega osnovnega razreda. Vendar pa lahko tudi uporabite privatein protectedključne besede, do dedovanja razredov. Na primer

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

Različni načini pridobivanja razredov so znani kot načini dostopa . Ti načini dostopa imajo naslednji učinek:

  1. public: Če je izpeljani razred razglašen v publicnačinu, potem izpeljani razred podeduje člane osnovnega razreda, tako kot so.
  2. zasebno: v tem primeru vsi člani osnovnega razreda postanejo privatečlani izpeljanega razreda.
  3. zaščitena: Za publicčlane osnovnega razreda postanejo protectedčlani v pridobljene razred.

Za privatečlane osnovnega razreda, so vedno privatev pridobljene razred.

Če želite izvedeti več, obiščite našo javno zasebno varovano varovano dediščino C ++.

Preglasitev funkcije člana pri dedovanju

Recimo, da imata osnovni razred in izpeljani razred funkcije člana z enakim imenom in argumenti.

Če ustvarimo objekt izpeljanega razreda in poskusimo dostopati do te funkcije člana, se prikliče funkcija člana v izpeljanem razredu namesto tiste v osnovnem razredu.

Funkcija člana izpeljanega razreda preglasi funkcijo člana osnovnega razreda.

Preberite več o razveljavitvi funkcij v jeziku C ++.

Priporočeno branje: C + + večkratno dedovanje

Zanimive Članki...