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 Dog
razred izpeljan iz Animal
razreda. Ker Dog
izhaja iz Animal
, so člani Animal
domene dostopni Dog
.
![](https://cdn.wiki-base.com/8141271/c_inheritance.png.webp)
Upoštevajte uporabo ključne besede public
pri dedovanju psa od živali.
class Dog : public Animal (… );
Uporabljamo lahko tudi ključne besede private
in protected
namesto public
. Spoznali bomo o razlikah med uporabo private
, public
in protected
pozneje 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 Dog
je podedovano od Animal
.
// Calling members of the Animal class dog1.eat(); dog1.sleep();
C ++ zaščiteni člani
Modifikator dostopa protected
je š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 protected
in je tako dostopna iz izpeljanega razreda Dog
. To lahko vidimo, ko smo type
v Dog
razredu inicializirali funkcijo setType()
.
Po drugi strani pa private
spremenljive 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 protected
ključna beseda skriva podatke, ne moremo dostopati do tipa neposredno iz predmeta Dog
ali Animal
razreda.
// 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 public
ključno besedo uporabljali za podedovanje razreda iz predhodno obstoječega osnovnega razreda. Vendar pa lahko tudi uporabite private
in protected
ključ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:
- public: Če je izpeljani razred razglašen v
public
načinu, potem izpeljani razred podeduje člane osnovnega razreda, tako kot so. - zasebno: v tem primeru vsi člani osnovnega razreda postanejo
private
člani izpeljanega razreda. - zaščitena: Za
public
člane osnovnega razreda postanejoprotected
člani v pridobljene razred.
Za private
člane osnovnega razreda, so vedno private
v 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