Skip to Content
C++程序设计:原理与实践(基础篇)(原书第2版)
book

C++程序设计:原理与实践(基础篇)(原书第2版)

by 本贾尼 斯特劳斯特鲁普
August 2021
Intermediate to advanced
450 pages
9h 36m
Chinese
Pearson
Content preview from C++程序设计:原理与实践(基础篇)(原书第2版)

7.8.2 引入name单词

到现在为止,我们已经对程序进行了很好的改进,但很遗憾,它还不能正常运行。这并不意外,我们对程序下的“第一刀”通常是不会正常工作的,因为我们甚至还没有完成程序——程序还无法通过编译。程序还不能识别单词'=',但这可以通过在Token_stream::get()中添加一种情况处理来简单实现。但是对于单词let和name,必须修改get()函数来识别这些单词。一种实现如下:

首先请注意函数调用isalpha(ch),它用来检测输入ch是否为字符。isalpha()是一个标准库函数,可通过包含头文件std_lib_facilities.h来使用。更多的字符分类函数的内容可以参考11.6节。识别变量名与识别数字的方法是相同的:找到一个正确类别的字符(这里是一个字母)以后,使用putback()函数把它退回,然后使用>>读取整个变量名。

不幸的是,程序还是不能通过编译,因为Token无法存储一个字符串,编译器不能识别Token{name,s}。不过,修改Token的定义可以解决这个问题,必须使Token可以存储一个string或者double,并支持三种不同的初始化方法,即

·只有kind,例如Token{'*'}。

·一个kind和一个数,例如Token{number,4.321}。

·一个kind和一个name,例如Token{name,''pi''}。

为此,引入三个初始化函数,由于它们是用于构造对象的,所以我们称之为构造函数:

构造函数可使初始化过程更灵活,也易于控制。关于构造函数的细节将在第9章(9.4.2节和9.7节)中展开。 ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

C++语言导学(原书第2版)

C++语言导学(原书第2版)

本贾尼 斯特劳斯特鲁普
管理Kubernetes

管理Kubernetes

Brendan Burns, Craig Tracey
Go程序设计语言

Go程序设计语言

艾伦A. A.多诺万, 布莱恩W. 柯尼汉

Publisher Resources

ISBN: 9787111562252