【问题标题】:Problem with printing copy constructor OOP打印复制构造函数 OOP 的问题
【发布时间】:2021-02-17 10:49:44
【问题描述】:

在打印从 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;
}

【问题讨论】:

  • @看来你的意思是这个->arr[ i ] = x.arr[ i ];而不是 this->arr = x.arr;在复制构造函数和移动构造函数中不需要分配新数组。

标签: c++ arrays oop constructor copy-constructor


【解决方案1】:

你在写

this->arr = x.arr;

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    • 2016-12-19
    相关资源
    最近更新 更多