首页 > 解决方案 > 使用 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;
}

标签: c++

解决方案


您需要为ptrinside分配内存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.


推荐阅读