Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курс лекцій.doc
Скачиваний:
15
Добавлен:
03.11.2018
Размер:
1.12 Mб
Скачать

10.3.6 Перевантаження оператора присвоювання.

Повернемось до проблеми , яка виникає при присвоюванні об’єктів. Ця проблема легко розв’язується за допомогою перевантаження оператора присвоювання.

class intarray{

int size;

int *ar;

public:

intarray(int size)

{ ar=new int[anintarray. size];}

void operator=(const intarray & anintarray)

{ ar=new int[anintarray.size];

for(int i=0;i<size;i++) ar[i]=anintarray.ar[i]; }

};

Тоді в main() - функції можемо написати:

main()

{ intarray a(100);

intarray b=a;}

Контрольні запитання

1. Як синтаксично реалізоване перевантаження операцiй?

2. Чи може перевантажена функцiя член мати перший параметр-елемент основного типу?

3. В чому відмінність перевантажених операцій-членів класу та друзів класу ?

4. Як реалізована можливість роботи з різнотипними даними в С++ ?

5. Що таке асоціативний масив і як він утворюється ?

6. Як перегружається оператор виклику функції ?

7. В чому специфіка перегрузки оператора доступу до члена класу ?

8. Чи можна розрізнити постфіксну та інфіксну форми операторів інкремента та декремента під час перегрузки ?

9. Як перевантажуються оператори управління пам’яттю?

10. Де може бути корисним перевантажений оператор присвоювання ?

Завдання 10:

1. Перевантаживши операції < > , написати функцію сортування масиву об’єктів за деякими ознаками його полів :

а) в порядку зростання(спадання) значень одного з полів типу char, int ,float чи double ;

б) в порядку лексикографічної впорядкованості полів типу *char;

в) вважаючи, що клас має два поля p1 та p2 типу double, ввести відношення часткового порядку наступним чином:

a>b якщо a.p1>b.p1 або a.p1==a.p2 && a.p1>b.p2

та впорядкувати масив;

г) ввести відношення часткового порядку,аналогічне п.в), для n елементів, вважаючи, що відповідні поля записані у вигляді масиву

2. Протестувати приклад з класом BrandNew, дописавши конструкції, яких не вистачає для корректної роботи програми.

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

4. Протестувати приклад з класом a_iterator.

5. Перевантажити оператори new-delete для класу Complex так, щоб вони обробляли вимоги у виділенні пам’яті довільного розміру.

6. С++ не перевіряє автоматично під час виконання ситуацію виходу індекса за границю масива. Розробити тип даних масив, який виконує перевірку границь.

7. Написати тип string , що має ряд специфічних властивостей (наприклад, лічильник звернень, перегружені оператори +,-, приведення типу тощо).

8. Реалізувати загальний клас - ітератор списку, який має операції повернення слідуючого елемента, попереднього елемента та голови списку.

9. Розробити тип даних гістограма , перегрузивши оператор індексування масиву для індексації з плаваючими аргументами.

10. Розробити двозв’язний список, реалізація якого використовує лише один зв’язаний вказівник. Включити в розробку ітератор, який може проходити список в будь-якому напрямі.

11 ШАБЛОНИ С++.

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

Шаблони С++ часто називають параметризованими типами. Вони дозволяють компiлювати новi класи чи функцiї, задаючи типи в якостi параметрiв.