Наслеђивање Ц ++

У овом упутству ћемо научити о наслеђивању у Ц ++ уз помоћ примера.

Наслеђивање је једна од кључних карактеристика објектно оријентисаног програмирања на језику Ц ++. Омогућава нам да створимо нову класу (изведена класа) од постојеће класе (основна класа).

Изведена класа наслеђује особине основне класе и може имати сопствене додатне карактеристике. На пример,

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

Овде је Dogкласа изведена из Animalкласе. Пошто Dogје изведено из Animal, чланови домена Animalсу доступни Dog.

Наслеђивање у Ц ++

Обратите пажњу на употребу кључне речи publicприликом наслеђивања пса од животиње.

 class Dog : public Animal (… );

Такође можемо користити кључне речи privateи protectedуместо public. Ми ћемо научити о разликама између употребе private, publicа protectedкасније у овом упутству.

је-однос

Наслеђивање је веза . Наслеђе користимо само ако је између две класе присутан однос ис .

Ево неколико примера:

  • Аутомобил је возило.
  • Наранџа је воће.
  • Хирург је лекар.
  • Пас је животиња.

Пример 1: Једноставни пример наслеђивања Ц ++

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

Оутпут

Ја могу јести! Могу да спавам! Могу лајати! Вооф вооф!!

Овде дог1 (објекат изведене класе Dog) може приступити члановима основне класе Animal. То је зато што Dogје наслеђено од Animal.

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

Ц ++ заштићени чланови

Модификатор приступа protectedје посебно релевантан када је у питању наслеђивање Ц ++.

Попут privateчланова, protectedчланови су неприступачни изван разреда. Међутим, могу им приступити изведене класе и класе / функције пријатеља .

protectedЧланови су нам потребни ако желимо да сакријемо податке класе, али ипак желимо да те податке наследе изведене класе.

Да бисте сазнали више о заштићеним, погледајте наш водич за Ц ++ модификаторе приступа.

Пример 2: Ц ++ заштићени чланови

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

Оутпут

Ја могу јести! Могу да спавам! Могу лајати! Вооф вооф!! Ја сам сисар Моја боја је црна

Овде је тип променљиве protectedдоступан и стога је доступан из изведене класе Dog. То можемо видети као што смо иницијализовали typeу Dogкласи помоћу функције setType().

С друге стране, privateпроменљива боја не може бити иницијализована у Dog.

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

Такође, с обзиром да protectedкључна реч скрива податке, не можемо приступити типу директно из објекта Dogили Animalкласе.

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

Режими приступа у наслеђивању Ц ++

У нашим претходним водичима научили смо о Ц ++ спецификаторима приступа као што су јавни, приватни и заштићени.

До сада смо користили publicкључну реч да бисмо наследили класу из раније постојеће основне класе. Међутим, можемо користити privateи protectedкључне речи да наследи класе. На пример,

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

Различити начини на које можемо извести класе познати су као начини приступа . Ови режими приступа имају следећи ефекат:

  1. публиц: Ако је изведена класа декларисана у publicрежиму, тада изведена класа наслеђује чланове основне класе баш као што јесу.
  2. приватно: У овом случају, сви чланови основне класе постају privateчланови изведене класе.
  3. протецтед: Тхе publicЧланови базне класе постају protectedчланови у изведеној класи.

На privateЧланови базне класе су увек privateу изведеној класи.

Да бисте сазнали више, посетите наш Ц ++ јавни, приватни, заштићени водич за наследство.

Замена функције члана у наслеђивању

Претпоставимо да основна класа и изведена класа имају функције члана са истим именом и аргументима.

Ако креирамо објекат изведене класе и покушамо приступити тој функцији члана, позива се функција члана у изведеној класи уместо оне у основној класи.

Функција члана изведене класе надјачава функцију члана основне класе.

Сазнајте више о замени функција у Ц ++.

Препоручено читање: Ц ++ Вишеструко наслеђивање

Занимљиви Чланци...