Спадкування в с спадкування



Спадкування в С ++

спадкування

    • Спадкування - це механізм отримання нового класу на основі вже існуючого. Існуючий клас може бути доповнений або змінений для створення нового класу.
    • Людина
    • працівник Студент
    • Викладач Співробітник Стаціонар Заочник
    • штатник Сумісник
    • Ієрархічна структура успадкування


Навіщо потрібно спадкування

class ім'я_класу. спісок_базових_классов

Повторне використання коду - використання класу для створення об'єктів і в якості базового для створення нового класу

Побудова ієрархії класів дозволяє виконати упорядкування класів

При спадкуванні можна розширити характеристики класу, звузити їх, змінити або знищити



Доступ при спадкуванні



Доступ при спадкуванні



просте спадкування

Чи не успадковуються:

  • конструктори;
  • деструктори;
  • Перевизначені операції new;
  • Перевизначені операції присвоювання;
  • відносини дружності


просте спадкування

Клас має один базовий клас



Порядок виклику конструкторів - від базового класу (First, Second, Third)



Порядок виклику деструкторів - в зворотному порядку



Правила спадкування різних методів

Конструктори не успадковуються, тому похідний клас повинен мати власні конструктори

Якщо в конструкторі похідного класу явний виклик конструктора базового класу відсутній, то викликається конструктор базового класу за замовчуванням

При багаторівневої ієрархії виклик конструкторів починається з самого верхнього рівня

Якщо клас містить об'єкти іншого класу, то спочатку викликаються конструктори членів класу, а потім конструктор класу

Чи не успадковується операція присвоювання. Її треба явно визначити в похідному класі.

Деструктори не успадковуються. Якщо деструктор в похідному класі не визначений, то він формується за замовчуванням і викликає деструктори базових класів, причому в порядку, зворотному виклику конструкторів.



Поліморфізм. Віртуальні функції

Пізніше або динамічне зв'язування

class Base

virtual void print ()

dp -> print (); // dir

p -> print (); // dir



Ієрархія класів, яка визначена відкритим спадкуванням, створює родинний набір призначених для користувача типів, на всі об'єкти яких може вказувати покажчик базового класу. Вибір того, яку віртуальну функцію викликати залежатиме від типу об'єкта, на який фактично (в момент виконання програми) спрямований покажчик, а не від типу покажчика.

Ієрархія класів, яка визначена відкритим спадкуванням, створює родинний набір призначених для користувача типів, на всі об'єкти яких може вказувати покажчик базового класу. Вибір того, яку віртуальну функцію викликати залежатиме від типу об'єкта, на який фактично (в момент виконання програми) спрямований покажчик, а не від типу покажчика.



Поліморфізм. Віртуальні функції

class Base

protected: int h, r;

Base (int a, int b): h (a), r (b) <>

virtual double f1 () // V циліндра

void f2 ()

Абстрактні класи Чисті віртуальні функції

Абстрактним називається клас, в якому є хоча б одна чиста (порожня) віртуальна функція.

Чистої віртуальної називається компонентна функція, яка має наступне визначення:

virtual тип імя_функциі (спісок_формальних_параметров) = 0;

Чистий віртуальна функція нічого не робить і недоступна для викликів. Її призначення - служити основою для підміняють її функцій в похідних класах.

Абстрактний клас може використовуватися тільки в якості базового для похідних класів.

У порівнянні зі звичайними класами абстрактні класи користуються "обмеженими прав". А саме:

неможливо створити об'єкт абстрактного класу;

абстрактний клас не можна вживати для завдання типу параметра функції або типу, що повертається функцією значення;

абстрактний клас не можна використовувати при явному приведення типів; в той же час можна визначити покажчики і посилання на абстрактний клас.

об'єкт абстрактного класу не може бути формальним параметром функції, однак формальним параметром може бути покажчик на абстрактний клас.



Абстрактні класи Чисті віртуальні функції



Абстрактні класи та успадкування

class Person



множинне спадкування



Виклик конструкторів базових класів



Особливості множинного спадкоємства



Віртуальні базові класи



Порядок виклику деструкторів при використанні віртуальних базових класів

Виклик деструкторов - в зворотному порядку





дозвіл видимості

Схожі статті