接上一节。
控制语句
后面的if、while、for语句和我们常见的条件、循环控制语句实现的功能是一样,这里就不再一一介绍了
值得提一下的是,使用while语句可以实现读入未知数目的输入
while (std::cin>>trans)
在遇到文件结束符(或一些其他输入错误)之前,测试会成功并且执行 while 循环体。循环体是一条使用复合赋值操作符的语句,这个操作符将它的右操作数加到左操作数上。
一旦测试失败,while 终止并退出循环体,执行 while 之后的语句。那么怎么判断文件输入结束呢,
不同的操作系统使用不同的值作为文件结束符。Windows 系统下我们通过键入control—z——同时键入“ctrl”键和“z”键,来输入文件结束符。Unix 系统中,包括 Mac OS—X 机器,通常用 control—d。
类
我们新定义了一个Sales_item类
正如我们所看到的,使用像 IO 一样的库工具,必须包含相关的头文件。类似地,对于自定义的类,必须使得编译器可以访问和类相关的定义。这几乎可以采用同样的方式。一般来说,我们将类定义放入一个文件中,要使用该类的任何程序都必须包含这个文件。
依据惯例,类类型存储在一个文件中,其文件名如同程序的源文件名一样,由文件名和文件后缀两部分组成。通常文件名和定义在头文件中的类名是一样的。通常后缀是 .h,但也有一些程序员用 .H、.hpp 或 .hxx。编译器通常并不挑剔头文件名,但 IDE 有时会。假设我们的类定义在名为 Sale_item.h 的文件中。
#include "Sales/Sales_item.h"
《c++Primer》中用到的头文件下载地址:http://www.ituring.com.cn/book/656
点击其中的随书下载。
每个类定义一种类型,类型名与类名相同。因此,我们的 Sales_item 类定义了一种命名为 Sales_item 的类型。像使用内置类型一样,可以定义类类型的变量。当写下
Sales_item item;
就表示 item 是类型 Sales_item 的一个对象。通常将“类型 Sales_item 的一个对象”简称为“一个 Sales_item 对象”,或者更简单地简称为“一个 Sales_item”。
成员函数
上述c++函数if语句的条件
if (total.same_isbn(trans))
调用命名为total的 Sales_item 对象的成员函数。成员函数是由类定义的函数,有时称为类方法。
成员函数只定义一次,但被视为每个对象的成员。我们将这些操作称为成员函数,是因为它们(通常)在特定对象上操作。在这个意义上,它们是对象的成员,即使同一类型的所有对象共享同一个定义也是如此。
当调用成员函数时,(通常)指定函数要操作的对象。语法是使用点操作符(.):
total.same_isbn
意思是“命名为 total 的对象的 same_isbn 成员”。点操作符通过它的左操作数取得右操作数。点操作符仅应用于类类型的对象:左操作数必须是类类型的对象,右操作数必须指定该类型的成员。
与大多数其他操作符不同,点操作符(“.”)的右操作数不是对象或值,而是成员的名字。
通常使用成员函数作为点操作符的右操作数来调用成员函数。执行成员函数和执行其他函数相似:要调用函数,可将调用操作符(())放在函数名之后。调用操作符是一对圆括号,括住传递给函数的实参列表(可能为空)。
same_isbn 函数接受单个参数,且该参数是另一个 Sales_item 对象。函数调用
total.same_isbn(trans)
将 trans 作为参数传递给名为 same_isbn 的函数,该函数是名为 total的对象的成员。它将比较参数 trans 的 ISBN 与函数 same_isbn 要操作的对象total的 ISBN。效果是测试两个对象是否具有相同的 ISBN。
如果对象具有相同的 ISBN,执行 if 后面的语句;否则,如果对象具有不同的 ISBN,则执行 else 分支的语句块。