这些IO功能可以用另一种方式完成吗?

时间:2013-10-19 14:26:26

标签: c++

所以,我正在使用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的函数)

当然,我不是一个经验丰富的程序员,他们是,所以必须有一个额外的复杂性背后的原因,或者只是我的方式是糟糕的编程实践。你觉得怎么样?

(请记住,在我和本书的代码中,假设正确使用标题和声明/定义。)

1 个答案:

答案 0 :(得分:1)

本书中的示例适用于ostreamofstream等,因此您可以使用cout以及任何打开的文件。

更好的方式可能是在运营商&lt;&lt;和运算符&gt;&gt;,因此您可以直接在对象中使用该语法。

另一方面,您的示例仅适用于cincout,因此,如果您决定需要输出到文件,则需要更改实现或添加其他功能