如何初始化类类型变量的成员数组?

时间:2016-01-26 14:08:02

标签: c++ class parameters constructor

我想创建一个10 Foo的成员数组,每个数组都初始化为Foo(8, "10"),如下所示:

Foo bar = new Foo(8, "10")[10]; //like this

我怎样才能做到这一点?

4 个答案:

答案 0 :(得分:2)

假设您要初始化10个Foo类型的对象,您应该在C ++中使用vector

std::vector<Foo> foos( 10, Foo(8, "10"));

答案 1 :(得分:0)

最简单的方法是使用这样的std::vector

struct A {
   std::vector<Foo> bar;
   A() : bar(10, Foo(8, "10")) {}
};

std::vector可以像普通数组一样使用,另外还有一些简洁的额外功能here

如果vector证明的动态分配太慢且编号10是编译时常量,则可以使用std::array代替。但是,语法不是那么漂亮,差异很可能是微不足道的。

答案 2 :(得分:0)

如果数组的大小恒定且很小,您可以使用:

foo array_of_foos[3] = 
{
    foo(8, "10"),
    foo(8, "10"),
    foo(8, "10")
};

唯一的另一种方法是使用for()循环,但为了工作,foo还必须有一个无参数的构造函数(又名foo()

xtofl使用向量的答案也有效,假设您可以使用向量而不是数组。

答案 3 :(得分:0)

如果数组的大小很小,那么您可以为数组的每个元素显式指定初始值设定项。

例如

#include <iostream>

struct A
{
    A( int x, int y ) : x( x ), y( y ) {}
    int x, y;
};    

int main()
{
    const size_t N = 10;
    A *a = new A[N] 
    { 
        { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, 
        { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }
    };

    for ( size_t i = 0; i < N; i++ ) std::cout << a[i].x << ' ' << a[i].y << std::endl;

    delete [] a;

}    

程序输出

0 0
1 1
2 2
3 3
4 4
5 5
6 6
7 7
8 8
9 9

但是如果要动态分配数组,那么更好的方法是使用标头std::vector中声明的标准类<vector>

您可以使用与例如

相同的初始化列表
    std::vector<A> v = 
    { 
        { 0, 0 }, { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 }, 
        { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 }, { 9, 9 }
    };

或者您可以首先使用默认值

初始化所有元素
std::vector<A> v( N, { 0, 0 } );

然后使用例如std::fillstd::generate等标准算法重新分配它们。