Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OOP_Посібник (1).doc
Скачиваний:
8
Добавлен:
01.05.2019
Размер:
544.77 Кб
Скачать

Файл реалізації “Stack.Cpp”

Конструктор Link::Link() присвоює вказівник на об’єкт змінній data та вказівник на наступний елемент next. Рядок head = new Link(dat,head) в функції Stack::push створює новий елемент Link та додає його до стеку.

Зауваження: деструктор ~Link не звільняє місця в пам’яті тому що, по-перше, оператор delete не може звільнити правильно вказівник на void, по-друге, якщо звільняти місце в деструкторі, то функція-член pop повертала б вказівник на об’єкт, який вже знищено, і це було б помилкою.

§12. Успадкування

Ще один спосіб використання існуючих класів при побудові нових – це успадкування.

Успадкування дозволяє, практично без обмежень, послідовно будувати і розширювати класи. Починаючи з найпростіших класів, можна створювати похідні класи ускладнюючи, розширюючи, обмежуючи їх.

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

При успадкуванні базовий клас набуває нові атрибути і функції. У похідному класі звичайно з'являються нові члени даних. При роботі з об'єктами програміст звичайно підбирає найбільш придатний клас для розв’язання конкретної задачі і створює один чи декілька нащадків від нього, розширюючи можливості батьківських класів. Дружні функції дозволяють похідному класу одержати доступ до всіх членів даних зовнішніх класів.

Крім того, похідний клас може перезавантажувати (overload) наслідувані функції–члени в тому випадку, коли їхня робота в базовому класі не підходить нащадку.

C++ дає можливість оголосити похідний клас, що успадковує дані та функції усіх своїх попередників в ієрархії класів, а також може оголошувати нові характеристики і перезавантажувати деякі з наслідуваних функцій. Успадковуючи зазначені характеристики базового класу, можна змусити породжений клас розширити, звузити, змінити чи знищити їх або залишити їх без змін.

Успадкування дозволяє повторно використовувати код базового класу в екземплярах похідного класу.

Синтаксис оголошення похідного класу

Порядок перерахування секцій відповідає розширеним привілеям захисту й областей видимості розташованих в них елементів: від найбільш обмежених ­– до самих доступних.

class className : [специфікатор доступу] parentClass

{

<0голошення дружніх класів >

private:

<приватні члени–дані>

<приватні конструктори>

<приватні члени–функції >

protected:

<захищені члени–дані>

<захищені конструктори>

<захищені члени–функції>

public:

<загальнодоступні члени–дані>

<загальнодоступні конструктори>

<загальнодоступний деструктор>

<загальнодоступні члени–функції>

<Оголошення дружніх функцій>

};

ParentClass – базовий клас, className – клас-нащадок базового класу.

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

Коли клас породжується від базового, усі його імена в похідному класі автоматично стають приватними за замовчуванням. Але це легко змінити, вказавши наступні специфікатори доступу базового класу:

private. Наслідувані (тобто захищені і загальнодоступні) імена базового класу стають недоступними в екземплярах похідного класу.

public. Загальнодоступні імена базового класу і його попередників будуть доступними в екземплярах похідного класу, а всі захищені залишаться захищеними.

Можна породжувати класи, що розширюють можливості базового класу. Для цього треба перевизначити в похідному класі ту функцію базового класу, яку необхідно змінити. Подібним чином можна породжувати класи, що обмежують можливості базового класу.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]