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();
这是我的主要功能。 我希望我的数组复制到另一个带有复制构造函数的数组。但是这段代码不能正常工作。可以做什么呢?
答案 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个字节(但它取决于编译器); for(int i=0; i<4; i++)
。这个循环遍历[0; 3]; size+1
这样的东西。如果您决定使用大小为4的数组,那么请始终使用4.超出由new int[4]
分配的空间将带给您痛苦和痛苦。