【发布时间】:2014-04-25 10:46:05
【问题描述】:
我的班级名为Novel。我可以声明如下所述的对象数组:
Novel obj;
但问题是Novel 有构造函数,我想为数组的所有索引调用它我该怎么做。我试过了,但它不起作用。
Novel obj(i,n)[2];
【问题讨论】:
-
基本上不能。
标签: c++ arrays debugging constructor
我的班级名为Novel。我可以声明如下所述的对象数组:
Novel obj;
但问题是Novel 有构造函数,我想为数组的所有索引调用它我该怎么做。我试过了,但它不起作用。
Novel obj(i,n)[2];
【问题讨论】:
标签: c++ arrays debugging constructor
您需要使用适当的容器,该容器使用动态分配来推迟单个元素的构造。
std::vector<Novel> objs(2, Novel(i,n));
【讨论】:
不幸的是,C++ 语言不提供该功能。分配了数组,但默认情况下它们根本没有初始化。如果它们被分配在静态存储中,它们会被零填充;你可以给一个大括号初始化器;您可以提供一个默认构造函数来初始化每个值。你不能做的是用任何其他构造函数初始化一个数组。
要达到类似的效果,您必须从不同的角度解决问题。基本上,您可以: - 编写一个宏或模板,既分配一个数组,又在幕后对每个元素调用构造函数,或者 - 创建一个具有数组语义的对象,它可以以任何你喜欢的方式初始化。
内置的集合类通常是最好的解决方案。例如,std::vector 提供填充、范围和复制构造函数以及数组语义。其他答案之一提供了一个示例,但有几种方法可以做到这一点。
std::vector<Novel> objs(2, Novel(i,n));
它不是一个数组,但它应该做你需要的。
【讨论】: