所以,我正在使用C ++ Primer,第5版。我在第7.1.3节,但由于很多人都没有这本书,所以这里是它的底线:作者正在为书籍交易类编写代码,并希望分别实现读取和打印功能在一本书的数据,然后打印它。这是本书的功能:
// input transactions contain ISBN, number of copies sold, and sales price
istream &read(istream &is, Sales_data &item)
{
double price = 0;
is >> item.bookNo >> item.units_sold >> price;
item.revenue = price * item.units_sold;
return is;
}
ostream &print(ostream &os, const Sales_data &item)
{
os <<item.isbn() << " " << item.units_sold << " "
<< item.revenue << " " << item.avg_price();
return os;
}
令我感到困惑的是,为什么他们陷入了实际传递IO对象的麻烦之中。如果我被要求自己编写这样的函数,我会这样做:
void read()
{
cout << "Please input book number, units sold and price.";
cin >> item.bookNo >> item.units_sold >> price;
}
void print()
{
cout << item.isbn() << " " << item.units_sold << " "
<< item.revenue << " " << item.avg_price();
}
(item.isbn()是一个返回书籍ISBN的函数)
当然,我不是一个经验丰富的程序员,他们是,所以必须有一个额外的复杂性背后的原因,或者只是我的方式是糟糕的编程实践。你觉得怎么样?
(请记住,在我和本书的代码中,假设正确使用标题和声明/定义。)
答案 0 :(得分:1)
本书中的示例适用于ostream
,ofstream
等,因此您可以使用cout
以及任何打开的文件。
更好的方式可能是在运营商&lt;&lt;和运算符&gt;&gt;,因此您可以直接在对象中使用该语法。
另一方面,您的示例仅适用于cin
和cout
,因此,如果您决定需要输出到文件,则需要更改实现或添加其他功能