【发布时间】:2013-03-22 06:43:15
【问题描述】:
我正在阅读 Andrew Koenig 和 Barbara E. Moo 的“Accelerated C++”,我正在阅读关于构造函数 (5.1) 的章节。
他们在这里提到
我们说过构造函数的存在是为了确保创建对象时其数据成员处于合理状态。一般来说,这个设计目标意味着每个构造函数都应该初始化每个数据成员。给成员一个值的需要对于内置类型的成员来说尤其重要。 ...
虽然我们只显式地初始化了
midterm和final,但其他数据成员是隐式初始化的。具体来说,n由string默认构造函数初始化,homework由vector默认构造函数初始化。
他们正在谈论的课程是
class Student_info {
public:
std::string name() const (return n;}
bool valid() const {return !homework.empty();}
std::istream& read(std::istream&);
double grade() const;
private:
std::string n;
double midterm, final;
std::vector<double> homework;
};
它们的默认构造函数是
Student_info::Student_info(): midterm(0), final(0) {}
我想澄清一下,这意味着像int 和double 这样在术语之前没有std:: 的东西需要专门初始化?
【问题讨论】:
-
"需要特别地进行初始化" - 你实际上可以省略 specific 值,它们仍然会被初始化 所有这些基本类型有一个零值。
: midterm()会将成员设置为0.0,因为这是double的零值。类似地,如果您将int成员放在初始化列表中,但没有提供初始值,它将被初始化为0。
标签: c++ class constructor