本书较为全面地介绍了程序设计语言C++的基本概念、基本语法和基本程序思想。全书共分为12章和两个附录,内容包括计算机基础知识、C++基本概念、流程控制语句、函数和编译预处理、构造数据类型、指针、类和对象、继承与派生、多态、输入输出流类库、模板。
本书的写法遵循了计算机中“自顶向下”的思维方式,在整体上自上而下,由点到面,由一般到具体,由简单到复杂地展开。本书有大量精选的例题以及对例题的解析,还有大量反映C++概念和语法的习题。
本书可以作为大专院校理工科学生学习C++语言的教材,也可以作为计算机二级考试的参考书。
计算机语言是现代大学生的必修课。各高校都开设了计算机语言课,从Basic、Fortran、Pascal,到C,再到现在的C++. C++是一种重要的计算机语言,它特别适合开发大型系统程序,它的机制独特,功能强大,高效而实用,C++引导着程序设计的潮流。在计算机基础教学领域中,C++教学蓬勃发展,汹涌的势头大有迅速取代C语言的势头。
在大学中,初学C++的人说C++难学,初教C++的人说C++难教。C++的确难学难教,难点之一是计算机语言的思维模式。它是强逻辑化的,但又不同于数学的逻辑,它的逻辑是建立在冯·诺依曼原理之上的,也建立在离散演绎的特色之上。它以一组语法为基础,以逻辑为手段。难点之二是计算机语言也是语言,学习语言需要大量记忆,也需要灵感,这让学习理工科的学生不易适应。难点之三是C++的个性。C++确实有很强的个性,数据类型丰富、语法现象繁多、严谨而又灵活。学习C++需要大量的时间和精力。难点之四是学习C++大多是刚入大学校门的一年级学生,缺乏学习经验,对于这门全新、枯燥、庞大的课程,心有余而力不足。
本书作者都是从事高校计算机语言教学的专家,有着大型软件设计经验。对高等教育熟悉,对C++理解深刻,对大学生心理、思维习惯、学习的困惑有所了解,是编写这本书的基础。本书的读者群是初次学习计算机语言的大学生,本书也可作为自学C++的参考书。
本书在结构上和现有C++教科书都不相同,详尽而不唆,专业而不枯燥,仔细阅读颇有味道。第1章简单介绍了计算机基础知识,为学习C++打下基础。其内容包含计算机系统结构及工作原理、计算机中的数据表示和存储、计算机语言及其发展、Windows操作系统、算法和数据结构基础。第2章~第7章介绍了C++面向过程程序设计,其中在第6章中初步介绍了类。第8章~第12章介绍了C++面向对象程序设计。本书不是用来介绍Visual C++ 6.0的,但书中C++部分所有例题均在Visual C++6.0下调试通过,其例题在BC下也能正确编译运行。关于Visual C++中的MFC等有关知识,将在配套出版的《C++课程设计》一书中介绍。 本书的写法遵循了计算机中“自顶向下”的思维方式,在整体上自上而下,由点到面,由一般到具体,由简单到复杂地展开。每章的第1节都是导读,导读部分简明介绍了本章的内容以及与前面知识的联系,从而帮助读者从整体上俯视该章的知识。在细节知识的介绍上则由具体到一般,引导读者从具体的案例中提炼出一般性,做到举一反三。
本书的例题都是经过精选的C++经典题目,每个题目都能说明一个问题,介绍一个知识点或一种算法,程序中有大量的注释,有助于读者思考和分析问题。其中许多题目颇具趣味,可以提高读者学习C++的兴趣。
本书的习题部分也是本书的一大特色,在题型上与现在流行的考试题型(包括等级考试题型)保持一致,有选择、填空、阅读程序、完善程序和编写程序等多个方面;在内容上,包括C++的概念、语法、算法、技巧等所有C++语言要素,且题量丰富。
本书共有12章,第1章由徐冬梅老师编写,第2章~第4章和附录由何铁军老师编写,第5章~第7章由朱金付老师编写,第8章、第9章由柏毅老师编写,第10章~第12章由郑雪清老师编写。最后由朱金付老师统稿。朱敏教授审阅了全书并做了大量的指导工作。
本书和同期出版的《C++程序设计实验指导书》、已经出版的《C++程序设计解析》(清华大学出版社,ISBN: 978-7-302-16188-2)以及即将出版的《C++课程设计》构成一个基本的C++学习教材集合。学生通过这些书的综合学习,可以在相当程度上掌握C++的基本概念、体系结构和程序设计基本方法,为将来进一步学习计算机语言奠定深厚的基础。
在日常的教学活动中,学生提出的很多疑难问题,在作业和考试中暴露出的问题,都给了作者许多有益的启发,也是作者编写本书的动力。但是本书作者所接触的学生群有限,对C++的教学理解尚有局限性,加上本书成书仓促,书中难免有许多不足甚至是错误之处,恳请广大读者不吝指正,以利于在再版时参考。
朱金付2009年1月
第1章 计算机基础知识1
1.1 本章导读1
1.2 计算机系统结构及工作原理1
1.2.1 计算机的体系结构--冯·诺依曼结构2
1.2.2 计算机中的数据存储体系5
1.2.3 计算机的工作原理8
1.3 数制转换、字符编码10
1.3.1 进位计数制10
1.3.2 不同数制之间的转换11
1.3.3 计算机中的数据表示和存储15
1.3.4 非数值数据的编码19
1.4 程序设计语言23
1.5 操作系统25
1.5.1 操作系统的组成和功能26
1.5.2 人与计算机的交互28
1.5.3 Windows的文件系统30
1.6 算法与算法设计基础34
1.6.1 算法34
1.6.2 算法的表示37
1.6.3 算法设计基本方法38
1.7 数据结构基础41
1.7.1 数据结构的基本概念41
1.7.2 数据结构的表示43
1.7.3 抽象数据类型46
1.7.4 栈和队列47
1.7.5 几个典型的基本算法48
习题49
C++程序设计目录 第2章 C++基本概念53
2.1 本章导读53
2.2 C语言与C++语言简介54
2.2.1 C语言与C++的起源54
2.2.2 第一个C++源程序55
2.2.3 编译、调试、运行程序56
2.2.4 Visual C++集成开发环境57
2.3 基本词法单位58
2.3.1 关键字58
2.3.2 标识符58
2.3.3 标点符号59
2.3.4 分隔符59
2.4 数据类型59
2.5 变量61
2.5.1 变量的定义和初始值61
2.5.2 变量与引用61
2.6 常量62
2.6.1 整型常量63
2.6.2 实型常量63
2.6.3 字符常量63
2.6.4 转义字符64
2.6.5 字符串常量65
2.6.6 const常变量65
2.6.7 宏定义常量65
2.7 运算符和表达式66
2.7.1 运算符和运算符优先级66
2.7.2 算术运算符与算术表达式67
2.7.3 赋值运算符和赋值表达式71
2.7.4 关系运算符和关系表达式72
2.7.5 逻辑运算符和逻辑表达式73
2.7.6 字位运算符74
2.7.7 其他常用运算符75
2.7.8 类型转换76
2.8 C++语句78
2.9 简单输入、输出78
2.9.1 cin78
2.9.2 cout81
习题83
第3章 流程控制语句87
3.1 本章导读87
3.2 选择结构语句88
3.2.1 if语句88
3.2.2 switch语句95
3.2.3 if与switch之间的转换98
3.3 循环结构99
3.3.1 while循环100
3.3.2 do-while循环101
3.3.3 for循环102
3.3.4 三种循环的等价性和区别104
3.3.5 循环的嵌套104
3.4 控制执行顺序的语句107
3.4.1 break语句107
3.4.2 continue语句109
3.5 算法与算法设计方法109
3.5.1 枚举法(穷举法)110
3.5.2 迭代与递推法111
习题113
第4章 函数和编译预处理119
4.1 本章导读119
4.2 函数的定义120
4.2.1 有参函数定义120
4.2.2 无参函数121
4.2.3 函数的返回和返回值122
4.3 函数的调用123
4.3.1 形参与实参123
4.3.2 函数的原型说明124
4.4 函数的参数传递方式125
4.4.1 值传递125
4.4.2 引用传递126
4.5 函数的递归调用128
4.6 存储类别和作用域131
4.6.1 作用域131
4.6.2 变量的存储类别134
4.7 函数的重载、内联、缺省参数137
4.7.1 函数的重载137
4.7.2 函数的内联138
4.7.3 缺省参数的函数139
4.8 预处理指令与编译预处理141
4.8.1 文件包含指令141
4.8.2 宏定义指令142
4.8.3 条件编译指令145
4.9 程序的多文件组织146
4.10 C++库函数148
4.11 函数调用与栈149
4.11.1 参数传递与栈149
4.11.2 自动变量与栈150
4.11.3 函数递归调用和栈151
习题153
第5章 构造数据类型159
5.1 本章导读159
5.2 一维数组160
5.2.1 一维数组的定义160
5.2.2 一维数组的初始化162
5.2.3 数组元素的引用163
5.2.4 一维数组的应用163
5.3 二维数组168
5.3.1 二维数组的定义168
5.3.2 二维数组的初始化169
5.3.3 二维数组的应用170
5.4 数组和函数174
5.4.1 数组元素用作函数参数174
5.4.2 数组名用为函数参数175
5.5 字符数组178
5.5.1 字符数组的定义和初始化178
5.5.2 字符数组的赋值、输入和输出179
5.5.3 字符串与字符数组180
5.5.4 字符数组的应用181
5.6 字符串函数183
5.6.1 常用字符串处理函数183
5.6.2 字符串类变量及其应用186
5.7 数组应用187
5.7.1 选择法排序187
5.7.2 矩阵运算190
习题191
第6章 其他构造数据类型--结构、联合、枚举和类197
6.1 本章导读197
6.2 结构体类型198
6.2.1 结构体类型定义198
6.2.2 结构体类型变量的定义及其初始化199
6.2.3 结构体类型变量的引用201
6.2.4 结构体与数组202
6.2.5 结构体类型与函数203
6.3 共同体类型205
6.4 枚举类型206
6.4.1 枚举类型数据的定义206
6.4.2 枚举类型的应用208
6.5 类型定义语句typedef210
6.6 类211
6.6.1 类类型的定义211
6.6.2 类的成员函数213
6.6.3 inline成员函数214
6.6.4 类与结构体的异同215
6.6.5 类的对象及其定义216
6.6.6 类和对象的简单应用218
习题221
第7章 指针227
7.1 本章导读227
7.2 指针228
7.2.1 指针变量的定义229
7.2.2 指针变量的引用230
7.2.3 多级指针及其定义231
7.3 指针与数组232
7.3.1 指针与一维数组232
7.3.2 指针的运算233
7.3.3 指针与二维数组236
7.3.4 指针数组238
7.3.5 指向数组的指针239
7.4 指针与函数240
7.4.1 指针作为函数参数240
7.4.2 返回值为指针的函数243
7.4.3 指向函数的指针245
7.4.4 用函数指针调用函数246
7.5 const指针247
7.6 void指针249
7.7 指针与字符串250
7.7.1 字符串的表示形式250
7.7.2 字符串指针与函数252
7.7.3 字符串指针与数组253
7.8 引用254
7.8.1 引用的定义254
7.8.2 引用和函数255
7.9 内存的动态分配和撤销255
7.9.1 new运算符256
7.9.2 delete运算符257
7.10 指针应用258
7.10.1 链表258
7.10.2 约瑟夫环(Josephus)问题265
习题266
第8章 类和对象273
8.1 本章导读273
8.2 面向对象的程序设计方法274
8.3 构造函数与析构函数276
8.3.1 构造函数的定义与使用277
8.3.2 默认构造函数278
8.3.3 构造函数和new运算符282
8.3.4 析构函数的定义与使用283
8.3.5 构造函数与类型转化286
8.4 复制构造函数286
8.5 对象成员和类的嵌套定义289
8.5.1 对象成员289
8.5.2 类的嵌套定义290
8.6 友元函数和友元类291
8.6.1 友元函数292
8.6.2 友元类293
8.7 静态成员296
8.7.1 静态数据成员296
8.7.2 静态函数成员297
8.8 共用数据的保护299
8.8.1 常对象299
8.8.2 常成员299
8.8.3 指向对象的常指针和对象的常引用300
8.9 this指针301
习题302
第9章 继承与派生307
9.1 本章导读307
9.2 继承与派生的概念307
9.2.1 类的继承与派生概念307
9.2.2 派生类的定义308
9.2.3 基类成员的访问控制309
9.3 派生类的构造与析构函数313
9.4 冲突、支配与赋值兼容规则316
9.5 虚基类320
习题323
第10章 多态325
10.1 本章导读325
10.2 虚函数326
10.2.1 虚函数的定义及实现过程326
10.2.2 虚函数实现过程327
10.2.3 纯虚函数和抽象类330
10.3 运算符重载332
10.3.1 成员函数实现运算符重载及方法333
10.3.2 友元函数实现运算符重载及方法336
10.3.3 类型转换函数340
10.3.4 一些特殊运算符的重载341
10.3.5 实现字符串类的运算符重载346
习题349
第11章 输入输出流类库353
11.1 本章导读353
11.2 流概述354
11.3 C++的基本流类体系354
11.4 标准输入输出流355
11.4.1 标准输入流355
11.4.2 标准输出流356
11.4.3 流的格式控制357
11.4.4 输入输出的其他成员函数361
11.4.5 提取和插入运算符重载364
11.4.6 重定向概念365
11.5 文件流366
11.5.1 文件概述366
11.5.2 文件流类体系366
11.5.3 文件的使用方法366
11.6 文本文件的使用370
11.7 二进制文件的使用374
11.7.1 二进制文件的打开和关闭374
11.7.2 二进制文件的读写374
11.7.3 文件的随机访问376
习题378
第12章 模板381
12.1 本章导读381
12.2 函数模板和类模板381
12.2.1 函数模板的定义和使用381
12.2.2 类模板的定义和使用383
12.3 标准模板库简介387
12.4 模板简单应用实例388
习题393
附录A 标准ASCII码表395
附录B 常用系统函数397
参考文献403