以下构造函数是否允许在同一IntList
类中?
IntList(int length);
IntList(int data[]);
答案 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::map
,std::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
类型为int
,data
类型为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