三行代码  ›  专栏  ›  技术社区  ›  Xcrood Coding

如果我比较a1和a2,下面的代码应该返回true。但它正在返回错误。请检查一下,让我知道错误在哪里?

  •  -2
  • Xcrood Coding  · 技术社区  · 2 月前
    #include<iostream>
    #include<cstring>
    
    using namespace std;
    
    class Array {
    private:
        int* array;
        int s;
    public:
        Array()
            {
                array = NULL;
                s = 0;
                        
            }
        Array(int size)
            {
                size = (size > 0 ? size : 10);
                array = new int[size]; 
                for (int i = 0; i < size; i++)
                    array[i] = 0;
                        
            }
        Array(int* arr, int size)
            {
                for (int i = 0; i < size; i++)
                {
                    *(arr + i) = *(array + i);
                
                }
            }
        Array(const Array& a):s(a.s)
            {
                array = new int[s];
                for (int i = 0; i < s; i++)
                    array[i] = a.array[i];
                        
            }
        int& operator[](int i)
            {
                return array[i];
            }
        const Array& operator=(const Array& obj)
            {
                if (&obj != this) { 
                    if (s != obj.s) {
                        delete[] array; 
                        s = obj.s;
                        array = new int[s]; 
                    }
                
                }
                for (int i = 0; i < s; i++)
                    array[i] = obj.array[i];
                return *this;
            }
        bool operator==(const Array&obj)const
            {
                if (s != obj.s)
                    return false;
                for (int i = 0; i < s; i++) {
                    if (array[i] != obj.array[i])
                        return false;
                }
                return true;
            }
                    
        ~Array() {
            delete[] array;
        }
    };
    
    int main()
    {
        Array a1(5);
        int arr[] = { 1,2,3,4,5 };
        Array a2(arr, 5);
        a1 = a2;
    }
    

    我试着运行上面的程序,如果我比较a1和a2,这个程序应该返回true。但当我运行这个程序时,我变得错误了。请检查超载的操作员 告诉我哪里出了错。我重载了赋值运算符和相等运算符,但仍然没有得到实际的输出。提前谢谢你。

    1 回复  |  直到 2 月前
        1
  •  1
  •   David G    2 月前

    三个问题。首先,你从来没有在内存中分配过内存 Array(int*, int) 数组的构造函数。第二是这个任务。。。

    *(arr + i) = *(array + i);
    

    应该是

    *(array + i) = *(arr + i);
    

    甚至更好

    array[i] = arr[i];
    

    第三是你忽略了分配任务 s 在一些构造函数中设置数组的长度。