如果构造函数初始化,我如何初始化对象的数组? C ++

时间:2014-10-30 21:12:06

标签: c++

我的课程如下:

#include <string>
using std::string;

class cOb
{
private:
    string var1;
    int    var2;
    int    var3;

public:
    cOb(string v1, int v2, int v3);
};

cOb::cOb(string v1, int v2, int v3)
{
    var1 = v1;
    var2 = v2;
    var3 = v3;
}

int main()
{
    string x = "Somethin";
    int y = 0, z = 10;
    cOb object1(x,y,z);
}

但是如果我尝试创建这个类的对象数组:

cOb aObjects[10]("" ,0 ,0 );

编译器抱怨并给我这个错误:

error: bad array initializer

如何创建默认值,以便我不必初始化每个对象或如何以正确的方式初始化此数组?

2 个答案:

答案 0 :(得分:2)

你可以写:

cOb Objects[10] = { cOb("x", 0, 0), cOb("y", 1, 1),  /* etc. */  };

无法指定用于初始化所有对象的单个默认值。要做到这一点,你必须给cOb一个默认的构造函数。最简单的方法是为现有构造函数的参数赋予默认值:

cOb (string v1 = "", int v2 = 0, int v3 = 0 );

但是,如果使用std::vector作为容器而不是C样式数组,则可以传递默认值:

std::vector<cOb> Objects( 10, cOb("x", 0, 0) );

答案 1 :(得分:1)

您不能以这种方式初始化对象数组。您可以创建一个不带参数的默认构造函数,将构件初始化为默认值。或者,如果您使用的是C ++ 11,则可以使用类内成员初始化:

int var2 = 0;
int var3 = 0;