使用模板class-c ++在数组中打印值

时间:2016-09-14 23:27:29

标签: c++ arrays class templates

你好我''尝试为类创建模板以打印出数组中的值。

#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;

}

这是代码,我想知道什么是错的,因为它会打印出随机数。

2 个答案:

答案 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