2014-04-25 40 views
1

我有一个名为Novel的类。下面提到我可以声明对象数组:具有构造函数的对象数组

Novel obj; 

但问题是Novel具有构造函数,我想被要求我怎么能做到这一点阵列的所有索引。我尝试了下面,但它不起作用。

Novel obj(i,n)[2]; 
+0

基本上,你不能。 –

回答

0

不幸的是,C++语言没有提供该功能。数组已分配,但默认情况下它们不会被初始化。如果它们被分配在静态存储中,则它们被零填充;你可以给一个括号 - 初始化者;你可以提供一个默认的构造函数来初始化每个值。你不能做的是用任何其他构造函数初始化一个数组。

要实现类似的效果,您必须从另一个角度来处理问题。基本上,您可以: - 编写一个宏或模板,既可以分配数组,也可以在封面下的每个元素上调用构造函数,或者创建一个具有数组语义的对象,该对象可以以任何喜欢的方式进行初始化。

内置的集合类通常是最好的解决方案。例如,std :: vector提供填充,范围和拷贝构造函数以及数组语义。其他答案之一提供了一个例子,但有几种方法可以做到这一点。

std::vector<Novel> objs(2, Novel(i,n)); 

这不是一个数组,但它应该做你所需要的。

相关问题