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