类的struct成员的默认初始值

时间:2009-05-11 03:58:06

标签: c++

以下片段来自VC ++ 2008 Express Edition。 说,我有一个类,其成员是一个结构。我正在尝试为此类的成员变量定义默认值。为什么这不起作用?

struct Country{
    unsigned chart  id;
    unsigned int    initials;
    std::string name;
};

class world{
private:
    Country          _country;
    unsigned int    _population;
public:
    world(){};
    world():
             _country(): 
                 id('1'), initials(0), name("Spain") {};
             _population(543000) {}
    :
    :
    ~world(){};
};

2 个答案:

答案 0 :(得分:6)

有两种方法可以初始化国家/地区成员数据。像这样......

struct Country{
    unsigned char   id;
    unsigned int    initials;
    std::string name;
};

class world{
private:
    Country          _country;
public:
     world()
     {
         _country.id = '1';
         _country.initials = 0;
         _country.name = "Spain";
     }
     ~world(){};
};

......或者,像这样...

struct Country{
    unsigned char   _id;
    unsigned int    _initials;
    std::string _name;
    Country(
        unsigned char id,
        unsigned int initials,
        const std::string& name
        )
        : _id(id)
        , _initials(initials)
        , _name(name)
    {}
};

class world{
private:
    Country          _country;
public:
    world()
    : _country('1', 0, "Spain")
    {
    }
    ~world(){};
};

请注意,在第二个示例中,我发现初始化Country实例更容易,因为我将构造函数定义为Country结构的成员。

或许,您可能希望为Country类型提供默认构造函数:

struct Country{
    unsigned char   _id;
    unsigned int    _initials;
    std::string _name;
    Country()
        : _id('1')
        , _initials(0)
        , _name("Spain")
    {}
};


class world{
private:
    Country          _country;
public:
    world()
    {
    }
    ~world(){};
};

答案 1 :(得分:2)

结构是聚合类型。

由于它没有构造函数,你不能使用普通括号初始化它,但是你可以像初始化数组一样使用花括号。