代码之家  ›  专栏  ›  技术社区  ›  Naruto

C++数组初始化

  •  0
  • Naruto  · 技术社区  · 15 年前

    因为这个没有默认的构造函数。

    但如果我创造 Test t[2] = {test(1,2), test(2,3)}; 那么它工作得很好。

    测试t[100]={Test(1,2),Test(1,2)/ 一百次 /};

    另一个解决方案是创建公共成员函数,该函数接受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 回复  |  直到 15 年前
        1
  •  3
  •   RED SOFT ADAIR    15 年前

    test::test()
    

    不要争论。

        2
  •  1
  •   foraidt    15 年前

    在您的示例中,您希望显示什么?
    如果您知道这一点,您可以编写一个默认的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;
    }
    

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

        3
  •  0
  •   Dave Delaney    15 年前

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

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