2010-03-21 3 views
6

Если вы перегружаетесь - как operator-(), он должен использоваться слева от объекта, однако перегрузка(), как operator()(), используется справа от объекта. Как мы узнаем, какой оператор должен использоваться слева, а какие - справа?Перегрузка оператора в C++

+2

Это простой ответ, но с точки зрения кого-то нового для программирования я могу себе представить, что это может стать источником большой головной боли. +1 –

ответ

3

Посмотрите на operator precedence chart. Это скажет вам направление, которое оператор связывает (связывает). Обратите внимание, что некоторые операторы имеют несколько форм с разными значениями, например двоичный и унарный -. В таких случаях, вы можете иметь несколько перегруженных, например .:

T operator-() 

и:

T operator-(const T &o) 

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

См. Также это полезное set of guidelines.

+0

Действительно ли оператор-() «ничего не возвращает», не должен ли он возвращать значение соответствующего типа, которое является либо отрицанием значения, либо разницей между значениями? –

+0

Спасибо, что поймали это, Джонатан. Исправлено. –

1

Большинство унарных операторов можно разместить только на определенной стороне их операнда. Для двух особых случаев: ++ и --, см. this FAQ.