Хороший способ справиться перегружать оператор +
является начинаются с +=
.
class complex {
double real
double imag;
complex& operator+=(complex const& other) {
real += other.real;
imag += other.imag;
return *this;
}
complex& operator+=(double other) {
real += other.real;
return *this;
}
};
затем записать операторы, не являющиеся членами использовать выше оператора члена:
inline complex operator+(complex left, double right) {
return left+=right;
}
inline complex operator+(double left, complex right) {
return right+=left;
}
inline complex operator+(complex left, complex const& right) {
return left+=right;
}
к сведению, что я принял по крайней мере один complex
аргумент по значению - при условии, что я возвращаюсь в complex
номер , Я мог бы также.
Приятная вещь в этом плане заключается в том, что бинарные операторы являются реальным шаблоном, причем работа выполняется в операторе члена +=
.
В C++ 11 вы можете сделать шаг дальше и автоматически записать все вышеперечисленные операторы, где он извлекает действительные типы на основе различных перегрузок operator+=
. Но это стоит того, если вы пишете много классов, которые перегружают +
.
Хрустальный шар говорит мне, что вы попали в ловушку, чтобы сделать все функции своих операторов, когда они могут быть свободными функциями. – chris