你好我''尝试为类创建模板以打印出数组中的值。
#include<iostream>
using namespace std;
template <typename T>
class Array{
public:
Array(T array[], int arraysize){
size=arraysize;
_array=new T[size];
}
~Array(){
delete[] _array;
}
void print(){
for(int i=0; i<size; i++){
cout<<_array[i]<<' ';
}
}
private:
T *_array;
int size;
};
int main(){
int array1[5]={1,2,3,4,5};
Array<int> a(array1,5);
a.print();
float array2[5]={1.012, 2.324, 3.141, 4.221, 5.327};
Array<float> b(array2,5);
b.print();
string array3[]={"Ch1","Ch2","Ch3","Ch4","Ch5"};
Array<string> c(array3,5);
c.print();
return 0;
}
这是代码,我想知道什么是错的,因为它会打印出随机数。
答案 0 :(得分:2)
代码使用_array
创建模板的类成员new
,但不会将其初始化为任何内容,这就是您打印随机垃圾的原因。
构造函数确实接收参数array
,并使用该参数传递初始化数组。但是,构造函数完全忽略了该参数,并且没有对它进行任何操作。
显然,您的意图是将模板构造函数接收的数组内容作为参数复制到_array
中。但是那段代码丢失了。
array
参数的内容不会自行复制到_array
。你必须编写代码才能做到这一点。
答案 1 :(得分:2)
你的构造函数:
Array(T array[], int arraysize){
size=arraysize;
_array=new T[size];
}
您所做的只是分配数组的大小并分配内存而不实际复制内容。所以你看到POD类型的一些随机值,以及类类型的默认构造值。
您应该使用std::copy
Array(T array[], int arraysize)
: _array(new T[arraysize]), size(arraysize)
{
std::copy(array, array+arraysize, _array);
}
如您所见,我使用member initailizer list;请记住Rule of 5。另外,我建议您改用std::unique_ptr
。