Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция_04.pdf
Скачиваний:
8
Добавлен:
10.02.2015
Размер:
182.57 Кб
Скачать

приведены примеры перегрузки основных операторов. Создание аналогичных операторных функций для любого другого класса будет, в основном, отличаться только алгоритмом вычисления результата операции.

Определение самого классаComplex можно найти на локальном сервере в папке дисциплины «ЯиМПр».

4.3. Перегрузка основных унарных операторов

Операторы префиксного и постфиксного инкрементов и декрементов

Обе формы данных операторов удобно определять членыкак класса. Перегрузка префиксной формы таких операторов не вызывает затруднений. Для класса Complex в случае инкремента это можно сделать, например, следующим образом:

Complex &Complex::operator++()

{

m_Re += 1;

return *this; // возвращается ссылка на левый операнд –

//

объект-владелец вызова операторной функции

 

 

}

 

 

 

Перегрузка постфиксной формы требует создания в начале временного объекта класса и возврата в конце копии этого объекта:

Complex Complex::operator++(int)

{

Complex temp(*this); // локальный объект-копия операнда m_Re += 1;

return temp; // возвращается копия объекта temp

}

В отличие от префиксной формы здесьне следует использовать ссылкув качестве возвращаемого результата (почему?).

Как видно, префиксные инкремент и декремент выполняются быстрее постфиксных, т.к. не требуют двукратного копирования объектов класса.

Операторы унарного плюса и минуса

Оператор унарного плюса ничего не делает. Он нужен только для того, чтобы поддержать возможность использования унарного плюса в выражениях. Поэтому удобно сделать его встроенным внутри класса, причем так, чтобы он просто возвращал ссылку на объект-владелец. В случае класса Complex это может выглядеть так:

Complex & Complex::operator+() { return *this; }

Оператор унарного минуса создает новое значение объекта класса, противоположное по знаку по отношению к своему операнду. Т. к. оператор не изменяет объекта-владельца, то его лучше определять вне класса. В случае класса Complex это может выглядеть, например, так (оператор должен быть объявлен дружественным к классу):

Complex operator-(const Complex cz)

{

Complex temp(cz);

temp.m_Re = -temp.m_Re; temp.m_Im = -temp.m_Im; return temp;

}

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