有没有一种方法可以覆盖括号的默认行为

Is there a way to override the default behavior of parenthesis?

本文关键字:覆盖 默认 方法 一种 有没有      更新时间:2023-10-16

我想重载运算符,,以便使用以下语法分配分数:CCD_ 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

我不小心在numden周围放了一个(),从输出中我意识到operator ()的优先级影响了实际结果。它仅使用operator ,进行评估,这是奇数。所以我的问题是,在这种特殊情况下,有没有一种方法(可能是宏?)可以忽略运算符()的影响?

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

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