У овом упутству ћемо научити о наслеђивању у Ц ++ уз помоћ примера.
Наслеђивање је једна од кључних карактеристика објектно оријентисаног програмирања на језику Ц ++. Омогућава нам да створимо нову класу (изведена класа) од постојеће класе (основна класа).
Изведена класа наслеђује особине основне класе и може имати сопствене додатне карактеристике. На пример,
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 );
Различити начини на које можемо извести класе познати су као начини приступа . Ови режими приступа имају следећи ефекат:
- публиц: Ако је изведена класа декларисана у
public
режиму, тада изведена класа наслеђује чланове основне класе баш као што јесу. - приватно: У овом случају, сви чланови основне класе постају
private
чланови изведене класе. - протецтед: Тхе
public
Чланови базне класе постајуprotected
чланови у изведеној класи.
На private
Чланови базне класе су увек private
у изведеној класи.
Да бисте сазнали више, посетите наш Ц ++ јавни, приватни, заштићени водич за наследство.
Замена функције члана у наслеђивању
Претпоставимо да основна класа и изведена класа имају функције члана са истим именом и аргументима.
Ако креирамо објекат изведене класе и покушамо приступити тој функцији члана, позива се функција члана у изведеној класи уместо оне у основној класи.
Функција члана изведене класе надјачава функцију члана основне класе.
Сазнајте више о замени функција у Ц ++.
Препоручено читање: Ц ++ Вишеструко наслеђивање