istream コンストラクターを持つクラスがあります。クラス オブジェクトを ifstream オブジェクトで初期化できます。プログラムでは、ifstream オブジェクトを含むファイルを開き、このオブジェクトを使用してクラス オブジェクトを初期化します。
std::ifstream in(test);
object1(in);
object2(in);
ファイルにはいくつかのトランザクションが含まれています。
Math 3 5
Phys 3 6
Phys 3 7
各行が割り当てられるデータ メンバーを印刷すると、object1 は行 1 を印刷し、object 2 は行 2 を印刷します。なぜですか?
また、コンストラクターが istream オブジェクト参照を受け取り、関数本体で、istream オブジェクト参照を受け取り、それを使用してデータを入力し、istream オブジェクトを返す別の関数を呼び出すことにも言及します。
しかし、各初期化がファイルの次の行に進むのはなぜでしょうか?
コンストラクター コード:
Sales_data(std::istream &is) : Sales_data() { read(is, *this); }
関数読み取りコード:
std::istream &read(std::istream &is, Sales_data &item)
{
double price = 0;
is >> item.bookName >> item.books_sold >> price;
item.revenue = price * item.books_sold;
return is;
}