同时声明并初始化struct / class数组

时间:2009-07-17 15:33:15

标签: c++ class struct initialization

1

我知道可以在声明中初始化一组结构。例如:

struct BusStruct
{
    string registration_number;
    string route;
};

struct BusStruct BusDepot[] =
{
    { "ED3280",    "70" },
    { "ED3536",    "73" },
    { "FP6583",    "74A" },
};

如果将结构更改为类,如下所示:

class BusClass
{
protected:
    string m_registration_number;
    string m_route;
public:
    // maybe some public functions to help initialisation
};

是否可以对结构执行相同的操作(即同时声明和初始化类数组)?

2。 我是否认为无法同时声明和初始化vector<BusStruct>vector<BusClass>

3 个答案:

答案 0 :(得分:3)

  

是否可以对结构执行相同的操作(即同时声明和初始化类数组)?

除非您创建合适的构造函数:

class BusClass
{
protected:
    string m_registration_number;
    string m_route;
public:
    // maybe some public functions to help initialisation
    // Indeed:
    BusClass(string const& registration_number, 
             string const& route)
    :m_registration_number(registration_number),
     m_route(route) { }
};

或者您将所有成员公开并省略构造函数,在这种情况下,您可以使用与struct相同的初始化语法。但我认为这不是你想要的。

  

我是否认为无法同时声明和初始化vector<BusStruct>vector<BusClass>

不可能使用当前的C ++。但是,您可以使用可实现此目的的库。我推荐Boost.Assign。但是,为此,你的类必须有一个构造函数,同样也需要你的结构 - 或者你需要创建某种工厂函数

BusStruct make_bus(string const& registration_number, 
                   string const& route) { ... }

如果要在其他情况下使用大括号括起初始化列表来保持struct的初始化。

答案 1 :(得分:1)

  1. 不,您无法以结构的方式初始化类。但是你可以在数组声明中编写类构造函数。
  2. C ++没有内置的初始化向量的方法,除非您想从已初始化的数组加载向量。

答案 2 :(得分:0)

C ++本身支持两种形式的向量初始化,也不是你想要的。

1:每个元素都与:

相同
vector<int> ints(4,1000); //creates a vector of 4 ints, each value is 1000.

2:从现有矢量复制,如:

vector<int> original(3,1000); //original vector has 3 values, all equal 1000.
vector<int> otherVector(original.begin(),original.end()); //otherVector has 3 values, copied from original vector