Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Oop4.pdf
Скачиваний:
11
Добавлен:
02.02.2015
Размер:
202.37 Кб
Скачать

Перевизначені оператори

Перевизначені оператори використовуються також для збереження семантики мови С++. Як Ви пам’ятаєте із попередньої роботи наступна операція приводила до помилки виконання програми:

CSmsMessage smsMessage( "message text", "1234567" );

CSmsMessage anotherMessage( "another text", "4567890" ); anotherMessage = smsMessage; // ПОМИЛКА присвоєння покажчиків

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

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

Оператор може бути визначений наступним чином:

public:

/**

*Перевизначений оператор для присвоєння даних об'єкту

*@param aSmsMessage Об’єкт повідомлення

*@return Посилання на самого себе для збереження семантики А=Б=В;

*/

CSmsMessage& operator=(const CSmsMessage& aSmsMessage);

Реалізація такого оператору може мати наступний вигляд:

CSmsMessage& CSmsMessage::operator=(const CSmsMessage& aSmsMessage)

{

SetReceiver( aSmsMessage.Receiver() ); SetText( aSmsMessage.Text() );

return *this;

}

Таким чином, видно, що в самому операторі виконується копіювання даних. Зверніть увагу, що оператор повертає посилання на свій об’єкт. Це потрібно для використання семантики мови С++ для оператора присвоєння А=Б=В=Д;

Завдання на лабораторну роботу

Створити новий клас і визначити оператор += для накопичення існуючих об'єктів. Визначити клас Utils із допоміжною функцією визначення максимуму із пари об'єктів

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

 

 

Індивідуальне завдання

Тематика

Класи

1

Комп’ютер

Визначити метод Utils::Max для обробки ціни

 

 

моніторів

Тематика

Класи

2

Дім

Визначити метод Utils::Min для обробки площи

 

 

будівль.

3Місто-вулиця-дім. Визначити метод Utils::Max для обробки площи

 

 

міст.

4

Комп’ютерна мережа

Визначити метод Utils::Sum для обробки вартості

 

 

кабеля.

5

Бібліотека

Визначити метод Utils::Sum для обробки

 

 

загального об'єму фондів бібліотек.

6

Кімната

Визначити метод Utils::Max для обробки площи

 

 

кімнат.

7

Шафа

Визначити метод Utils::Max для обробки вартості

 

 

замків.

8

Автомобіль

Визначити метод Utils::Max для обробки вартості

 

 

двигуна.

9

Операційна система

Визначити метод Utils::Min для обробки часу

 

 

написання файлової системи.

10

Віконний додаток

Визначити метод Utils::Max для обробки площи,

 

 

що займає елемент управління на екрані.

11

Планета, політична

Визначити метод Utils::Max для обробки площи

 

карта світу.

океанів.

12

Сонячна система

Визначити метод Utils::Min для обробки ваги

 

 

планет.

13

Група факультету

Визначити метод Utils::Min для обробки

 

 

екзаменаційних оцінок.

14

ВНЗ

Визначити метод Utils::Max для обробки стажу

 

 

роботи викладачів.

15

Деканат

Визначити метод Utils::Max для обробки стажу

 

 

роботи працівників деканату.

Література

1.Г. Буч. Объектно – ориентированный анализ и проектирование с примерами приложений на С++, 2-е изд./ Пер. с англ. – М.: "Издательство Бином". 1998 г. – 560 с., ил.

2.Павловская Т.А., Щупак Ю.А. С++. Объектно-ориентированное программирование: Практикум. – СПб.: Питер,2004 -288 с.

3.Павловская Т.А., Щупак Ю.А. С++. Структурное программирование: Практикум. – СПб.: Питер,2003 -240 с.

4.Павловская Т.А.С/С++ Программирование на языке высокого уровня. – СПб.: Питер,2007 -461 с.

5.Х.М.Дейтел., П.Дж.Дейтел. Как программировать на Си++. М .: ЗАО БИНОМ, 1999, 1000 с.

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