ID:L1
日记2012年7月27日 第四七天
展开Biu

又改版了。。我差点找不到。。求那个写C+++代码比较好。练习用。。。

为什么又改了。。

[查看全文]
轻舟过
我要学Ruby,于是开个楼
展开Biu

本帖最后由 轻舟过 于 2012-7-27 17:26 编辑

先来吐槽下,在Ruby里0竟然被认为是true,这让其他编程语言情何以堪#7036!

有时间来更新下学习进度

其实是吐槽一下一些比较奇葩的特性,主要是相对C、C++、Java、python而言

奇怪的循环

像这种循环的写法还是挺带感的,看起来也挺直观,很容易能让人理解是“做了3次"和“从1一直做到9”

[mw_shl_code=ruby,true]3.times { print "Ruby! " }

1.upto(9) {|x| print x }

[/mw_shl_code]

都是表达式

在ruby里面所有东西都是表达式,这一点感觉比较特别,比如下面的语句是合法的

[mw_shl_code=ruby,true]minimum = if x < y then x else y end[/mw_shl_code]

这里不得不吐槽一下python里没有类似的语法并且还没有三元表达式?:。

前缀符号和后缀符号

Ruby里的函数可以有特殊符号前缀和后缀,返回布尔值的函数一般会以问号结尾(貌似在lisp里见过),感叹号结尾的成员函数一般会对类本身作修改,这样可以使代码可读性更强

另外,ruby还对不同作用域的变量的符号前缀做了约定。以$开始的变量为全局变量,以@开始的为实例变量

再另外,让我想不到的是“x=”这样的字符串竟然也可以是方法名,于是o.x=1实际上是调用了o的x=函数,好奇怪的特性!

注释

除了普通的以‘#’符号开头的单行注释外,还支持"=begin"和”=end“括起来的多行注释

[查看全文]
轻舟过
我闲着无聊统计了下本版各个ID的发帖数(只算主题帖)
展开Biu

本帖最后由 轻舟过 于 2012-7-25 21:56 编辑

本版:

ID:L1: 46

Richeir: 24

石头肉丸子: 24

软软的上嘴唇: 13

马赫的权杖: 4

CyberZHG: 3

Yukine: 1ninja: 1

小翔: 1

丨端木丶荒冬: 1

ゝ_____Waiting: 1

范小羽: 1

轻舟过: 1

NateSilver: 1

熊猫拯救世界: 1

湿漉漉: 1

605627503: 1

计算姬: 1

AcGsweety海: 1

挨T虫穴: 1

---------------------------

整个创世者联盟

Nekor: 344

世界之上: 218

软软的上嘴唇: 109

Raygarlees: 68

RadiationTeam: 64

石头肉丸子: 55

ID:L1: 47

风音洛洛: 36

SnSKinzu: 30

小翔: 27

血のばら: 27

Richeir: 26

Eangel: 23

hcl: 21

Sleepwalking: 20

刚八呆哟: 20

Bugsong: 18

八木烧纸君: 17

挨T虫穴: 16

轻舟过: 14

戴龙猫: 14

马赫的权杖: 13

CyberZHG: 11

秋声赋: 11

羞怯的渣白君: 10

Alan_Tanis: 8

七煞·裂风: 8

EricHo: 8

NateSilver: 8

little馒: 8

丨端木丶荒冬: 7

请叫我邪恶的酱油君: 7

xushine: 7

Bugjay: 6

metherlence: 6

踢馆帝: 6

路西尔艾利斯: 6

chinvo: 6

--T-T--: 5

irisr: 5

LonghronShen: 5

叫我PANDA君: 4

UnknowName: 4

若雪lapislazuri: 4

子文: 4

crab2313: 4

苏Xx摩ヤ: 4

氺菓: 4

夏默然: 3

delete_lazy: 3

1259534964: 3

r7君: 3

firzencode: 3

ほむら: 3

小刀: 3

tianyaruichang: 3

残冬Nightmare: 3

万事屋神乐: 3

神木凛: 3

二哥不寂寞: 3

好人地方君: 3

Monster_yanni: 3

ninja: 2

小海: 2

叶神京: 2

00: 2

Captain: 2

小野千帆: 2

ohyes: 2

TheRealist: 2

若水的少年: 2

bad_apple: 2

墟源: 2

卖的很欢乐: 2

ΣSyaoran: 2

懒RP: 2

洛璃酱: 2

琴酒: 2

凛凛子: 2

自由草堂: 2

名为雨捷的超神: 2

simple: 2

ayumikin: 2

湿漉漉: 2

三步页君: 2

翼汐羽: 2

belovedkid: 2

胃痛君: 2

淹死的江: 2

HOKAWAN: 2

kevinyzd: 2

linskj: 2

Flagalac: 2

嬷嬷: 2

MDO730: 1

虹why: 1

现在请叫我OTAKU: 1

yuli: 1

洒度: 1

老谢: 1

高坂京介: 1

Mr__Flower: 1

V葵葵葵V: 1

媚_者无疆: 1

Moz: 1

假想世界: 1

℡書心__♂: 1

失落的指环: 1

LKT007: 1

伊藤哲学: 1

605627503: 1

acg袋鼠: 1

IX爷: 1

纯天然苦逼: 1

帕奇-式: 1

熊叔_wong: 1

BoringFan: 1

线中人: 1

Dekembrios: 1

ashunicorn: 1

XUXEX咖喱棒: 1

Mian_弥安: 1

hupanxx: 1

小收: 1

616225684: 1

吃货呐冒个泡: 1

a949916388: 1

全能的神: 1

放開那桶妹汁: 1

Sin.re: 1

ViX-NeKO君: 1

恋渊木易: 1

十八燕云: 1

张-健-豪: 1

堂本刚砸光: 1

SilverBullet: 1

Unibrighter: 1

ljw2040728: 1

阿诺的西子酱: 1

DOD_XP: 1

崬阁: 1

akira_ou: 1

Mrr.Fox: 1

奈奈: 1

huizhouma: 1

☪修☆咻: 1

七子: 1

错觉: 1

Rock_Cannon: 1

hackermaomao: 1

Kindred、: 1

熊猫拯救世界: 1

唔系地球人: 1

空空空空格: 1

princesself: 1

浪之骄子: 1

yuki-ki: 1

要有爱: 1

▲二次控丶: 1

zz1030: 1

kesaan: 1

ppn-dark-fight: 1

某海洋: 1

狐狸几: 1

epuppet: 1

范小羽: 1

_Neko_: 1

坂上龍二: 1

lostideal: 1

Sasa。: 1

汐歌_Cyz: 1

破折: 1

-_彼蓝、: 1

一千円: 1

九月十一号: 1

Epron: 1

gkjean: 1

361656340: 1

笨蛋打滚: 1

大怪兽侵占地球Ooo: 1

xdemon12x: 1

Chi_Max: 1

Kevin颜_: 1

coolcfan: 1

冬眠睡不着: 1

69chan: 1

红白无节操: 1

Croual回忆: 1

小小young: 1

elenion: 1

lissome: 1

`小新偷了樱桃: 1

fanghy12345: 1

Liang潇Jun: 1

kmxz: 1

酥软香甜面包君: 1

lxaw1234: 1

YQ君: 1

Moen: 1

篬月赫莲: 1

plusky: 1

暮零天晨: 1

MsepTemBer: 1

飞天鸽: 1

阿兔子: 1

速水脑残粉: 1

Loyalsoldier: 1

猫小宅: 1

Tonight: 1

计算姬: 1

苦逼大表弟: 1

Herooge: 1

natalisilver: 1

铁马哥再出江湖: 1

StarTrack: 1

scoer: 1

Yukine: 1

wqh1996: 1

呐喊de猫: 1

君听: 1

ゝ_____Waiting: 1

glacier: 1

爱咆哮的少年: 1

软灬綿綿: 1

腹黑的四季君: 1

AcGsweety海: 1

祎_Heedamn: 1

夏な娜: 1

灵夕靖: 1

试作型大叔: 1

魔神苏莲萦: 1

404-not-found: 1

SATI: 1

o70078: 1

尘尘: 1

香哥的怪盗史: 1

NarryLEGo: 1

altynai: 1

Jason_Jan: 1

melee: 1

つかの間の時間: 1

玉面人字拖: 1

[查看全文]
ID:L1
日记2012年7月25日 第四五天
展开Biu

因为看不懂重新开始了

第一页是封面

前言

本书全面介绍了 C++ 语言。作为一本入门书(Primer),它以教程的形式

对 C++ 语言进行清晰的讲解,并辅以丰富的示例和各种学习辅助手段。与大多

数入门教程不同,本书对 C++ 语言本身进行了详尽的描述,并特别着重介绍了

目前通行的、行之有效的程序设计技巧。

无数程序员曾使用本书的前几个版本学习 C++,在此期间 C++ 也逐渐发展

成熟。这些年来,C++ 语言的发展方向以及 C++ 程序员的关注点,已经从以往

注重运行时的效率,转到千方百计地提高程序员的编程效率上。随着标准库的广

泛可用,我们现在能够比以往任何时候更高效地学习和使用 C++。本书这一版本

充分体现了这一点。

第四版的改动

为了体现现代 C++ 编程风格,我们重新组织并重写了本书。书中不再强调

低层编程技术,而把中心转向标准库的使用。书中很早就开始介绍标准库,示例

也已经重新改写,充分利用了标准库设施。我们也对语言主题叙述的先后次序进

行了重新编排,使讲解更加流畅。

除重新组织内容外,为了便于读者理解,我们还增加了几个新的环节。每一

章都新增了“小结”和“术语”,概括本章要点。读者可以利用这些部分进行自

我检查;如果发现还有不理解的概念,可以重新学习该章中的相关部分。

书中还加入了下述几种学习辅助手段:

• 重要术语用黑体表示,我们认为读者已经熟悉的重要术语则用楷体表示。

这些术语都会出现在的“术语”部分。

• 书中用特殊版式突出标注的文字,是为了向读者提醒语言的重要特征,警

示常见的错误,标明良好的编程实践,列出通用的使用技巧。希望这些标

注可以帮助读者更快地消化重要概念,避免犯常见错误。

• 为了更易于理解各种特征或概念间的关系,书中大量使用了前后交叉引

用。

• 对于某些重要概念和 C++ 新手最头疼的问题,我们进行了额外的讨论和

解释。这部分也以特殊版式标出。

• 学习任何程序设计语言都需要编写程序。因此,本提供了大量的示例。所

有示例的源代码可以从下列网址获得:

http://www.awprofessional.com/cpp_primer

万变不离其宗,本书保持了前几版的特色,仍然是一部全面介绍 C++ 的教程。

我们的目标是提供一本清晰、全面、准确的指南性读物。我们通过讲解一系列示

例来教授 C++ 语言,示例除了解释语言特征外,还展示了如何善用这门语言。

2页

虽然读者不需要事先学过 C 语言(C++ 最初的基础)的知识,但我们假定读者

已经掌握了一种现代结构化语言。

本书结构

本介绍了 C++ 国际标准,既涵盖语言的特征,又讲述了也是标准组成部分

的丰富标准库。C++ 的强大很大程度上来自它支持抽象程序设计。要学会用 C++

高效地编程,只是掌握句法和语义是远远不够的。我们的重点在于,教会读者怎

样利用 C++ 的特性,快速地写出安全的而且性能可与 C 语言低层程序相媲美的

程序。

C++ 是一种大型的编程语言,这可能会吓倒一些新手。现代 C++ 可以看成由

以下三部分组成:

• 低级语言,多半继承自 C。

• 更高级的语言特征,用户可以借此定义自己的数据类型,组织大规模的程

序和系统。

• 标准库,使用上述高级特征提供一整套有用的数据结构和算法。

多数 C++ 教材按照下面的顺序展开:先讲低级细节,再介绍更高级的语言特

征;在讲完整个语言后才开始解释标准库。结果往往使读者纠缠于低级的程序设

计问题和复杂类型定义的编写等细节,而不能真正领会抽象编程的强大,更不用

说学到足够的知识去创建自己的抽象了。

本版中我们独辟蹊径。一开始就讲述语言的基础知识和标准库,这样读者就

可以写出比较大的有实际意义的程序来。透彻阐释了使用标准库(并且用标准库

编写了各种抽象程序)的基础知识之后,我们才进入下一步,学习用 C++ 的其

他高级特征来编写自己的抽象。

第一和第二部分讨论语言的基础知识和标准库设施。其重点在于学会如何编

写 C++ 程序,如何使用标准库提供的抽象设施。大部分 C++ 程序员需要了解本

书这两部分的内容。

除了讲解基础知识以外,这两部分还有另外一个重要的意图。标准库设施本

身是用 C++ 编写的抽象数据类型,定义标准库使用的是任何 C++ 程序员都能使

用的构造类的语言特征。我们教授 C++ 的经验说明,一开始就使用设计良好的

抽象类型,读者会更容易理解如何建立自己的类型。

第三到第五部分着重讨论如何编写自己的类型。第三部分介绍 C++ 的核心,

即对对类的支持。类机制提供了编写自定义抽象的基础。类也是第四部分中讨论的

面向对象编程和泛型编程的基础。全书正文的最后是第五部分,这一部分讨论了

一些高级特征,它们在构建大型复杂系统时最为常用。

3页

致谢

与前几版一新,我们要感谢 Bjarne Stroustrup,他不知疲倦地从事着 C++

方面的工作,他与我们的深厚友情由来已久。我们还要感谢 Alex Stepanov,正

是他最初凭借敏锐的洞察力创造了容器和算法的概念,这些概念最终形成了标准

库的核心。此外,我们要感谢 C++ 标准委员会的所有成员,他们多年来为 C++ 澄

清概念、细化标准和改进功能付出了艰苦的努力。

我们要衷心地感谢本书审稿人,他们审阅了我们的多份书稿,帮助我们对本

书进行了无数大大小小的修改。他们是 Paul Abrahams,Michael Ball,Mary

Dageforde,Paul DuBois,Matt Greenwood,Matthew P. Johnson,Andrew Koenig,

Nevin Liber,Bill Locke,Robert Murray,Phil Romanik,Justin Shaw,Victor

Shtern,Clovis Tondo,Daveed Vandevoorde 和 Steve Vinoski。

书中所有示例都已通过 GNU 和微软编译器的编译。感谢他们的开发者和所

有开发其他 C++ 编译器的人,是他们使 C++ 变成现实。

最后,感谢 的工作人员,他们引领了这一版的整个出版过程:——我们最

初的编辑,是他提出出版本书的新版,他从本书最初版本起就一直致力于本书;

——我们的新编辑,他坚持更新和精简本书内容,极大地改进了这一版本;——

他保证了我们所有人能按进度工作;还有 、、和,他们和我们一起经历了整个设计和制作过程。

4页

目录

前言 ..................................................................................................................................................1

第四版的改动...........................................................................................................................2

本书结构...................................................................................................................................3

致谢...........................................................................................................................................4

第一章快速入门...........................................................................................................................17

1.1. 编写简单的 C++ 程序..........................................................................................17

调用 GNU 或微软编译器....................................................................................................20

Exercises Section 1.1.1 ...........................................................................................................21

1.2. 初窥输入/输出........................................................................................................21

关键概念:已初始化变量和未初始化变量.........................................................................26

Exercises Section 1.2.2 ...........................................................................................................27

1.3. 关于注释.................................................................................................................27

Exercises Section 1.3 ......................................................................................................29

1.4. 控制结构.................................................................................................................29

关键概念:C++ 程序的缩排和格式....................................................................................31

再谈编译.................................................................................................................................34

Exercises Section 1.4.2 ...........................................................................................................35

Exercises Section 1.4.3 ...........................................................................................................37

从键盘输入文件结束符.........................................................................................................39

Exercises Section 1.4.4 ...........................................................................................................39

1.5. 类的简介.................................................................................................................39

关键概念:类定义行为.........................................................................................................42

Exercises Section 1.5.1 ...........................................................................................................43

Exercises Section 1.5.2 ...........................................................................................................45

1.6. C++ 程序................................................................................................................45

Exercises Section 1.6 ..............................................................................................................47

小结.................................................................................................................................47

术语.................................................................................................................................47

第一部分基本语言.......................................................................................................................54

第二章变量和基本类型.......................................................................................................55

2.1. 基本内置类型.........................................................................................................55

内置类型的机器级表示.........................................................................................................57

建议:使用内置算术类型.....................................................................................................60

Exercises Section 2.1.2 ...........................................................................................................61

2.2. 字面值常量.............................................................................................................61

建议:不要依赖未定义行为.................................................................................................66

Exercises Section 2.2 ..............................................................................................................67

2.3. 变量.........................................................................................................................67

Exercises Section 2.3 ..............................................................................................................68

关键概念:强静态类型.........................................................................................................69

Exercises Section 2.3.1 ...........................................................................................................70

5页

术语:什么是对象?.............................................................................................................71

Exercises Section 2.3.2 ...........................................................................................................73

Exercises Section 2.3.3 ...........................................................................................................77

警告:未初始化的变量引起运行问题.................................................................................78

Exercises Section 2.3.4 ...........................................................................................................79

Exercises Section 2.3.5 ...........................................................................................................81

Exercises Section 2.3.6 ...........................................................................................................84

2.4. const 限定符...........................................................................................................84

Exercises Section 2.4 ..............................................................................................................87

2.5. 引用.........................................................................................................................87

术语:const 引用是指向 const 的引用...........................................................................89

Exercises Section 2.5 ..............................................................................................................90

2.6. typedef 名字............................................................................................................90

2.7. 枚举.........................................................................................................................91

2.8. 类类型.....................................................................................................................93

Exercises Section 2.8 ..............................................................................................................97

2.9. 编写自己的头文件.................................................................................................97

编译和链接多个源文件.........................................................................................................99

Exercises Section 2.9.1 .........................................................................................................102

小结...............................................................................................................................104

术语...............................................................................................................................105

第三章标准库类型.............................................................................................................112

3.1. 命名空间的 using 声明........................................................................................112

Exercises Section 3.1 ............................................................................................................115

Exercises Section 3.1 ............................................................................................................115

3.2. 标准库 string 类型................................................................................................115

警告:标准库string 类型和字符串字面值.....................................................................116

Exercises Section 3.2.1 .........................................................................................................116

Exercises Section 3.2.2 .........................................................................................................119

建议:采用 C 标准库头文件的 C++ 版本.........................................................................127

Exercises Section 3.2.4 .........................................................................................................127

3.3. 标准库 vector 类型.............................................................................................127

关键概念:vector 对象动态增长.....................................................................................130

Exercises Section 3.3.1 .........................................................................................................131

关键概念:安全的泛型编程...............................................................................................134

警告:仅能对确知已存在的元素进行下标操作...............................................................135

Exercises Section 3.3.2 .........................................................................................................136

3.4. 迭代器简介...........................................................................................................136

术语:迭代器和迭代器类型...............................................................................................137

Exercises Section 3.4 ............................................................................................................142

Exercises Section 3.4.1 .........................................................................................................143

3.5. 标准库 bitset .........................................................................................................143

Exercises Section 3.5.2 .........................................................................................................150

小结...............................................................................................................................150

术语...............................................................................................................................

6页

第四章数组和指针.............................................................................................................155

4.1. 数组.......................................................................................................................155

警告:数组的长度是固定的...............................................................................................159

Exercises Section 4.1.1 .........................................................................................................160

Exercises Section 4.1.2 .........................................................................................................162

4.2. 指针的引入...........................................................................................................162

建议:尽量避免使用指针和数组.......................................................................................163

Exercises Section 4.2.2 .........................................................................................................169

关键概念:给指针赋值或通过指针进行赋值...................................................................170

Exercises Section 4.2.3 .........................................................................................................172

Exercises Section 4.2.4 .........................................................................................................177

建议:理解复杂的const 类型的声明.............................................................................180

Exercises Section 4.3 ............................................................................................................182

4.3. C 风格字符串.......................................................................................................182

Exercises Section 4.3 ............................................................................................................188

C 风格字符串与 C++ 的标准库类型string 的比较...................................................192

Exercises Section 4.3.1 .........................................................................................................194

Exercises Section 4.3.2 .........................................................................................................196

4.4. 多维数组...............................................................................................................196

Exercises Section 4.4.1 .........................................................................................................200

小结...............................................................................................................................200

术语...............................................................................................................................200

第五章表达式.....................................................................................................................204

5.1. 算术操作符...........................................................................................................205

警告:溢出和其他算术异常...............................................................................................207

Exercises Section 5.1 ............................................................................................................209

5.2. 关系操作符和逻辑操作符...................................................................................209

Exercises Section 5.2 ............................................................................................................213

5.3. 位操作符...............................................................................................................213

Exercises Section 5.3.1 .........................................................................................................217

5.4. 赋值操作符...........................................................................................................218

Exercises Section 5.4.2 .........................................................................................................221

Exercises Section 5.4.3 .........................................................................................................222

5.5. 自增和自减操作符...............................................................................................222

建议:只有在必要时才使用后置操作符...........................................................................223

建议:简洁即是美...............................................................................................................224

Exercises Section 5.5 ............................................................................................................225

5.6. 箭头操作符...........................................................................................................225

Exercises Section 5.6 ............................................................................................................226

5.7. 条件操作符...........................................................................................................226

Exercises Section 5.7 ............................................................................................................228

5.8. sizeof 操作符........................................................................................................228

Exercises Section 5.8 ............................................................................................................229

5.9. 逗号操作符...........................................................................................................229

7页

Exercises Section 5.9 ............................................................................................................230

5.10. 复合表达式的求值.............................................................................................230

Exercises Section 5.10.2 .......................................................................................................236

建议:复合表达式的处理...................................................................................................238

Exercises Section 5.10.3 .......................................................................................................239

5.11. new 和 delete 表达式........................................................................................239

警告:动态内存的管理容易出错.......................................................................................243

Exercises Section 5.11 ..........................................................................................................244

5.12. 类型转换.............................................................................................................244

Exercises Section 5.12.3 .......................................................................................................250

建议:避免使用强制类型转换...........................................................................................253

Exercises Section 5.12.7 .......................................................................................................255

小结...............................................................................................................................255

术语...............................................................................................................................256

第六章语句.........................................................................................................................261

6.1. 简单语句...............................................................................................................261

6.2. 声明语句...............................................................................................................262

6.3. 复合语句(块)...................................................................................................263

Exercises Section 6.3 ............................................................................................................264

6.4. 语句作用域.........................................................................................................264

6.5. if 语句...................................................................................................................265

Exercises Section 6.5.1 .........................................................................................................270

6.6. switch 语句...........................................................................................................270

Exercises Section 6.6.5 .........................................................................................................278

Code for Exercises in Section 6.6.5 ......................................................................................278

6.7. while 语句.............................................................................................................279

Exercises Section 6.7 ............................................................................................................282

6.8. for 循环语句.........................................................................................................282

Exercises Section 6.8.2 .........................................................................................................286

6.9. do while 语句........................................................................................................286

Exercises Section 6.9 ............................................................................................................289

6.10. break 语句...........................................................................................................289

Exercises Section 6.10 ..........................................................................................................291

6.11. continue 语句......................................................................................................291

Exercises Section 6.11 ..........................................................................................................292

6.12. goto 语句.............................................................................................................292

Exercises Section 6.13.2 .......................................................................................................297

6.14. 使用预处理器进行调试.....................................................................................299

Exercises Section 6.14 ..........................................................................................................301

小结...............................................................................................................................301

术语...............................................................................................................................302

第七章函数.........................................................................................................................306

Exercises Section 6.12 ..........................................................................................................293

6.13. try 块和异常处理...............................................................................................293

8Exercises Section 6.13.2 .......................................................................................................297

6.14. 使用预处理器进行调试.....................................................................................299

Exercises Section 6.14 ..........................................................................................................301

小结...............................................................................................................................301

术语...............................................................................................................................302

第七章函数.........................................................................................................................306

8页

7.1. 函数的定义...........................................................................................................306

Exercises Section 7.1.2 .........................................................................................................311

7.2. 参数传递...............................................................................................................311

Exercises Section 7.2.1 .........................................................................................................314

Exercises Section 7.2.2 .........................................................................................................321

Exercises Section 7.2.5 .........................................................................................................328

Exercises Section 7.2.6 .........................................................................................................329

7.3. return 语句............................................................................................................330

Exercises Section 7.3.2 .........................................................................................................337

Exercises Section 7.3.3 .........................................................................................................339

7.4. 函数声明...............................................................................................................339

Exercises Section 7.4 ............................................................................................................341

Exercises Section 7.4.1 .........................................................................................................344

7.5. 局部对象...............................................................................................................344

Exercises Section 7.5.2 .........................................................................................................346

7.6. 内联函数...............................................................................................................346

Exercises Section 7.6 ............................................................................................................348

7.7. 类的成员函数.......................................................................................................348

Exercises Section 7.7.4 .........................................................................................................356

7.8. 重载函数...............................................................................................................356

建议:何时不重载函数名...................................................................................................359

Exercises Section 7.8.1 .........................................................................................................362

Exercises Section 7.8.3 .........................................................................................................366

Exercises Section 7.8.4 .........................................................................................................370

7.9. 指向函数的指针...................................................................................................370

小结...............................................................................................................................374

术语...............................................................................................................................375

第八章标准 IO 库............................................................................................................379

8.1. 面向对象的标准库...............................................................................................379

Exercises Section 8.1 ............................................................................................................383

8.2. 条件状态...............................................................................................................383

Exercises Section 8.2 ............................................................................................................387

8.3. 输出缓冲区的管理...............................................................................................387

警告:如果程序崩溃了,则不会刷新缓冲区...................................................................388

8.4. 文件的输入和输出...............................................................................................389

警告:C++ 中的文件名......................................................................................................391

Exercises Section 8.4.1 .........................................................................................................394

Exercises Section 8.4.3 .........................................................................................................398

8.5. 字符串流...............................................................................................................398

Exercises Section 8.5 ............................................................................................................401

小结...............................................................................................................................401

术语...............................................................................................................................401

第二部分:容器和算法...............................................................................................................403

第九章. 顺序容器................................................................................................................404

9页

9.1. 顺序容器的定义...................................................................................................405

Exercises Section 9.1.1 .........................................................................................................409

Exercises Section 9.1.2 .........................................................................................................411

9.2. 迭代器和迭代器范围...........................................................................................411

Exercises Section 9.2 ............................................................................................................414

对形成迭代器范围的迭代器的要求...................................................................................415

Exercises Section 9.2.1 .........................................................................................................417

9.3. 每种顺序容器都提供了一组有用的类型定义以及以下操作: .......................418

Exercises Section 9.3.1 .........................................................................................................419

关键概念:容器元素都是副本...........................................................................................421

Exercises Section 9.3.3 .........................................................................................................425

Exercises Section 9.3.4 .........................................................................................................427

Exercises Section 9.3.5 .........................................................................................................429

Exercises Section 9.3.6 .........................................................................................................431

Exercises Section 9.3.7 .........................................................................................................434

Exercises Section 9.3.8 .........................................................................................................437

9.4. vector 容器的自增长............................................................................................437

Exercises Section 9.4.1 .........................................................................................................441

9.5. 容器的选用...........................................................................................................441

Exercises Section 9.5 ............................................................................................................444

9.6. 再谈 string 类型.............................................................................................444

Exercises Section 9.6 ....................................................................................................446

Exercises Section 9.6.4 ................................................................................................456

9.7. 容器适配器.........................................................................................................459

Exercises Section 9.7.2 ................................................................................................463

小结...............................................................................................................................463

术语...............................................................................................................................463

第十章 关联容器.................................................................................................................466

10.1. 引言:pair 类型.............................................................................................466

Exercises Section 10.1 ..................................................................................................469

10.2. 关联容器...........................................................................................................469

Exercises Section 10.2 ..................................................................................................470

10.3. map 类型...........................................................................................................470

Exercises Section 10.3.1 ..............................................................................................472

Exercises Section 10.3.2 ..............................................................................................473

Exercises Section 10.3.4 ..............................................................................................475

Exercises Section 10.3.5 ..............................................................................................479

Exercises Section 10.3.6 ..............................................................................................480

Exercises Section 10.3.9 ..............................................................................................485

10.4. set 类型...........................................................................................................485

Exercises Section 10.4 ..................................................................................................486

Exercises Section 10.4.2 ..............................................................................................489

10.5. multimap 和 multiset 类型........................................................................490

Exercises Section 10.5.2 ..............................................................................................494

10页

10.6. 容器的综合应用:文本查询程序...................................................................495

Exercises Section 10.6.2 ..............................................................................................498

Exercises Section 10.6.3 ..............................................................................................501

Exercises Section 10.6.4 ..............................................................................................503

小结...............................................................................................................................503

术语...............................................................................................................................504

第十一章 泛型算法.............................................................................................................506

11.1. 概述...................................................................................................................506

Exercises Section 11.1 ..................................................................................................509

关键概念:算法永不执行容器提供的操作.......................................................................509

11.2. 初窥算法...........................................................................................................510

关键概念:迭代器实参类型...............................................................................................512

Exercises Section 11.2.1 ..............................................................................................512

Exercises Section 11.2.2 ..............................................................................................515

Exercises Section 11.2.3 ..............................................................................................521

11.3. 再谈迭代器.......................................................................................................521

Exercises Section 11.3.1 ..............................................................................................523

Exercises Section 11.3.2 ..............................................................................................529

Exercises Section 11.3.3 ..............................................................................................532

关键概念:关联容器与算法...............................................................................................534

Exercises Section 11.3.5 ..............................................................................................535

11.4. 泛型算法的结构...............................................................................................536

Exercises Section 11.4.2 ..............................................................................................539

11.5. 容器特有的算法...............................................................................................539

Exercises Section 11.5 ..................................................................................................541

Exercises Section 11.5 ..................................................................................................541

小结...............................................................................................................................541

术语...............................................................................................................................542

第三部分:类和数据抽象...........................................................................................................545

第十二章 类.........................................................................................................................546

12.1. 类的定义和声明...............................................................................................546

Exercises Section 12.1.1 ..............................................................................................548

建议:具体类型和抽象类型...............................................................................................549

关键概念:数据抽象和封装的好处...................................................................................551

Exercises Section 12.1.2 ..............................................................................................551

Exercises Section 12.1.3 ..............................................................................................555

Exercises Section 12.1.4 ..............................................................................................557

12.2. 隐含的 this 指针...........................................................................................558

建议:用于公共代码的私有实用函数...............................................................................562

Exercises Section 12.2 ..................................................................................................563

12.3. 类作用域...........................................................................................................563

Exercises Section 12.3 ..................................................................................................566

Exercises Section 12.3.1 ..............................................................................................571

12.4. 构造函数...........................................................................................................571

Exercises Section 12.4 ..................................................................................................573

11页

建议:使用构造函数初始化列表.......................................................................................577

Exercises Section 12.4.1 ..............................................................................................579

Exercises Section 12.4.2 ..............................................................................................580

Exercises Section 12.4.3 ..............................................................................................583

Exercises Section 12.4.4 ..............................................................................................586

Exercises Section 12.4.5 ..............................................................................................588

12.5. 友元...................................................................................................................588

Exercises Section 12.5 ..................................................................................................591

12.6. static 类成员................................................................................................591

Exercises Section 12.6 ..................................................................................................593

Exercises Section 12.6.1 ..............................................................................................594

Exercises Section 12.6.2 ..............................................................................................597

小结...............................................................................................................................597

术语...............................................................................................................................598

第十三章 复制控制.............................................................................................................601

13.1. 复制构造函数...................................................................................................602

Exercises Section 13.1 ..................................................................................................604

Exercises Section 13.1.2 ..............................................................................................607

13.2. 赋值操作符.......................................................................................................608

Exercises Section 13.2 ..................................................................................................610

13.3. 析构函数...........................................................................................................611

Exercises Section 13.3 ..................................................................................................613

13.4. 消息处理示例...................................................................................................614

Exercises Section 13.4 ..................................................................................................620

13.5. 管理指针成员...................................................................................................620

Exercises Section 13.5 ..................................................................................................623

建议:管理指针成员...........................................................................................................628

Exercises Section 13.5.1 ..............................................................................................629

Exercises Section 13.5.2 ..............................................................................................631

小结...............................................................................................................................632

术语...............................................................................................................................632

第十四章 重载操作符与转换.............................................................................................635

14.1. 重载操作符的定义.............................................................................................635

习题 14.1..............................................................................................................................640

警告:审慎使用操作符重载...............................................................................................642

Exercises Section 14.1.1 .......................................................................................................643

14.2. 输入和输出操作符.............................................................................................643

Exercises Section 14.2.1 .......................................................................................................646

Exercises Section 14.2.2 ..............................................................................................649

14.3. 算术操作符和关系操作符.................................................................................649

Exercises Section 14.3 ..........................................................................................................651

14.4. 赋值操作符.........................................................................................................652

Exercises Section 14.4 ..........................................................................................................654

14.5. 下标操作符.........................................................................................................654

12页

Exercises Section 14.5 ..........................................................................................................656

14.6. 成员访问操作符.................................................................................................656

Exercises Section 14.6 ..........................................................................................................660

14.7. 自增操作符和自减操作符.................................................................................660

Exercises Section 14.7 ..........................................................................................................665

14.8. 调用操作符和函数对象.....................................................................................665

Exercises Section 14.8 ..........................................................................................................666

Exercises Section 14.8.1 .......................................................................................................669

Exercises Section 14.8.3 ..............................................................................................672

14.9. 转换与类类型.....................................................................................................673

Exercises Section 14.9.2 .......................................................................................................679

警告:避免转换函数的过度使用.......................................................................................684

Exercises Section 14.9.4 .......................................................................................................688

警告:转换和操作符...........................................................................................................690

Exercises Section 14.9.5 .......................................................................................................692

小结...............................................................................................................................692

术语...............................................................................................................................693

第四部分:面向对象编程与泛型编程.......................................................................................695

第十五章. 面向对象编程...................................................................................................696

15.1. 面向对象编程:概述.........................................................................................696

15.2. 定义基类和派生类.............................................................................................698

Exercises Section 15.2.1 .......................................................................................................701

关键概念:类设计与受保护成员.......................................................................................702

Exercises Section 15.2.3 .......................................................................................................707

关键概念:C++ 中的多态性..............................................................................................710Exercises Section 15.2.4 .......................................................................................................713

关键概念:继承与组合.......................................................................................................716

Exercises Section 15.2.5 .......................................................................................................719

Exercises Section 15.2.7 .......................................................................................................721

15.3. 转换与继承.........................................................................................................721

15.4. 构造函数和复制控制.........................................................................................725

关键概念:重构...................................................................................................................729

关键概念:尊重基类接口...................................................................................................730

Exercises Section 15.4.2 .......................................................................................................731

Exercises Section 15.4.4 .......................................................................................................736

15.5. 继承情况下的类作用域.....................................................................................737

Exercises Section 15.5.1 .......................................................................................................738

Exercises Section 15.5.2 .......................................................................................................740

关键概念:名字查找与继承...............................................................................................743

Exercises Section 15.5.4 ..............................................................................................744

15.6. 纯虚函数.............................................................................................................745

Exercises Section 15.6 ..........................................................................................................746

15.7. 容器与继承.........................................................................................................746

Exercises Section 15.7 ..........................................................................................................747

13页

15.8. 句柄类与继承.....................................................................................................747

Exercises Section 15.8.2 .......................................................................................................753

Exercises Section 15.8.3 .......................................................................................................758

15.9. 再谈文本查询示例.............................................................................................758

Exercises Section 15.9.2 .......................................................................................................764

Exercises Section 15.9.5 .......................................................................................................772

Exercises Section 15.9.6 .......................................................................................................774

小结...............................................................................................................................774

术语...............................................................................................................................775

第十六章 模板和泛型编程.................................................................................................778

16.1. 模板定义.............................................................................................................778

Exercises Section 16.1.1 .......................................................................................................781

Exercises Section 16.1.2 .......................................................................................................783

Exercises Section 16.1.3 .......................................................................................................786

Exercises Section 16.1.4 .......................................................................................................789

Exercises Section 16.1.5 .......................................................................................................790

Exercises Section 16.1.6 .......................................................................................................792

警告:链接时的编译时错误...............................................................................................793

16.2. 实例化.................................................................................................................793

Exercises Section 16.2.1 .......................................................................................................801

Exercises Section 16.2.2 ..............................................................................................804

16.3. 模板编译模型.....................................................................................................804

Exercises Section 16.3 ..........................................................................................................807

警告:类模板中的名字查找...............................................................................................808

16.4. 类模板成员.........................................................................................................808

Exercises Section 16.4 ..........................................................................................................813

Exercises Section 16.4.1 .......................................................................................................818

Exercises Section 16.4.2 .......................................................................................................820

Exercises Section 16.4.4 .......................................................................................................826

Exercises Section 16.4.6 .......................................................................................................832

16.5. 一个泛型句柄类.................................................................................................833

Exercises Section 16.5.1 .......................................................................................................836

Exercises Section 16.5.2 .......................................................................................................839

16.6. 模板特化.............................................................................................................839

Exercises Section 16.6.1 .......................................................................................................843

Exercises Section 16.6.2 .......................................................................................................846

Exercises Section 16.6.3 .......................................................................................................848

16.7. 重载与函数模板.................................................................................................849

Exercises Section 16.7 ..........................................................................................................853

小结...............................................................................................................................853

术语...............................................................................................................................854

第五部分 高级主题...................................................................................................................857

第十七章 用于大型程序的工具.......................................................................................858

17.1. 异常处理.............................................................................................................858

14页

Exercises Section 17.1.1 .......................................................................................................862

Exercises Section 17.1.3 .......................................................................................................866

Exercises Section 17.1.5 .......................................................................................................869

Exercises Section 17.1.8 .......................................................................................................874

Exercises Section 17.1.9 .......................................................................................................881

警告:Auto_ptr 缺陷.........................................................................................................882

Exercises Section 17.1.11......................................................................................................888

17.2. 命名空间...........................................................................................................888

Exercises Section 17.2.1 ..............................................................................................894

Exercises Section 17.2.2 ..............................................................................................895

未命名的命名空间取代文件中的静态声明.......................................................................897

Exercises Section 17.2.3 ..............................................................................................897

Exercises Section 17.2.4 ..............................................................................................902

警告:避免 Using 指示.....................................................................................................903

Exercises Section 17.2.6 ..............................................................................................910

17.3. 多重继承与虚继承...........................................................................................911

Exercises Section 17.3.1 ..............................................................................................913

Exercises Section 17.3.2 ..............................................................................................915

Exercises Section 17.3.2 ..............................................................................................917

本节习题的代码...................................................................................................................920

Exercises Section 17.3.4 ..............................................................................................921

Exercises Section 17.3.6 ..............................................................................................926

Exercises Section 17.3.7 ..............................................................................................929

小结...............................................................................................................................930

术语...............................................................................................................................931

第十八章 特殊工具与技术.................................................................................................936

18.1. 优化内存分配...................................................................................................936

Exercises Section 18.1.2 ..............................................................................................942

术语对比:new 表达式与 operator new 函数..............................................................942

Exercises Section 18.1.4 ..............................................................................................945

Exercises Section 18.1.5 ..............................................................................................946

Exercises Section 18.1.6 ..............................................................................................949

Exercises Section 18.1.7 ..............................................................................................955

18.2. 运行时类型识别...............................................................................................956

Exercises Section 18.2.1 ..............................................................................................959

Exercises Section 18.2.2 ..............................................................................................961

Exercises Section 18.2.4 ..............................................................................................966

18.3. 类成员的指针...................................................................................................966

Exercises Section 18.3.1 ..............................................................................................969

Exercises Section 18.3.2 ..............................................................................................973

18.4. 嵌套类...............................................................................................................973

Exercises Section 18.4.2 ..............................................................................................979

18.5. 联合:节省空间的类.......................................................................................980

18.6. 局部类...............................................................................................................983

15页

18.7. 固有的不可移植的特征...................................................................................985

对链接到 C 的预处理器支持.............................................................................................992

Exercises Section 18.7.3 ..............................................................................................994

小结...............................................................................................................................994

术语...............................................................................................................................995

附录 A. 标准库..........................................................................................................................999

A.1. 标准库名字和头文件................................................................................................1000

A.2. 算法简介..................................................................................................................1003

A.2.1. 查找对象的算法...........................................................................................1003

A.2.2. 其他只读算法...............................................................................................1005

A.2.3. 二分查找算法...............................................................................................1006

A.2.4. 写容器元素的算法.......................................................................................1006

A.2.5. 划分与排序算法...........................................................................................1008

A.2.6. 通用重新排序操作.......................................................................................1010

A.2.7. 排列算法.......................................................................................................1012

A.2.8. 有序序列的集合算法...................................................................................1013

A.2.9. 最大值和最小值...........................................................................................1014

A.2.10. 算术算法.....................................................................................................1015

A.3. 再谈 IO 库..............................................................................................................1018

A.3.1. 格式状态.......................................................................................................1018

A.3.2. 许多操纵符改变格式状态...........................................................................1019

A.3.3. 控制输出格式...............................................................................................1020

A.3.4. 控制输入格式化...........................................................................................1027

A.3.5. 未格式化的输入/输出操作.......................................................................1027

A.3.6. 单字节操作...................................................................................................1028

A.3.7. 多字节操作...................................................................................................1029

警告:低级例程容易出错.................................................................................................1030

A.3.8. 流的随机访问...............................................................................................1031

A.3.9. 读写同一文件...............................................................................................1034

16页

第一章快速入门

本章介绍 C++ 的大部分基本要素:内置类型、库类型、类类型、变量、表

达式、语句和函数。在这一过程中还会简要说明如何编译和运行程序。

读者读完本章内容并做完练习,就应该可以编写、编译和执行简单的程序。

后面的章节会进一步阐明本章所介绍的主题。

要学会一门新的程序语言,必须实际动手编写程序。在这一章,我们将缩写

程序解决一个简单的数据处理问题:某书店以文件形式保存其每一笔交易。每一

笔交易记录某本书的销售情况,含有 ISBN(国际标准书号,世界上每种图书的

唯一标识符)、销售册数和销售单价。每一笔交易形如:

0-201-70353-X 4 24.99

第一个元素是 ISBN,第二个元素是销售的册数,最后是销售单价。店主定

期地查看这个文件,统计每本书的销售册数、总销售收入以及平均售价。我们要

编写程序来进行这些计算。

在编写这个程序之前,必须知道 C++ 的一些基本特征。至少我们要知道怎么

样编写、编译和执行简单的程序。这个程序要做什么呢?虽然还没有设计解决方

案,但是我们知道程序必须:

• 定义变量。

• 实现输入和输出。

• 定义数据结构来保存要处理的数据。

• 测试是否两条记录具有相同的 ISBN。

• 编写循环。处理交易文件中的每一条记录。

我们将首先考察 C++ 的这些部分,然后编写书店问题的解决方案。

1.1. 编写简单的 C++ 程序

每个 C++ 程序都包含一个或多个函数,而且必须有一个命名为 main。函数

由执行函数功能的语句序列组成。操作系统通过调用 main 函数来执行程序,

main 函数则执行组成自己的语句并返回一个值给操作系统。

下面是一个简单的 main 函数,它不执行任何功能,只是返回一个值:

int main()

{

return 0;

}

17页

操作系统通过 main 函数返回的值来确定程序是否成功执行完毕。返回 0

值表明程序程序成功执行完毕。

main 函数在很多方面都比较特别,其中最重要的是每个 C++ 程序必须含有

main 函数,且 main 函数是(唯一)被操作系统显式调用的函数。

定义 main 函数和定义其他函数一样。定义函数必须指定 4 个元素:返回

类型、函数名、圆括号内的形参表(可能为空)和函数体。main 函数的形参个

数是有限的。本例中定义的 main 函数形参表为空。第 7.2.6 节将介绍 main 函

数中可以定义的其他形参。

main 函数的返回值必须是 int 型,该类型表示整数。int 类型是内置类型,

即该类型是由 C++ 语言定义的。

函数体函数定义的最后部分,是以花括号开始并以花括号结束的语句块:

{

return 0;

}

例中唯一的语句就是 return,该语句终止函数。

注意return 语句后面的分号。在 C++ 中多数语句以分号作为

结束标记。分号很容易被忽略,而漏写分号将会导致莫名其妙

的编译错误信息。

当 return 带上一个值(如 0)时,这个值就是函数的返回值。返回值类型

必须和函数的返回类型相同,或者可以转换成函数的返回类型。对于 main 函数,

返回类型必须是 int 型,0 是 int 型的。

在大多数系统中,main 函数的返回值是一个状态指示器。返回值 0 往往表

示 main 函数成功执行完毕。任何其他非零的返回值都有操作系统定义的含义。

通常非零返回值表明有错误出现。每一种操作系统都有自己的方式告诉用户

main 函数返回什么内容。

18页

1.1.1. 编译与执行程序

程序编写完后需要进行编译。如何进行编译,与具体操作系统和编译器有关。

你需要查看有关参考手册或者询问有经验的同事,以了解所用的编译器的工作细

节。

许多基于 PC 的编译器都在集成开发环境(IDE)中运行,IDE 将编译器与

相关的构建和分析工具绑定在一起。这些环境在开发复杂程序时非常有用,但掌

握起来需要花费一点时间。通常这些环境包含点击式界面,程序员在此界面下可

以编写程序,并使用各种菜单来编译与执行程序本书不介绍怎样使用这些环境。

大多数编译器,包括那些来自 IDE 的,都提供了命令行界面。除非你已经

很熟悉你的 IDE,否则从使用简单的命令行界面开始可能更容易些。这样可以避

免在学习语言之前得先去学习 IDE。

程序源文件命名规范

不管我们使用命令行界面还是 IDE,大多数编译器希望待编译的程序保存在

文件中。程序文件称作源文件。大多数系统中,源文件的名字由文件名(如 prog1)

和文件后缀两部分组成。依据惯例,文件后缀表明该文件是程序。文件后缀通常

也表明程序是用什么语言编写的,以及选择哪一种编译器运行。我们用来编译本

书实例的系统将带有后缀 .cc 的文件视为 C++ 程序,因此我们将该程序保存

为:

prog1.cc

C++ 程序文件的后缀与运行的具体编译器有关。其他的形式还包括。

prog1.cxx

prog1.cpp

prog1.cp

prog1.C

19页

调用 GNU 或微软编译器

调用 C++ 编译器的命令因编译器和操作系统的不同而不同,常用的编译

器是 GNU 编译器和微软 Visual Studio 编译器。调用 GNU 编译器的默

认命令是 g++:

$ g++ prog1.cc -o prog1

这里的 $ 是系统提示符。这个命令产生一个为 prog1 或 prog1.exe 的

可执行文件。在 UNIX 系统下,可执行文件没有后缀;而在 Windows 下,

后缀为 .exe。-o prog1 是编译器参数以及用来存放可执行文件的文件

名。如果省略 -o prog1,那么编译器在 UNIX 系统下产生名为 a.out 而

在 Windows 下产生名为 a.exe 的可执行文件。

微软编译器采用命令 cl 来调用:

C:\directory> cl -GX prog1.cpp

这里的 C:directory> 是系统提示符,directory 是当前目录名。cl 是

调用编译器的命令。-GX 是一个选项,该选项在使用命令行界面编译器

程序时是必需的。微软编译器自动产生与源文件同名的可执行文件,这

个可执行文件具有 .exe 后缀且与源文件同名。本例中,可执行文件命

名为 prog1.exe。

更多的信息请参考你的编译器用户指南。

从命令行编译器

如果使用命令行界面,一般在控制台窗口(例如 UNIX 的 shell 窗口或

Windows 的命令提示窗口)编译程序。假设 main 程序在名为 prog1.cc 的文件

中,可以使用如下命令来编译:

$ CC prog1.cc

这里 CC 是编译器命令名,$ 表示系统提示符。编译器输出一个可执行文件,

我们可以按名调用这个可执行文件。在我们的系统中,编译器产生一个名为

a.exe 的可执行文件。UNIX 编译器则会将可执行文件放到一个名为 a.out 的文

件中。要运行可执行文件,可在命令提示符处给出该文件名:

$ a.exe

20页

执行编译过的程序。在 UNIX 系统中,即使在当前目录,有时还必须指定文

件所在的目录。这种情况下,键入:

$ ./a.exe

“.”后面的斜杠表明文件处于当前目录下。

访问 main 函数的返回值的方式和系统有关。不论 UNIX 还是 Windows 系

统,执行程序后,必须发出一个适当的 echo 命令。UNIX 系统中,通过键入如

下命令获取状态:

$ echo $?

要在 Windows 系统下查看状态,键入

C:\directory> echo %ERRORLEVEL%

Exercises Section 1.1.1

Exercise

1.1:

查看所用的编译器文档,了解它所用的文件命名规范。编

译并运行本节的 main 程序。

Exercise

1.2:

修改程序使其返回 -1。返回值 -1 通常作为程序运行失

败的指示器。然而,系统不同,如何(甚至是否)报告 main

函数运行失败也不同。重新编译并再次运行程序,看看你

的系统如何处理 main 函数的运行失败指示器。

1.2. 初窥输入/输出

C++ 并没有直接定义进行输入或输出(IO)的任何语句,这种功能是由标准

库提供的。IO 库提供了大量的设施。然而,对许多应用,包括本书的例子而言,

编程者只需要了解一些基本概念和操作。

本书的大多数例子都使用了处理格式化输入和输出的 iostream 库。

iostream 库的基础是两种命名为 istream 和 ostream 的类型,分别表示输入

流和输出流。流是指要从某种 IO 设备上读入或写出的字符序列。术语“流”试

图说明字符是随着时间顺序生成或消耗的。

21页

1.2.1. 标准输入与输出对象

标准库定义了 4 个 IO 对象。处理输入时使用命名为 cin(读作 see-in)

的 istream 类型对象。这个对象也称为标准输入。处理输出时使用命名为 cout

(读作 see-out)的 ostream 类型对象,这个对象也称为标准输出。标准库还

定义了另外两个 ostream 对象,分别命名为 cerr 和 clog(分别读作

“see-err”和“see-log”)。cerr 对象又叫作标准错误,通常用来输出警告

和错误信息给程序的使用者。而 clog 对象用于产生程序执行的一般信息。

一般情况下,系统将这些对象与执行程序的窗口联系起来。这样,当我们从

cin 读入时,数据从执行程序的窗口读入,当写到 cin、cerr 或 clog 时,输

出写至同一窗口。运行程序时,大部分操作系统都提供了重定向输入或输出流的

方法。利用重定向可以将这些流与所选择的文件联系起来。

1.2.2. 一个使用IO 库的程序

到目前为止,我们已经明白如何编译与执行简单的程序,虽然那个程序什么

也不做。在开篇的书店问题中,有一些记录含有相同的 ISBN,需要将这些记录

进行汇总,也就是说需要弄清楚如何累加已售出书籍的数量。

为了弄清楚如何解决这个问题,我们先来看应如何把两数相加。我们可以使用 IO 库来扩充 main 程序,要求用户给出两个数,然后输出它们的和:

#include *本站禁止HTML标签噢*

int main()

{

std::cout << "Enter two numbers:" << std::endl;

int v1, v2;

std::cin >> v1 >> v2;

std::cout << "The sum of " << v1 << " and " << v2

<< " is " << v1 + v2 << std::endl;

return 0;

}

程序首先在用户屏幕上显示提示语:

Enter two numbers:

然后程序等待用户输入。如果用户输入

3 7

跟着一个换行符,则程序产生下面的输出

22页

The sum of 3 and 7 is 10

程序的第一行是一个预处理指示:

#include *本站禁止HTML标签噢*

告诉编译器要使用 iostream 库。尖括号里的名字是一个。头文件。程序使

用库工具时必须包含相关的头文件。#include 指示必须单独写成一行——头文

件名和 #include 必须在同一行。通常,#include 指示应出现在任何函数的外

部。而且习惯上,程序的所有 #include 指示都在文件开头部分出现。

写入到流

main 函数体中第一条语句执行了一个表达式。C++ 中,一个表达式由一个

或几个操作数和通常是一个操作符组成。该语句的表达式使用输出操作符(<< 操

作符),在标准输出上输出提示语:

std::cout << "Enter two numbers:" << std::endl;

这个语句用了两次输出操作符。每个输出操作符实例都接受两个操作数:左

操作数必须是 ostream 对象;右操作数是要输出的值。操作符将其右操作数写

到作为其左操作数的 ostream 对象。

C++ 中,每个表达式都会产生一个结果,通常是将操作符作用到其操作数所

产生的值。当操作符是输出操作符时,结果是左操作数的值。也就是说,输出操

作返回的值是输出流本身。

既然输出操作符返回的是其左操作数,那么我们就可以将输出请求链接在一

起。输出提示语的那条语句等价于

(std::cout << "Enter two numbers:") << std::endl;

因为((std::cout << "Enter two numbers:"))返回其左操作数 std::cout,

这条语句等价于

std::cout << "Enter two numbers:";

std::cout << std::endl;

endl 是一个特殊值,称为操纵符,将它写入输出流时,具有输出换行的效

果,并刷新与设备相关联的缓冲区。通过刷新缓冲区,用户可立即看到写入到

流中的输出。

23页

(复制比看累。很多地方都看不懂各种求)

[查看全文]
ID:L1
日记2012年7月24日 第四四天
展开Biu

+322+明天重新看。这样看下去是不会有结果的。。今天不看了明天把看过复制上来求解释。。。只能边复制变求教。。自己完全看不会

[查看全文]
CyberZHG
本帖最后由
展开Biu

本帖最后由 CyberZHG 于 2014-2-15 11:32 编辑

test

[查看全文]
ID:L1
日记2012年7月23日 第四三天
展开Biu

今天希望能多看一点 @59#

[查看全文]
ID:L1
日记2012年7月22日 第四二天
展开Biu

本帖最后由 ID:L1 于 2012-7-24 23:29 编辑

29 继续看不懂的多。。容易看不下去。。@75#

[查看全文]