打印副本构造函数 OOP 的问题

Problem with printing copy constructor OOP

提问人:FAR CRY 3 提问时间:11/5/2020 最后编辑:ks1322FAR CRY 3 更新时间:11/5/2020 访问量:69

问:

从 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;
}
C++ 数组 OOP 复制构造函数

评论

3赞 Vlad from Moscow 11/5/2020
@看来你的意思是这个->arr[ i ] = x.arr[ i ];而不是 this->arr = x.arr;在复制构造函数中,而在移动构造函数中,不需要分配新的数组。

答:

0赞 Anonymous1847 11/5/2020 #1

你正在写

this->arr = x.arr;

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

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

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

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