<基于 C++ Primer P228>
<本节内容基本围绕书中“书店管理系统”这个例子,因此没有看过书的人可能较难理解,不建议参考此部分内容>
类的基本思想是数据抽象和封装。
(1)数据抽象是一种依赖于接口和实现分离的编程技术。
①类的接口包括用户所能执行的操作。
②类的实现则包括类的数据成员、负责接口实现的函数体以及定义类所需的各种私有函数。
(2)封装实现了类的接口和实现的分离。封装后的类隐藏了它的实现细节,也就是说,类的用户只能使用接口而无法访问实现部分。封装有两个重要的优点:
①确保用户代码不会无意间破坏封装对象的状态。
②被封装的类的具体实现细节可以随时改变,而无须调整用户级别的代码。
(3)类要想实现数据抽象和封装,需要首先定义一个抽象数据类型。在抽象数据类型中,由类的设计者负责考虑类的实现过程;使用该类的程序员则只需要抽象地思考类型做了什么,而无须了解类型的工作细节。
1.设计 Sales_data 类
Sales_data total;
if (read(cin, total))
{
Sales_data trans;
while (read(cin, trans))
{
if (total.isbn() == trans.isbn())
total.combine(trans);
else
{
print(cout, total) << endl;
total = trans;
}
}
print(cout, total) << endl;
}
else
cerr << "No data?!" << endl;
2.定义改进的 Sales_data 类
struct Sales_data
{
std::string isbn() const {
return bookNo;}
Sales_data& combine(const Sales_data&);
double avg_price() const;
std::string bookNo;
unsigned units_sold = 0;
double revenue = 0.0<