我有一个具有 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;
}