Я хочу перегрузить оператор ,
, чтобы я мог назначить свою дробь, используя этот синтаксис:
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;
}
** ВЫХОД
$ prog.exe
original f = 1, 2
expected = 4, 5
unexpected = 11, 5
Я случайно поставил ()
вокруг num
и den
, и из вывода я понял, что приоритет operator ()
повлиял на фактический результат. Он оценивается только с использованием operator ,
, что является странным Итак, мой вопрос, есть ли способ (возможно, макрос?) Игнорировать влияние оператора ()
в этой конкретной ситуации?