V tomto tutoriálu se pomocí příkladů dozvíme o dědičnosti v C ++.
Dědičnost je jednou z klíčových funkcí objektově orientovaného programování v C ++. Umožňuje nám vytvořit novou třídu (odvozenou třídu) z existující třídy (základní třídy).
Odvozená třída dědí funkce ze základní třídy a může mít další vlastní funkce. Například,
class Animal ( // eat() function // sleep() function ); class Dog : public Animal ( // bark() function );
Zde je Dogtřída odvozena od Animaltřídy. Protože Dogje odvozen od Animal, členové Animaljsou přístupní Dog.
Dědičnost v C ++
Všimněte si použití klíčového slova publicpři dědění Dog from Animal.
class Dog : public Animal (… );
Můžeme také použít klíčová slova privatea protectedmísto public. Dozvíme se o rozdílech mezi použitím private, publica protecteddále v tomto výukovém programu.
je-vztah
Dědičnost je vztah typu „je“ . Dědičnost používáme pouze v případě, že je mezi dvěma třídami vztah is -a .
Zde jsou nějaké příklady:
- Auto je vozidlo.
- Oranžová je ovoce.
- Chirurg je lékař.
- Pes je zvíře.
Příklad 1: Jednoduchý příklad dědičnosti 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; )
Výstup
Můžu jíst! Mohu spát! Můžu štěkat! Haf haf !!
Zde má dog1 (objekt odvozené třídy Dog) přístup k členům základní třídy Animal. Je to proto, že Dogse dědí z Animal.
// Calling members of the Animal class dog1.eat(); dog1.sleep();
Členové chránění v C ++
Modifikátor přístupu protectedje obzvláště relevantní, pokud jde o dědičnost C ++.
Stejně jako privatečlenové protectedjsou i členové mimo třídu nepřístupní. K nim však lze přistupovat pomocí odvozených tříd a tříd / funkcí přátel .
Potřebujeme protectedčleny, pokud chceme skrýt data třídy, ale přesto chceme, aby tato data byla zděděna odvozenými třídami.
Další informace o chráněném naleznete v našem kurzu Modifikátory přístupu C ++.
Příklad 2: Členové chránění v C ++
// 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; )
Výstup
Můžu jíst! Mohu spát! Můžu štěkat! Haf haf !! Jsem savec. Moje barva je černá
Zde je typ proměnné protecteda je tak přístupný z odvozené třídy Dog. Vidíme to, jak jsme inicializovali typeve Dogtřídě pomocí funkce setType().
Na druhou stranu privateproměnnou barvu nelze inicializovat Dog.
class Dog : public Animal ( public: void setColor(string clr) ( // Error: member "Animal::color" is inaccessible color = clr; ) );
Protože protectedklíčové slovo skrývá data, nemůžeme přistupovat k typu přímo z objektu Dognebo Animaltřídy.
// Error: member "Animal::type" is inaccessible dog1.type = "mammal";
Přístupové režimy v C ++ dědičnosti
V našich předchozích výukových programech jsme se dozvěděli o specifikátorech přístupu C ++, jako jsou veřejné, soukromé a chráněné.
Dosud jsme publicklíčové slovo použili , abychom zdědili třídu od dříve existující základní třídy. Můžeme však také použít klíčová slova privatea protectedk zdědění tříd. Například,
class Animal ( // code ); class Dog : private Animal ( // code );
class Cat : protected Animal ( // code );
The various ways we can derive classes are known as access modes. These access modes have the following effect:
- public: If a derived class is declared in
publicmode, then the members of the base class are inherited by the derived class just as they are. - private: In this case, all the members of the base class become
privatemembers in the derived class. - protected: The
publicmembers of the base class becomeprotectedmembers in the derived class.
The private members of the base class are always private in the derived class.
To learn more, visit our C++ public, private, protected inheritance tutorial.
Member Function Overriding in Inheritance
Předpokládejme, že základní třída a odvozená třída mají členské funkce se stejným názvem a argumenty.
Pokud vytvoříme objekt odvozené třídy a pokusíme se o přístup k této členské funkci, je vyvolána členská funkce v odvozené třídě namísto v základní třídě.
Členská funkce odvozené třídy přepíše členskou funkci základní třídy.
Další informace o přepsání funkcí v C ++.
Doporučená literatura: C ++ Multiple Inheritance








