C ++类初始化列表示例

时间:2013-06-02 20:27:00

标签: c++ class object initialization-list

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

示例:

在.hpp:

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

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

in .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 ++,并且直到最近才对它进行了多年的编程。这件事多久以前改变了?我知道我仍然可以用较旧的方式做到这一点,但我真的想学习新的东西!

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

应该是

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

}

例如

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

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

希望我能帮忙