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

Zaochniki / defoper

.pdf
Скачиваний:
5
Добавлен:
13.02.2016
Размер:
217.96 Кб
Скачать

Бинарный оператор

Передача параметров бинарному оператору (1)

Бинарный оператор как функция член класса

В этом случае у функции должен быть 1 явный аргумент правый операнд передается через него, а левый с помощью указателя this.

Пример:

 

 

c l a s s

A {

p u b l i c :

A&

operator +=( const A& r h s ) ;

} ;

 

 

 

 

 

При этом следующие вызовы эквивалентны:

A a . b ;

a+=b ; a . operator +=(b ) ;

Бинарный оператор

Передача параметров бинарному оператору (2)

Бинарный оператор как функция не-член класса

В этом случае у функции должно быть 2 явных аргумента оба операнда передается явно.

Пример:

c l a s s A { p u b l i c :

f r i e n d const A operator +( const A& l h s , const A& r h s ) ;

} ;

При этом следующие вызовы эквивалентны:

 

A

a ,

b ,

c ;

 

 

 

 

c

=

a+b ;

c = operator +(a , b ) ;

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Автоматически создаваемые операторы

Компилятор создаст сам, если не задал пользователь

Автоматически создаются функции для следующих операторов

= // вызываются операторы ` `= ' '

// для в с е х подобъектов

&// возвращает адрес объекта

Правило

Если объект захватывает ресурсы (память, файлы), то у него должен быть определен оператор присваивания (также как конструктор копирования и деструктор). Можно запретить присваивание, описав оператор в private и не дав его определения.

Передача аргументов

По ссылке или по значению

Передача по ссылке

Передача больших объектов по ссылке дешевле, чем по значению. Если оператор не должен изменять аргумент, то следует использовать ссылку на константный объект.

Передача по значению

Если содежимое объекта мало (например один int или double), то имеет смысл передавать по значению.

Возврат значения

По ссылке или по значению

Возврат по ссылке

Возврат больших объектов по ссылке дешевле, чем по значению. Если результат содержится в одном из операндов, то можно вернуть ссылку на этот операнд.

Возврат по значению

Если результат не содержится ни в одном из операндов, то приходится возврашать объект по значению (может быть по константному значению).

Правило

Если сомневаешся, как получать аргументы или возвращать значение делай так, как это сделано для фундаментальных типов.

Соседние файлы в папке Zaochniki