У цьому підручнику ми дізнаємося про успадкування в C ++ за допомогою прикладів.
Спадкування є однією з ключових особливостей об’єктно-орієнтованого програмування на C ++. Це дозволяє нам створити новий клас (похідний клас) з існуючого класу (базовий клас).
Похідний клас успадковує ознаки базового класу і може мати власні додаткові функції. Наприклад,
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
пізніше в цьому керівництві.
є-відносини
Спадщина - це відносини . Ми використовуємо успадкування лише в тому випадку, якщо між цими двома класами існує зв'язок is -a .
Ось кілька прикладів:
- Автомобіль - це транспортний засіб.
- Апельсин - це фрукт.
- Хірург - це лікар.
- Собака - це тварина.
Приклад 1: Простий приклад успадкування 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; )
Вихідні дані
Я можу їсти! Я можу спати! Я можу гавкати! Woof woof !!
Тут dog1 (об'єкт похідного класу Dog
) може отримати доступ до членів базового класу Animal
. Це тому Dog
, що передається у спадок від Animal
.
// Calling members of the Animal class dog1.eat(); dog1.sleep();
Захищені члени C ++
Модифікатор доступу protected
особливо актуальний, коли мова йде про успадкування С ++.
Як і private
члени, protected
учасники недоступні поза класом. Однак до них можуть отримати доступ похідні класи та класи / функції друзів .
Нам потрібні protected
члени, якщо ми хочемо приховати дані класу, але все ж хочемо, щоб ці дані успадковувались похідними класами.
Щоб дізнатись більше про захищений, зверніться до нашого підручника з модифікаторів доступу C ++.
Приклад 2: Захищені члени 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; )
Вихідні дані
Я можу їсти! Я можу спати! Я можу гавкати! Woof woof !! Я ссавець Мій колір чорний
Тут тип змінної є 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";
Режими доступу у спадщині C ++
У наших попередніх навчальних посібниках ми дізналися про специфікатори доступу до C ++, такі як загальнодоступний, приватний та захищений.
Наразі ми використовували public
ключове слово для того, щоб успадкувати клас від раніше існуючого базового класу. Однак ми також можемо використовувати ключові слова private
і protected
для успадкування класів. Наприклад,
class Animal ( // code ); class Dog : private Animal ( // code );
class Cat : protected Animal ( // code );
Різні способи отримання класів відомі як режими доступу . Ці режими доступу мають такий ефект:
- public: Якщо похідний клас оголошено в
public
режимі, тоді члени базового класу успадковуються похідним класом так само, як вони. - private: У цьому випадку всі члени базового класу стають
private
членами похідного класу. - захищений: В
public
члени базового класу стаютьprotected
членами в похідному класі.
В private
члени базового класу завжди private
в похідному класі.
Щоб дізнатись більше, відвідайте наш загальнодоступний приватний підручник із захищеною спадщиною на C ++.
Заміна функції члена у спадщині
Припустимо, базовий клас і похідний клас мають функції-члени з однаковими іменами та аргументами.
Якщо ми створимо об'єкт похідного класу і спробуємо отримати доступ до цієї функції-члена, функція-член у похідному класі буде викликана замість тієї, що в базовому класі.
Функція-член похідного класу замінює функцію-член базового класу.
Дізнайтеся більше про перевизначення функцій у C ++.
Рекомендована література: Множинне успадкування C ++