打印复制构造函数 OOP 的问题

Problem with printing copy constructor OOP

在打印从 Arr s 到 Arr s1 的复制构造函数元素时遇到问题,在 << 运算符方面也遇到问题它不起作用,请帮助,因为我不是专业人士,只是一名学生。

#include <iostream>

using namespace std;

class Arr {
private:
    int size;
    int *arr;
public:
  Arr(int size,int *arr) {
      this->size = size;
      this->arr = new int [size];
      for (int i = 0; i < size ; ++i) {
         this->arr[i] = arr[i];

      }
  }

    ~Arr() {
        delete[] arr;
    }

    Arr(const Arr &x) {
        this->size = x.size;
        this->arr = new int[x.size];
        for (int i = 0; i < x.size; ++i) {
            this->arr = x.arr;
        }
    }

    Arr() : size(0),arr(0) {}

    Arr(Arr &&x) {
        this->size = x.size;
        this->arr = new int[x.size];
        for (int i = 0; i < x.size; ++i) {
            this->arr = x.arr;
        }
    }

    friend ostream &operator<<(ostream &out, const Arr &t) {
        out << t.size;
        for (int i = 0; i < t.size; i++) {
            out << t.arr[i];
        }
        return out;

    }


    friend istream &operator>>(istream &in, Arr &t) {
        in >> t.size;
        for (int i = 0; i < t.size; ++i) {
            in >> t.arr[i];
        }
        return in;
    }



};

int main() {
    int size = 3;
    int arr [] = {1,2,3};
 Arr s1(size,arr);
  cin << s1;
  cout<<s1;
  Arr s(s1);
  cout<<s; // not working at all

    return 0;
}

您正在写作

this->arr = x.arr;

在复制构造函数中,而不是

this->arr[i] = x.arr[i];

也就是说,当前您的代码正在复制数组指针,而不是数组的元素。

在调试时,首先检查您的代码以确保每个部分都在执行您希望它执行的操作并且您没有犯这样的错字。然后,如果您没有发现问题,您可以使用像 gdb 这样的调试器来单步调试您的代码并监视变量的值,以确保您的程序正在执行您想要的操作。