《C++ primer》比其他C++相关书籍,知识点细致很多很多,每次看书都会有新的理解~
类的基本思想: 数据抽象和封装
数据抽象是一种依赖于接口和实现分离的编程技术。
类的接口包括用户所能执行的操作;
类的实现包括类的数据成员、负责接口实现的函数体以及定义类所需的各种私有函数。
封装实现了类的接口和实现的分离。封装后的类隐藏了它的实现细节,也就是,类的用户只能使用接口而无法访问实现部分。
类要想实现数据抽象和封装,需要首先定义一个抽象数据类型。
定义抽象数据类型
先看一个书店程序,《C++ primer 》 P. 21 最原始的代码:
Sales_item total; //保存下一条交易记录的变量
if (std::cin >> total) {
//读入第一条交易记录,并确保有数据可以处理
sales_item trans; //保存和的变量
while (std::cin >> trans){
//读入并处理剩余交易记录
if (total.isbn ( ) == trans.isbn()) //如果我们仍在处理相同的书
total += trans; //更新总销售额
else {
//打印前一本书的结果
std::cout<<total <<std: :endl;
total = trans; // total现在表示下一本书的销售额
}
}
std::cout<<total << std: :endl; //打印最后一本书的结果
}
else {
//没有输入任何信息
cerr <<"No data? ! "<< endl ; //通知用户
}
《C++ primer 》 P.64 自定义数据类型
C++11新标准规定,可以为数据成员提供一个类内初始值(in-class initializer)。创建对象时,类内初始值将用于初始化数据成员。没有初始值的成员将被默认初始化。因此当定义sales_data
的对象时,units_sold
和revenue
都将初始化为0,bookNo
将初始化为空字符串。
struct Sales_data {
std::string bookNo;
unsigned units_sold = 0;