有没有办法覆盖括号的默认行为?

时间:2012-03-25 22:29:47

标签: c++ operator-overloading

我想重载运算符,,以便我可以使用以下语法分配我的分数: 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 ,进行评估。所以我的问题是,有没有办法(宏可能?)忽略运算符()在这种特殊情况下的影响?

1 个答案:

答案 0 :(得分:2)

当至少有一个参数是用户定义的时,您只能重载运算符。在你的情况下,你的两个论点都是int s,所以你无能为力。

(除了避免使用operator,的可疑用途!)