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'),那麼它就會變得模糊 –