2010-03-21 28 views
6

W przypadku przeciążenia - jak operator-(), należy go użyć po lewej stronie obiektu, jednak przeciążenie() takie jak operator()() jest używane z prawej strony obiektu. Skąd wiemy, który operator ma być używany po lewej, a który z prawej?Przeciążanie operatora w C++

+2

To prosta odpowiedź, ale z perspektywy kogoś nowego w programowaniu mogę sobie wyobrazić, że może to być źródłem wielu bólów głowy. +1 –

Odpowiedz

3

Spójrz na operator precedence chart. Dzięki temu dowiesz się, w którym kierunku pracuje operator (wiąże). Należy zauważyć, że niektórzy operatorzy mają wiele formularzy o różnych znaczeniach, takich jak binarne i unarne -. W takich przypadkach można mieć wiele przeciążeń, np .:

T operator-() 

i:

T operator-(const T &o) 

Kompilator wybiera właściwy na podstawie składniowej interpretacji operatora.

Zobacz także przydatny set of guidelines.

+0

Czy operator-() naprawdę nic nie zwraca - czy nie powinien zwracać wartości odpowiedniego typu, która jest albo negacją wartości, albo różnicą między wartościami? –

+0

Dzięki za złapanie tego, Jonathan. Naprawiono teraz. –

1

Większość jednoargumentowych operatorów może być umieszczona tylko po określonej stronie ich operandu. W przypadku dwóch specjalnych przypadków: ++ i --, zobacz this FAQ.

Powiązane problemy