1

我正在阅读新的 Stroustrup 书中的第 17 章,我对使用初始化列表初始化一个类感到困惑。

例子:

在 .hpp 中:

class A
{
    public:
        A() : _plantName(std::string s), _growTimeMinutes(int 1);
        virtual ~A();

    private:
        std::string _plantName;
        int _growTimeMinutes;
};

在 .cpp 中:

A::A() : _plantName(std::string s), _growTimeMinutes(int i)
{

}

还是在 .cpp 中:

A::A(std::string s, int i) : _plantName(std::string s), _growTimeMinutes(int i)
{

}

并称之为:

A a {"Carrot", 10};

我早在 1998 年就学习了 c++,直到最近这些年才断断续续地用它编程。这东西多久以前变的?我知道我仍然可以以旧方式做到这一点,但我真的很想学习新知识!

4

2 回答 2

4

首先,当您处理常量成员或将对象作为参数传递时,我认为初始化列表很有用,因为您避免调用默认构造函数然后调用实际赋值。

您应该在您的 cpp 文件中编写以下代码:无需重写初始化列表中的参数类型。

A::A(std::string s, int i) : _plantName(s), _growTimeMinutes(i)
{
}

你的 h 文件应该是:

class A
{
    public:
         A(std::string, int);
    private:
        std::string _plantName;
        int _growTimeMinutes;
};

你应该像这样创建一个新的 A 对象

A new_object("string", 12);
于 2013-06-02T20:38:29.413 回答
1

它应该是

A::A(std::string s, int i) : _plantName(s), _growTimeMinutes(i) {

}

例如

假设变量 _plantName 和 _growTimeMinutes 在类 A 或其超类之一中声明。s 和 i 是类 A 的构造函数参数,然后初始化将调用带有参数 s 的 _plantName 的字符串构造函数和带有参数 i 的 _growTimeMinutes 的 int 构造函数,从而初始化这两个变量。

如果要初始化 const 引用,则特别需要初始化列表。构造函数中的赋值不起作用。

希望我能帮上忙

于 2013-06-02T20:37:54.613 回答