运算符重载程序中的混淆
Confusion in an Operator overload program
在这个代码中,为什么要把 & in const CVector& param ???
我们可以按如下方式使用它
c = a + b;
c = a.operator+ (b);
在第二种陈述中,b
不是CVector&
类型,所以这就是我感到困惑的原因。
// overloading operators example
#include <iostream>
using namespace std;
class CVector {
public:
int x,y;
CVector () {};
CVector (int a,int b) : x(a), y(b) {}
CVector operator + (const CVector&);
};
CVector CVector::operator+ (const CVector& param) {
CVector temp;
temp.x = x + param.x;
temp.y = y + param.y;
return temp;
}
int main () {
CVector foo (3,1);
CVector bar (1,2);
CVector result;
result = foo + bar;
cout << result.x << ',' << result.y << 'n';
return 0;
}
由于操作数不希望操作数被修改,因此有两种解决方案:
- 发送对象的副本,以便原始对象保持不变
- 将其作为 const 引用发送:
const
关键字阻止您修改对象,并且引用允许您在没有副本的情况下传递对象。
因为你没有在第二个向量上操作(修改其属性),你只是在从中读取。通过使用&sign,您可以确保它通过引用传递,如果第二个向量是大数据结构,例如1000 * 1000矩阵,则可以有效地工作。
使用 reference 来避免复制对象,使用 const 来指示对象不会被修改。
相关文章:
- 重载操作程序时出错>>用于类中的字符串 memebr
- 在gcc中意外调用了Const重载.编译器错误或兼容性修复程序
- 在Qt小部件应用程序中,在重载的"paintEvent"中的"setValue"
- 重载 <= 运算符,但程序以退出代码 -1073741571 (0xC00000FD) 结尾
- 运算符重载 new 时 void * nullptr 使程序崩溃
- 我的移动分配操作程序重载的分段错误
- 基于函数重载的程序
- 重载" >> " 程序崩溃
- CGI程序的自定义输出缓冲区,运算符重载
- 矩阵运算C++运算符重载程序错误
- 如何删除模板类的输出操作程序重载的错误
- 赋值重载:为什么使用相同的对象会导致程序中出现问题
- 提升程序选项:自定义验证器是否需要重载运算符>>?
- 运算符重载程序中的混淆
- 在 c++ 计算器程序中重载 '+' 运算符时无法获得正确的输出
- 在 XML 解析程序上没有可行的重载
- C++ 程序上没有可行的重载'='
- 重载运算符==具有采用模板化迭代程序的自由函数
- 重载内存映射文件加载程序(C++)
- “我的程序”使用重载运算符保持seg错误