c++ - 在 C++ 中重载运算符加上 2 个对象时返回整数
问题描述
我想在 + 2 个对象时返回整数。但它发现了错误
E2140 表达式必须具有整数或无范围枚举类型
错误 C2110 '+':无法添加两个指针
class Sum {
int number;
public:
Sum(int number) : number(number) {};
int getNumber() const { return number; }
void setNumber(int val) { number = val; }
int operator+ (Sum* d1) {
int result;
result = this->getNumber() + d1->getNumber();
return result;
}
};
int main() {
Sum* num1 = new Sum(17);
Sum* num2 = new Sum(9);
int result = num1 + num2;
cout << result;
}
我可以重载 2 个对象以获得整数结果吗?
解决方案
因为运算符是在类中定义的,所以它的左侧必须是类型Sum
,而右侧必须是类型Sum*
(因为那是参数的类型d1
)。
但是,您尝试在此处添加两个指针:
int result = num1 + num2;
正确的是取消引用左侧
// V
int result = *num1 + num2;
更好的是使用引用作为右侧参数重载运算符并且根本不使用new
(您实际上不需要new
在现代 C++ 中使用)。
// VVVVV V
int operator+ (const Sum &d1) {
return this->getNumber() + d1.getNumber();
}
...
int main() {
Sum num1(17);
Sum num2(9);
int result = num1 + num2;
cout << result;
}
推荐阅读
- python - Python 绑定(闭包后期绑定)
- angular - 在 bit.dev 上存储原始 Ionic (Angular) 组件
- javascript - Electron - IPC 发送对象丢失它们的实例
- python - Flask API 和 Selenium 脚本在一个容器中
- google-bigquery - BigQuery 中的相关计划 SQL 查询
- security - 如何配置远程 Taxii 服务器?
- powerbi - 仅在条形图中显示“最高”条形
- typo3 - TYPO3 版本 11 后端登录不起作用
- javascript - 数组,它只来自 document.write
- node.js - 移除 Array Json 对象元素