Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
То что меняю(2).doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
308 Кб
Скачать
☆

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

В об'єктно-орієнтованому програмуванні абстрактний клас – це базовий клас, від якого не можна створити екземпляру. На практиці абстрактні класи реалізують один з принципів ООП – поліморфізм. В абстрактному класі можна описати (або не визначити) абстрактні методи та властивості. Абстрактний метод не реалізовується в класі в якому описується, але має бути реалізований в неабстрактному нащадку. Абстрактні класи вважаються найбільшими узагальненими абстракціями, тобто відношення об'єму описів до об'єму реалізації найбільше. Абстрактний клас можна розглядати, як інтерфейс для сімейства класів, які ним породжені, але на противагу класичному інтерфейсу, абстрактний клас може містити реалізацію методів та властивості. Абстрактні методи переважно є і віртуальними, через це поняття «абстрактний» та «віртуальний» інколи плутають.

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

C + + - єдиний з трьох мов, що підтримує множинне успадкування.

4.4 Перевантаження функцій і операцій

Перевантаження функцій:

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

Приклад перевантаження функції:

int function(int a,int b)

{return (a+b); }

int function(int a,int b,int c)

{return ((a+b)*c); }

main()

{

cout<<”Отримані результати функції номер 1”<<function(4,5)<<endl;

cout<<”Отримані результати функції номер 2”<<function(6,7,8)<<endl;

}

Перевантаження операторів:

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

Приклад перевантаження операторів:

class mi

{ int i;

public:

int getI ()

{return i; }

mi (int v)

{i = v;}

mi operator+ (int v)

{mi i1 (i + v); return i1; }

};

int main()

{mi a (5);

mi b = a + 7;

cout << b.getI () << endl;

system("pause>>int");}

При перевантаженні операцій слід пам’ятати наступне:

  1. не можна поміняти пріоритет операцій;

  2. не можна змінити тип операції (з унарної операції не можна зробити бінарну або навпаки);

  3. перевантажена операція є членом класу і може використовуватися тільки у виразах з об'єктами свого класу;

  4. не можна створювати нові операції;

  5. заборонено перевантажувати операції:. (доступ до членів класу), унарну операцію * (значення за адресою вказівника), :: (розширення області видимості),?: (операція if);

  6. допустиме перевантаження наступних операцій: +, -, *, /,%, =, <,>, + =, - =, * =, / =, &&, ||, ++, -, (), [], new , delete.