Andrew Koenig和Barbara E. Moo阅读“Accelerated C++”的另一个问题,我在关于构造函数的章节(5.1)中,使用before这个例子。带参数的构造函数初始化
他们写
我们要定义两个构造函数:第一个构造函数没有参数,并创建一个空的
Student_info
对象;第二个参考输入流并通过从该流读取学生记录来初始化该对象。
导致使用Student_info::Student_info(istream& is) {read(is);}
作为第二构造的例子
代表实际工作的读取功能。读取立即给这些变量新值。
的Student_info
类
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;
};
由于read
已经被定义为Student_info
类下的函数,为什么有必要使用第二个构造 - 这不就是双重的工作?为什么不使用默认构造函数,然后函数,因为两者都已经定义?
所以它保存初始化所有的变量(他们的零版本)的步骤之前它写完了吗? 有没有速度/功率差异,还是只是为了清晰? – sccs 2013-03-22 07:22:02
@sccs变量首先被初始化,因为函数是从构造函数的主体中调用的。在这个阶段,所有的数据成员都已经构建完成。所以真正的原因是我在最后一段中提到的设计方面。这不仅仅是清晰度:一种在施工后必须明确初始化的类型是非常没用的(尽管我每天都在工作中遇到它们) – juanchopanza 2013-03-22 07:23:44
我刚刚看到了,谢谢!还有一个 - 是否存在没有第二个构造函数(带参数)的程序? – sccs 2013-03-22 07:24:55