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 Dog
třída odvozena od Animal
třídy. Protože Dog
je odvozen od Animal
, členové Animal
jsou přístupní Dog
.
Všimněte si použití klíčového slova public
při dědění Dog from Animal.
class Dog : public Animal (… );
Můžeme také použít klíčová slova private
a protected
místo public
. Dozvíme se o rozdílech mezi použitím private
, public
a protected
dá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 Dog
se dědí z Animal
.
// Calling members of the Animal class dog1.eat(); dog1.sleep();
Členové chránění v C ++
Modifikátor přístupu protected
je obzvláště relevantní, pokud jde o dědičnost C ++.
Stejně jako private
členové protected
jsou 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é protected
a je tak přístupný z odvozené třídy Dog
. Vidíme to, jak jsme inicializovali type
ve Dog
třídě pomocí funkce setType()
.
Na druhou stranu private
proměnnou barvu nelze inicializovat Dog
.
class Dog : public Animal ( public: void setColor(string clr) ( // Error: member "Animal::color" is inaccessible color = clr; ) );
Protože protected
klíčové slovo skrývá data, nemůžeme přistupovat k typu přímo z objektu Dog
nebo Animal
tří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 public
klíč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 private
a protected
k 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
public
mode, 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
private
members in the derived class. - protected: The
public
members of the base class becomeprotected
members 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