Dědičnost v C ++

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:

  1. 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.
  2. private: In this case, all the members of the base class become private members in the derived class.
  3. protected: The public members of the base class become protected 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

Zajímavé články...