Спадкування, похідні класи.
Завантажити презентаціюПрезентація по слайдам:
Спадкування, похідні класи. Спадкування – це один з основних принципів об'єктно-орієнтованого програмування, який дозволяє створювати об'єкти, що спадкують свої властивості від існуючих об'єктів, додаючи власної функціональності. Похідний та базовий клас пов’язані співвідношенням «Є» («is-a») : якщо SubBase – похідний клас від класу Base, то SubBase Є Base. Синтаксис визначення похідного класу: class SubBase : Base { // тіло похідного класу };
Деякі правила спадкування. Похідний клас спадкує (містить) всі відкриті (public) та захищені (protected) члени базового класу. Закриті (private) члени базового класу недоступні у похідному. Конструктори та деструктор не спадкуються похідним класом. При створенні екземпляру похідного класу автоматично викликається конструктор базового класу і лише потім конструктор похідного. При знищенні екземпляру деструктори викликаються у зворотному порядку. Якщо у похідному класі відсутній безпосередній виклик конструктора базового класу, то викликається конструктор за умовчанням (без параметрів) базового класу. В разі його відсутності виникає помилка. Не спадкується також операція присвоєння, якщо вона була перевантажена у базовому класі.
Доступ до членів класу при різних видах спадкування Види спадкування (не використовувались в мові С#) та доступ до членів базового класу у похідному класі зазначені у наступній таблиці: Вид спадкування Доступ у базовому класі Доступ у похідному класі public private protected public не доступний protected public protected private protected public не доступний protected protected private (діє за умовчанням) private protected public не доступний private private
Приклад. class Base { protected : // закриті члени класу double money; int key; public : // відкриті члени класу Base (double money_ = 1000, int key_ = 1): money (money_), key (key_) {cout
Виклик конструктора базового класу. class Base { protected : // закриті члени класу double money; int key; public : // відкриті члени класу Base (double money_ = 1000, int key_ = 1): money (money_), key (key_) { } double show_money () {return money;} int show_key () {return key;} }; class SubBase : public Base { public : // Тут явно викликається конструктор базового класу SubBase (double money_, int key_): Base(money_, key_) { } };
Зміна доступу до членів базового класу у похідному класі. Оголошення доступу у похідних класах дають можливість: зробити знову відкритими або захищеними відповідно захищені або відкриті члени базового класу у похідному класі; зробити знову відкритими відкриті члени базового класу у закритому або захищеному похідному класі;
Приклад. class Base { private : // закриті члени базового класу double money; protected : // захищені члени базового класу int key; public: char symb; }; class SubBase : public Base { public : Base :: key; // захищений член базового класу – // тепер відкритий у похідному Base :: money; // Помилка! В похідному класі немає // доступу до закритого члена базового класу protected : Base :: symb; // у похідному класі він захищений };
Приклад. class Base { private : // закриті члени базового класу double money; protected : // захищені члени базового класу int key; public: char symb; }; class SubBase : protected Base { public : Base :: key; // захищений член базового класу – // тепер відкритий у похідному Base :: symb; // знову відкритий у похідному класі };
Схожі презентації
Категорії