Andrew Koenig と Barbara E. Moo による「Accelerated C++」を読んだことによる別の質問で、以前の例を使用して、コンストラクター (5.1) に関する章にいます。
あの人たちは書く
2 つのコンストラクターを定義する必要があります。最初のコンストラクターは引数をとらず、空の
Student_info
オブジェクトを作成します。2 つ目は、入力ストリームへの参照を取得し、そのストリームから生徒のレコードを読み取ることによってオブジェクトを初期化します。
Student_info::Student_info(istream& is) {read(is);}
2番目のコンストラクターとして使用する例につながります
実際の作業を read 関数に委譲します。[...] read はすぐにこれらの変数に新しい値を与えます。
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
下の関数として定義されているため、2 番目のコンストラクターを使用する必要があるのはなぜですか?この二重の作業ではありませんか? 両方とも既に定義されているため、デフォルトのコンストラクターを使用してから関数を使用しないのはなぜですか?Student_info