C ++数组初始化

时间:2009-11-02 10:00:24

标签: c++ winapi visual-c++

当我尝试创建测试t [2]时,下面的代码会出现编译错误; 因为没有默认的构造函数。

但是如果我创建Test t[2] = {test(1,2), test(2,3)};那么它工作正常。

1)但是想想一个情况,如果我们想要创建超过100个数组元素。我们需要在花括号中创建100个元素,比如..     测试t [100] = {test(1,2),test(1,2)...... / 100次 /};

上述代码难以维护。 另一种解决方案是创建公共成员函数,该函数采用2个整数并在循环中运行。这解决了问题,但我想知道任何其他好的方法。

2)如果我使用新的

创建它
Test *t = new test[10];

我收到编译错误(没有默认构造函数)。如何解决这个问题。

class test
{
    int _a;int _b;

public:
    test(int a, int b);
    void display();
};


int _tmain(int argc, _TCHAR* argv[])
{
    test t[10];

    for (int i = 0 ; i< 10; i++)
        t[i].display();
}

3 个答案:

答案 0 :(得分:3)

为了在数组中构造10个元素,编译器必须以某种方式通过构造函数实例化它们。对于数组,只能使用默认构造函数(不带参数),因为您不能将任何参数传递给数组中的元素。因为你必须证明是一个构造函数

test::test()

不参与。

答案 1 :(得分:1)

在您的示例中,您希望显示什么?
如果您知道,可以编写默认CTor(没有参数的CTor)并将值设置为默认值。

默认CTor的一个示例:

// Variant 1: Use the initialization list
test()
: a(-1)
, b(-1)
{
}

// OR
// Variant 2: Do it in the CTor's body
test()
{
    a = -1;
    b = -1;
}

注意:您可以编写多个CTor(称为“重载”)。一个不接受参数并设置默认值,另一个接受参数并设置这些值。

答案 2 :(得分:0)

您还可以为所有参数定义一个构造函数,其默认值将用作默认构造函数。

test(int a = 0, int b = 0) :_a(a), _b(b) {}

由于所有参数都有默认值,因此该构造函数将用作默认值。省略初始化列表或不初始化构造函数体中的成员变量可能会为您提供随机数据值。有些系统可能会将所有内存分配归零,但有些系统不会。