我可以为一个构造函数创建一个整数数组,为另一个构造函数创建一个整数吗?

时间:2011-03-28 19:24:08

标签: c++ constructor

以下构造函数是否允许在同一IntList类中?

IntList(int length);
IntList(int data[]);

3 个答案:

答案 0 :(得分:4)

没关系,但请注意,后者与int* data相同,typedef int array_type[5]; IntList(const array_type& arr); // same as: IntList(const int (&arr)[5]); 是一个指针,而不是一个数组。

数组是不可复制的,必须通过引用传递:

template <std::size_t N>
IntList(const int (&arr)[N]); // N is the number of elements

您还可以使用模板获取任意大小的数组:

template <typename InputIterator>
IntList(InputIterator begin, InputIterator end);

但你的方法最终是非正统的。如果要使用一系列数据进行初始化,请使用迭代器:

begin

现在你可以从end迭代到std::vector,它可以是来自任何类型容器的迭代器,如数组,std::mapstd::vector<int>等等

但是你应该使用IntList而不是{{1}}。

答案 1 :(得分:1)

是的,它们的类型不同,所以这是有效的。

答案 2 :(得分:0)

IntList(int length);
IntList(int data[]);

然而,这不允许有另一种方法。

IntList(int* data);  // Error: This is equivalent to IntList(int data[])
                     // Because an array decays to a pointer.

两个论点都不同。 length类型为intdata类型为int[],是构造函数重载的示例。


关于如何使用它的评论 - 这应该作为一个例子

class IntList
{
    int member[5] ;  // Added
    public:
       IntList(int length) ;
       IntList( int data[] )  // Should make sure that the passed array size is 5
                              // or take another argument mentioning the size of
                              // array being passed.
       {
           for(int i=0; i<5; ++i)
               member[i] = data[i] ;
       }
} ;


int a[] = { 1,2,3,4,5 };   // Making sure that array size is 5
IntList obj(a) ; // Array decays to a pointer pointing to first index of the array