有没有一种方法可以覆盖括号的默认行为
Is there a way to override the default behavior of parenthesis?
我想重载运算符,
,以便使用以下语法分配分数: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
我不小心在num
和den
周围放了一个()
,从输出中我意识到operator ()
的优先级影响了实际结果。它仅使用operator ,
进行评估,这是奇数。所以我的问题是,在这种特殊情况下,有没有一种方法(可能是宏?)可以忽略运算符()
的影响?
只有当至少有一个参数是用户定义的时,才能重载运算符。在你的情况下,你的两个论点都是int
s,所以你无能为力
(除了避免operator,
的可疑使用!)
相关文章:
- 有没有办法覆盖 wireshark 中的默认剖析器?
- 在子类函数覆盖中省略具有默认值的参数
- 如何仅覆盖一个EXPECT_CALL的默认ON_CALL操作,并在以后返回到默认操作
- 在类实现中为字符串的覆盖默认破坏者
- 许多小部件似乎对太空栏键按事件具有默认行为.我该如何覆盖它而不将每个小部件分类
- 正在覆盖find_package的默认搜索顺序
- 虚拟析构函数的默认覆盖
- 覆盖来自 R 的C++编译标志的系统默认值
- C++VS2013:覆盖默认构造函数不起作用
- 如何减少googletest的详细程度(覆盖默认侦听器的两种方法)
- 如何覆盖Qt中的默认快捷方式
- 为什么子类覆盖虚拟函数不能更改父类的默认函数参数
- 为什么我不能在 C++ 中使用模板版本覆盖默认的复制构造函数和赋值运算符
- 为什么模板复制构造函数覆盖默认的复制构造函数
- 覆盖默认的未处理异常行为
- 覆盖默认头搜索路径
- GMock:覆盖默认期望
- c++默认参数:是否可以在不覆盖早期默认参数的情况下覆盖默认参数
- 如何在拖动窗口时覆盖默认的 linux Alt+鼠标行为
- 生成文件覆盖默认隐式规则