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

лекции программирование / polevoy_cpp_2012_spring_lecture_02

.pdf
Скачиваний:
26
Добавлен:
20.04.2015
Размер:
101.19 Кб
Скачать

Префиксные и постфиксные операторы (сигнатуры)

• префиксный оператор

T& operator++()

T& operator--()

• постфиксный оператор

T operator++(int)

T operator--(int)

18.02.2012

cppNewb.ru

31

Префиксный унарный оператор (пример)

T&

T::operator++()

{

// содержательная работа

return *this;

}

18.02.2012

cppNewb.ru

32

Постфиксный унарный оператор (пример)

T

T::operator++(int)

{

T initValue(*this)

++(*this);

return initValue;

}

18.02.2012

cppNewb.ru

33

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

• выражение aa @ bb

нестатическая функция-член с одним аргументом

aa.operator@(bb)

• функция-не-член с двумя аргументами

operator@(aa, bb)

18.02.2012

cppNewb.ru

34

Ограничения

нельзя создать “новый” оператор

нельзя изменить число аргументов

нельзя изменить приоритет

18.02.2012

cppNewb.ru

35

Предопределенный смысл

должен сохраняться

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

пример:

a++

означает

a += 1

означает

a = a + 1

18.02.2012

cppNewb.ru

36

Сохранение смысла

для автономных версий операторов a@b всегда предоставляйте присваивающую версию @=

для операторов, допускающих перестановку аргументов, предоставляйте все соответствующие версии

18.02.2012

cppNewb.ru

37

Принцип минимальности интерфейса

минимизируйте число функций, непосредственно манипулирующих представлением объекта

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

18.02.2012

cppNewb.ru

38

Минимальность интерфейса (пример)

• в классе

T& operator+=(const T& rhs)

• вне класса

T operator+(const T& lhs, const T& rhs)

{

T sum(lhs); sum += rhs; return sum;

}

18.02.2012

cppNewb.ru

39

Перегрузка операторов (рекомендации)

перегружайте умеренно и осмысленно

используйте операторы для имитации привычной формы записи

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

минимизируйте создание временных

объектов

18.02.2012

cppNewb.ru

40