我想重载运算符,
,以便我可以使用以下语法分配我的分数:
frac = 1, 2
。没有()
运算符,它工作正常。
#include <iostream>
using namespace std;
class fraction {
private:
int m_num;
int m_den;
public:
fraction(int num, int den)
:m_num(num), m_den(den) {
}
fraction& operator =(int num) {
m_num = num;
return *this;
}
fraction& operator ,(int den) {
m_den = den;
return *this;
}
public:
friend
ostream& operator <<(ostream& out, const fraction& rhs) {
return out << rhs.m_num << ", " << rhs.m_den;
}
};
int main() {
fraction f(1, 2);
cout << "original f = " << f << endl;
f = 4, 5;
cout << "expected = " << f << endl;
f = (10, 11);
cout << "unexpected = " << f << endl;
}
** OUTPUT
$ prog.exe
original f = 1, 2
expected = 4, 5
unexpected = 11, 5
我不小心在()
和num
附近放了den
,从输出中我意识到operator ()
的优先级影响了实际结果。仅使用奇怪的operator ,
进行评估。所以我的问题是,有没有办法(宏可能?)忽略运算符()
在这种特殊情况下的影响?
答案 0 :(得分:2)
当至少有一个参数是用户定义的时,您只能重载运算符。在你的情况下,你的两个论点都是int
s,所以你无能为力。
(除了避免使用operator,
的可疑用途!)