带有复制构造函数的c ++ copy数组

时间:2017-07-02 14:26:53

标签: c++

class Array{
    int size;
    int *array;
    public:
        Array(const int *);
        Array(const Array &);
        void Print();
        ~Array();   

};

这是我的班级

cout<<"I am constructor"<<endl;
        size=sizeof(data_in);

        array=new int[size+1];

        for(int i=0;i<size+1;i++){
            array[i]=data_in[i];
        }

这是我的构造函数

cout<<"I am copy constructor"<<endl;
        size=sizeof(object_in);
        array=new int[size+1];

        for(int i=0;i<size+1;i++){
            array[i]=object_in.array[i];
        }

这里是我的复制构造函数

int main()
    int *a;
    a=new int[4];
    for(int i=0;i<5;i++){

        a[i]=i;
        cout<<a[i]<<endl;
        }

    Array array1(a);//Constructor invoked
    array1.Print();

    Array another=array1;//copy constructor invoked
    another.Print();

这是我的主要功能。      我希望我的数组复制到另一个带有复制构造函数的数组。但是这段代码不能正常工作。可以做什么呢?

2 个答案:

答案 0 :(得分:1)

您无法在构造函数中使用sizeof获取数组大小。您必须使用第二个参数传递长度。

答案 1 :(得分:0)

那可能是你想要的:

Array.h

class Array {
public:
    Array(const int *array, int size);
    Array(const Array &other);
    ~Array();
    void Print();

private:
    int m_size;
    int *m_array;
};

Array.cpp

#include "array.h"
#include <algorithm>
#include <iostream>

Array::Array(const int *array, int size)
    : m_size(size)
{
    std::cout << "I am constructor" << std::endl;

    m_array = new int[m_size];
    std::copy(array, array+size, m_array);
}

Array::Array(const Array &other)
    : m_size(other.m_size)
{
    std::cout << "I am copy constructor" << std::endl;

    m_array = new int[m_size];
    std::copy(other.m_array, other.m_array + m_size, m_array);
}

Array::~Array()
{
    delete [] m_array;
}

void Array::Print()
{
    for(int i = 0; i<m_size; ++i) {
        std::cout << m_array[i] << ' ';
    }
    std::cout << std::endl;
}

的main.cpp

#include <iostream>
#include "Array.h"

int main(int argc, char *argv[])
{
    const int SIZE = 4;

    int *a;
    a = new int[SIZE];
    for(int i = 0; i<SIZE; ++i) {
        a[i] = i;
        std::cout << a[i] << ' ';
    }
    std::cout << std::endl;

    Array array1(a, SIZE); // constructor invoked
    array1.Print();

    Array another(array1); // copy constructor invoked
    another.Print();

    return 0;
}

注意:

  • 您应该将数组大小转发给Array的构造函数。 sizeof无法按预期工作,因为它将返回指针int*的大小,这可能总是4个字节(但它取决于编译器);
  • 如果要创建大小为4的数组,则应对此数组进行迭代:for(int i=0; i<4; i++)。这个循环遍历[0; 3];
  • 不清楚为什么要使用像size+1这样的东西。如果您决定使用大小为4的数组,那么请始终使用4.超出由new int[4]分配的空间将带给您痛苦和痛苦。