- 内容提要
- 前言
- 第 1 章 预备知识
- 第 2 章 开始学习 C++
- 第 3 章 处理数据
- 第 4 章 复合类型
- 第 5 章 循环和关系表达式
- 第 6 章 分支语句和逻辑运算符
- 第 7 章 函数——C++的编程模块
- 第 8 章 函数探幽
- 第 9 章 内存模型和名称空间
- 第 10 章 对象和类
- 第 11 章 使用类
- 第 12 章 类和动态内存分配
- 第 13 章 类继承
- 第 14 章 C++中的代码重用
- 第 15 章 友元、异常和其他
- 第 16 章 string 类和标准模板库
- 第 17 章 输入、输出和文件
- 第 18 章 探讨 C++新标准
- 附录 A 计数系统
- 附录 B C++保留字
- 附录 C ASCII 字符集
- 附录 D 运算符优先级
- 附录 E 其他运算符
- 附录 F 模板类 string
- 附录 G 标准模板库方法和函数
- 附录 H 精选读物和网上资源
- 附录 I 转换为 ISO 标准 C++
- 附录 J 复习题答案
2.3 其他 C++语句
再来看几个 C++语句的例子。程序清单 2.3 中的程序对前一个程序进行了扩展,要求在程序运行时输入一个值。为实现这项任务,它使用了 cin,这是与 cout 对应的用于输入的对象。另外,该程序还演示了 cout 对象的多功能性。
程序清单 2.3 getinfo.cpp
程序调整
如果您发现在以前的程序清单中需要添加 cin.get( ),则在这个程序清单中,需要添加两条 cin.get( ) 语句,这样才能在屏幕上看到输出。第一条 cin.get( ) 语句在您输入数字并按 Enter 键时读取输入,而第二条 cin.get( ) 语句让程序暂停,直到您按 Enter 键。
下面是该程序的运行情况:
该程序包含两项新特性:用 cin 来读取键盘输入以及将四条输出语句组合成一条。下面分别介绍它们。
2.3.1 使用 cin
上面的输出表明,从键盘输入的值(12)最终被赋给变量 carrots。下面就是执行这项功能的语句:
从这条语句可知,信息从 cin 流向 carrots。显然,对这一过程有更为正式的描述。就像 C++将输出看作是流出程序的字符流一样,它也将输入看作是流入程序的字符流。iostream 文件将 cin 定义为一个表示这种流的对象。输出时,<<运算符将字符串插入到输出流中;输入时,cin 使用>>运算符从输入流中抽取字符。通常,需要在运算符右侧提供一个变量,以接收抽取的信息(符号<<和>>被选择用来指示信息流的方向)。
与 cout 一样,cin 也是一个智能对象。它可以将通过键盘输入的一系列字符(即输入)转换为接收信息的变量能够接受的形式。在这个例子中,程序将 carrots 声明为一个整型变量,因此输入被转换为计算机用来存储整数的数字形式。
2.3.2 使用 cout 进行拼接
getinfo.cpp 中的另一项新特性是将 4 条输出语句合并为一条。iostream 文件定义了<<运算符,以便可以像下面这样合并(拼接)输出:
这样能够将字符串输出和整数输出合并为一条语句。得到的输出与下述代码生成的相似:
根据有关 cout 的建议,也可以按照这样的方式重写拼接版本,即将一条语句放在 4 行上:
这是由于 C++的自由格式规则将标记间的换行符和空格看作是可相互替换的。当代码行很长,限制输出的显示风格时,最后一种技术很方便。
需要注意的另一点是:
和
在同一行中。
这是因为前面指出过的,cout 语句的输出紧跟在前一条 cout 语句的输出后面。即使两条 cout 语句之前有其他语句,情况也将如此。
2.3.3 类简介
看了足够多的 cin 和 cout 示例后,可以学习有关对象的知识了。具体地说,本节将进一步介绍有关类的知识。正如第 1 章指出的,类是 C++中面向对象编程(OOP)的核心概念之一。
类是用户定义的一种数据类型。要定义类,需要描述它能够表示什么信息和可对数据执行哪些操作。类之于对象就像类型之于变量。也就是说,类定义描述的是数据格式及其用法,而对象则是根据数据格式规范创建的实体。换句话说,如果说类就好比所有著名演员,则对象就好比某个著名的演员,如蛙人 Kermit。我们来扩展这种类比,表示演员的类中包括该类可执行的操作的定义,如念某一角色的台词,表达悲伤、威胁恫吓,接受奖励等。如果了解其他 OOP 术语,就知道 C++类对应于某些语言中的对象类型,而 C++对象对应于对象实例或实例变量。
下面更具体一些。前文讲述过下面的变量声明:
上面的代码将创建一个类型为 int 的变量(carrots)。也就是说,carrots 可以存储整数,可以按特定的方式使用—例如,用于加和减。现在来看 cout。它是一个 ostream 类对象。ostream 类定义(iostream 文件的另一个成员)描述了 ostream 对象表示的数据以及可以对它执行的操作,如将数字或字符串插入到输出流中。同样,cin 是一个 istream 类对象,也是在 iostream 中定义的。
注意:
类描述了一种数据类型的全部属性(包括可使用它执行的操作),对象是根据这些描述创建的实体。
知道类是用户定义的类型,但作为用户,并没有设计 ostream 和 istream 类。就像函数可以来自函数库一样,类也可以来自类库。ostream 和 istream 类就属于这种情况。从技术上说,它们没有被内置到 C++语言中,而是语言标准指定的类。这些类定义位于 iostream 文件中,没有被内置到编译器中。如果愿意,程序员甚至可以修改这些类定义,虽然这不是一个好主意(准确地说,这个主意很糟)。iostream 系列类和相关的 fstream(或文件 I/O)系列类是早期所有的实现都自带的唯一两组类定义。然而,ANSI/ISO C++委员会在 C++标准中添加了其他一些类库。另外,多数实现都在软件包中提供了其他类定义。事实上,C++当前之所以如此有吸引力,很大程度上是由于存在大量支持 UNIX、Macintosh 和 Windows 编程的类库。
类描述指定了可对类对象执行的所有操作。要对特定对象执行这些允许的操作,需要给该对象发送一条消息。例如,如果希望 cout 对象显示一个字符串,应向它发送一条消息,告诉它,“对象!显示这些内容!”C++提供了两种发送消息的方式:一种方式是使用类方法(本质上就是稍后将介绍的函数调用);另一种方式是重新定义运算符,cin 和 cout 采用的就是这种方式。因此,下面的语句使用重新定义的<<运算符将“显示消息”发送给 cout:
在这个例子中,消息带一个参数—要显示的字符串(参见图 2.5)。
图 2.5 向对象发送消息
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论