【问题标题】:Array of objects with constructor具有构造函数的对象数组
【发布时间】:2014-04-25 10:46:05
【问题描述】:

我的班级名为Novel。我可以声明如下所述的对象数组:

Novel obj;

但问题是Novel 有构造函数,我想为数组的所有索引调用它我该怎么做。我试过了,但它不起作用。

Novel obj(i,n)[2];

【问题讨论】:

  • 基本上不能。

标签: c++ arrays debugging constructor


【解决方案1】:

您需要使用适当的容器,该容器使用动态分配来推迟单个元素的构造。

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

【讨论】:

    【解决方案2】:

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

    要达到类似的效果,您必须从不同的角度解决问题。基本上,您可以: - 编写一个宏或模板,既分配一个数组,又在幕后对每个元素调用构造函数,或者 - 创建一个具有数组语义的对象,它可以以任何你喜欢的方式初始化。

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-09-07
      • 2013-07-09
      • 1970-01-01
      • 2015-01-19
      • 1970-01-01
      • 1970-01-01
      • 2017-03-19
      • 2021-06-17
      • 1970-01-01
      相关资源
      最近更新 更多