class A {
public:
string operator+(const A& rhs) {
return "this and A&";
}
};
string operator+(const A& lhs, const A& rhs) {
return "A& and A&";
}
string operator-(const A& lhs, const A& rhs) {
return "A& and A&";
}
int main() {
A a;
cout << "a+a = " << a + a << endl;
cout << "a-a = " << a - a << endl;
return 0;
}
//output
a+a = this and A&
a-a = A& and A&
Мне любопытно, почему оператор внутри класса получает вызов, а не внешний. Есть ли какой-то приоритет среди операторов?Как работает оператор внутри класса?
Процесс выбора между несколькими функциями с тем же именем называется * разрешением перегрузки *. В этом коде член является предпочтительным, потому что не-член требует преобразования квалификации (добавление 'const' в' lhs'), но член этого не делает. Если вы сделали функцию-член 'const' (которую вы должны, так как она не изменит' * this'), тогда это будет неоднозначно. –