Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

10 перегрузка

.pdf
Скачиваний:
14
Добавлен:
27.03.2015
Размер:
414.07 Кб
Скачать

10–1

5.ПЕРЕГРУЗКА ОПЕРАЦИЙ

5.1.Основы перегрузки операций

Перегруженная операция = Перегруженный оператор = Функция-операция (ФО)

ФО ≡ имя_ФО (список_параметров) { тело_ФО } имя_ФО ≡ operator ЗнакОперации

10–2

5.2.Ограничения на перегрузку операций

1)Нельзя перегружать операции:

 

 

 

Опреде-

Дирек-

Точка

РОД

Условный

ление

тивы

 

 

оператор

размера

препро-

 

 

 

данных

цессора

.

::

?:

sizeof

все

 

 

 

 

 

10–3

2)Старшинство операций

3)Ассоциативность операций

4)Значения параметров по умолчанию

5)Неизменность числа операндов

6)Можно перегружать только существующие операции

7)Нельзя перегружать операции для операндов стандартных типов

10–4

5.3. Функции-операции как элементы класса и как функции-друзья класса

Перегрузка операций (), [], –>, = допустима только в виде ФЭ класса

Если ФО есть ФЭ класса, то ее левый (или

единственный) операнд должен быть

объектом или ссылкой на объект этого же

класса

10–5

Пример:

ПО << должен иметь левый операнд типа ostream &

ПО >> должен иметь левый операнд типа istream &

Поэтому данные ПО не могут быть ФЭ класса и объявляются как функциидрузья класса.

10–6

5.4. Перегрузка операций обмена с потоком

Пример:

ПО >> для класса Phone:

istream & operator>>(istream &input, Phone &num)

{

...

// основная часть ФО

return input;

 

}

10–7

Когда компилятор встречает выражение cin >> p;

где p – объект класса Phone, он генерирует вызов ФО

operator>>(cin, p);

Параметр input становится псевдонимом объекта cin класса istream, а параметр num

– псевдонимом объекта p класса Phone.

10–8

ФО выполняет ввод из потока в объект p, а также возвращает ссылку input типа istream , что позволяет сцеплять операции ввода из потока для объектов класса:

cin >> p1>> p2;

Сначала выполняется выражение cin >> p1;

посредством вызова ФО operator>>(cin, p1);

10–9

ФО возвращает ссылку на cin как значение выражения

cin >> p1;

Оставшаяся часть исходного выражения рассматривается как выражение

cin >> p2;

и выполняется посредством вызова ФО operator>>(cin, p2);

10–10

ПО << для класса Phone:

ostream & operator<<(ostream &output, Phone &num)

{

...

return output;

}

Рассмотреть самостоятельно !

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