0

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

当然,我不是一个经验丰富的编程者,他们是,所以额外的复杂性背后一定有一个原因,或者只是我的方式是糟糕的编程习惯。你怎么看?

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

4

1 回答 1

1

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

更好的方法可能是在 operator<< 和 operator>> 处实现,因此您可以直接将该语法用于您的对象。

另一方面,您的示例仅适用于cinand cout,因此如果您决定需要输出到文件,则需要更改实现或添加另一个函数来执行此操作。

于 2013-10-19T14:42:09.560 回答