c++ - 使用 C++ 添加两个数组的运算符重载 (+)
问题描述
我已经使用和运算符重载函数创建了这个类来添加两个数组。程序运行没有错误,但不输出任何内容。我相信循环运算符在到达这一行时会终止:*(brandNew.ptr+i) = *(ptr +i) + *(obj2.ptr +i)。任何人都可以帮助查看代码导致问题的位置吗?
#include <iostream>
using namespace std;
template <class number>
class overloading{
public:
int *ptr;
int Size;
overloading (){};
overloading(number x[], number s){
ptr = &x[0];
Size = s;
}
overloading operator+(overloading obj2){
overloading brandNew;
for (int i = 0; i < Size; i++ ){
*(brandNew.ptr+i) = *(ptr +i) + *(obj2.ptr +i) ;
}
return (brandNew);
}
};
int main()
{
int a[5] = {2,2,5,3,6};
int b[5] = {2,3,2,1,9};
overloading <int> obj(a, 5);
overloading <int> obj2(b, 5);
overloading <int> obj3;
obj3 = obj + obj2;
cout << obj3.ptr << endl;
return 0;
}
解决方案
您需要为ptr
inside分配内存operator+
,如下所示:
overloading operator+(overloading const &obj2){
overloading brandNew;
brandNew.ptr = new int[Size]; // <- allocate memory
for (int i = 0; i < Size; i++ ){
*(brandNew.ptr+i) = *(ptr +i) + *(obj2.ptr +i) ;
}
return (brandNew);
}
否则,您将在 处访问无效内存brandNew.ptr
,这会调用未定义的行为。
另外,请注意 to 的参数operator+
应该是 a const&
。
这是一个演示。
您还应该在overloading
.
推荐阅读
- python - 如何使用python在乌尔都语文本中应用正则表达式
- git - 如何在两个本地 Windows 系统上配置 git 服务器和客户端存储库?
- c++ - GLSL 将 uint 转换为 float 以获取颜色
- python - 如何在 Python 中使用多处理和 Selenium
- swift - Swift Cocoa 从菜单重新打开应用程序
- python - Flask 分页结合查询
- r - 在除 server.r 之外的其他 abc.r 文件中以闪亮的方式访问上传的文件
- android - 具有单选按钮行为的切换按钮
- python - 如何重置多个列的索引以匹配两个数据框?
- python - Kivy-ios 导入 python 模块