Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Готове ООП.doc
Скачиваний:
6
Добавлен:
07.07.2019
Размер:
671.23 Кб
Скачать
  1. Перевантаження операцій.

Перевантаження операцій. На відміну від інших мов програмування С++ допускає перевантаження операцій =, +, -, *, ==, && та інших для будь-яких типів даних. У результаті компілятор визначає типи операндів, і запускається відповідний варіант операції. Перевантажувати можна навіть операцію виклику функції. Перевантажувати оператори можна двома способами.

1. Звичайний опис функції з назвою operator знак. Наприклад:

Point operator +(Point A, Point B)

{

// тіло функції

}

Тоді вираз A+B інтерпретується як operator +(A, B).

2. Опис у тілі класу методу з тією самою назвою. Тоді викликається метод для першого операнда, і йому як аргументи передаються інші операнди:

class Point

{

// тіло класу

Point operator +(Point p);

};

У цьому випадку вираз A+B інтерпретується як A.operator +(B).

Деякі операції — такі як =, new, delete, можна перевантажувати тільки другим способом.

  1. Види класів.

  • Клас, як основа ООП, володіючи строгою структурою, може бути:

  • попердньо-оголошеними

  • похідним або базовим. Похідний клас (derived class) є клас, який породжений від базового (батьківського, base class) з унаслідуванням властивостей останнього.

  • протокласом. Протоклас (protoclass) є одним із різновидів батьківських класів. Це важливий вид класу у теорії проектування програмних систем.

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

  • віртуальним. Віртуальні базові класи (virtual base class) є однією з основ побудови складних ієрархій класів. · поліморфічним. Поліморфним класом (polymorphic class) є клас, який містить принаймні одну віртуальну функцію.

  • класом-шаблони. Клас-шаблон (template class) є формалізованим записом, за яким можна оголошувати множини класів. Шаблони є основою побудови бібліотек класів.

  • порожнім класом. Клас може не містити жодного члена. Такий клас називається порожнім (empty class). С++ допускає оголошення порожнього класу і створення об'єктів таких класів, наприклад class A{} ; A a;

  • дружнім класом (friend class).

  • вкладеним класом. Клас оголошений всередині іншого класу називається вкладеним (member class).

  1. Одинарне наслідування класів.

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

  • Рекомендується наслідувати максимальну кількість характеристик. Це суттєво зменшує обсяг коду, полегшує відлагодження та зменшує кількість синтаксичних і логічних помилок.

  • Не успадковуються

  • конструктори та деструктори;

  • конструкції створені за допомогою оператора new;

  • перевантажений оператор присвоєння;

  • властивість дружності.

  1. Множинне наслідування класів.

Множинне наслідування

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

  • Неявним множинним наслідуванням можуть бути випадки змішаного наслідування. Результатом цих наслідувань є ієрархія, в якій похідний клас неявно (через один проміжний) успадкував характеристики двох базових класів.

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

  • class Ім'я_пох_класу:[модифікатор] Ім'я_баз_класу_1, ..., [модифікатор] Ім'я_баз_класу_N {тіло класу};

  • наприклад

  • class A {тіло класу A}; class B{тіло класу B};

  • class C: public A,B {}; // клас C породжений від A i B

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

  • #include <iostream>

  • output(char* c) {std::cout << c;}

  • class A

  • {

  • public:

  • show(){output("Клас A ");}

  • };

  • class B

  • {

  • public:

  • show(){output("Клас B ");}

  • };

  • // клас C породжений від A i B

  • class C: public A, public B

  • {

  • public:

  • void show()

  • {A::show(); B::show();output("Клас C");}

  • };

  • main()

  • {

  • C c; c.show();

  • }