1.5 类的简介
一.类的简介
1.1 类类型是C++相比于C的重要的扩展之一,与C相比,C++中的类也是一种用于描述结构化的
类型,相比于C语言的结构体C++的类类型和结构体不仅仅可以放属性,还可以放处理数据
的方法
1.2 在拿到一个类时,我们需要注意以下3个方面的问题
1.2.1 类的名称是什么
1.2.2 这个类在哪个模块中定义的
1.2.3 这个类支持哪些方法和属性
1.3 一个案例来帮助我们理解类的概念
某书店以文件形式保存其每一笔交易。每一笔交易记录某本书的销售情况,
含有 ISBN(国际标准书号,世界上每种图书的唯一标识符)、销售册数和销售单价。
每一笔交易形如:0-201-70353-X 4 24.99
第一个元素是 ISBN,第二个元素是销售的册数,最后是销售单价。店主定
期地查看这个文件,统计每本书的销售册数、总销售收入以及平均售价。我们要
编写程序来进行这些计算。
1.3.1 Sales_item 类的目的是存储 ISBN 并保存该书的销售册数、销售收入和平
均售价。我们不关心如何存储或计算这些数据。使用类时我们不需要知道这个类
是怎样实现的,相反,我们需要知道的是该类提供什么操作。
因此,我们必须要有一个叫做Sales_item.h的头文件来描述该Sales_item类能够提供
哪些属性和方法,另外我们需要一个对应的Sales_item.cpp来实现这个类里面的这些
成员属性和方法
补充:关于C++的头文件,一般来说,标准的C++头文件是没有.h后缀的,它直接就是类
的名字(头文件的本质就是一个文本文件,它是什么后缀显得不再重要),某些程序员
可能会使用.h .hpp .hxx来作为头文件的名称,虽然GNU编译器对这些古怪的头文件
名称抱着包容的态度,但这并不意味着在其他的IDE中会正确通过编译,所以这里建议
将头文件的后缀一律写为.h或.hpp
1.3.2 Sales_item.h和Sales_item.cpp的实现(分别见其对应的代码文件)
在这个案例中,我们需要对书本进行抽象,实际上书本具有ISBN编号,卖出去的数量,书的单价,书的总价(数量乘以单价)
因此我们需要有以下几个属性
string book_isbn;//书本的ISBN编号
int sale_book_count;//卖出的该书的数量
double book_price;//书的单价
double total_price;//总价格
它需要支持这些操作:
operator<<();//这个是为了输出书本的一些信息:ISBN编号 卖出的数量 总共卖出的价格 平均价格
operator>>();//这个是为了输入书本的信息:ISBN编号 卖出的数量 书的单价
operator+();//这个只能支持相同的ISBN的书的卖出的数量和总价的相加以及计算出平均价格
二.初窥成员函数
2.1 我们在刚刚的案例中,提到了成员函数的概念,成员函数实际上是用于操作一个类里面的成员属性的,当我们抽象出一个类时
不仅仅要考虑这个类需要哪些成员属性(实际上就是数据),还要考虑有哪些操作数据的函数(实际上这里的函数就是成员函数
也叫成员方法),当我们构造多个对象时,这些对象的数据是各自的数据,但是他们的方法却是共有的一个方法
2.2 成员函数与普通的函数有什么区别?
2.2.1 成员函数是定义在类里面的,在调用时必须要使用.运算符来访问;而全局函数不需要
2.2.2 作用范围不同,成员函数只能在类的范围内使用,不能想全局函数那样子在任何位置随时可以被调用
2.2.3 成员函数可以为其设置访问修饰符来限制其作用范围,但全局函数没有访问权限这一说
2.3 成员方法(或属性)的调用方式(使用.运算符来访问)
Object.成员方法();
Object.成员属性;
四.练习
通过重载operator==运算符,来判断两种书的ISBN是否相同
本节代码:https://files.cnblogs.com/files/blogs/792763/1.5.zip?t=1763279860&download=true

浙公网安备 33010602011771号