图书简介:
第1章 基本数据与表达式 1
1.1 概述 1
1.1.1 程序设计与程序设计语言 1
1.1.2 一个简单的C++程序 2
1.1.3 程序的编译执行 4
1.2 C++语言的字符集与词汇 5
1.2.1 字符集 6
1.2.2 词汇 6
1.3 C++语言的基本数据类型与存储形式 7
1.3.1 C++语言的数据类型 7
1.3.2 数据存储 7
1.3.3 基本数据类型 8
1.4 数据对象与访问 11
1.4.1 变量定义 11
1.4.2 访问变量 12
1.4.3 常量和约束访问 17
1.5 表达式 19
1.5.1 运算符 19
1.5.2 算术表达式 21
1.5.3 逻辑表达式 23
1.5.4 赋值表达式 25
1.5.5 条件表达式 26
1.5.6 逗号表达式 26
1.6 数据输入和输出 27
1.6.1 键盘输入 27
1.6.2 屏幕输出 27
1.6.3 表达式语句 29
本章小结 29
练习题 30
第2章 程序控制结构 36
2.1 选择控制 36
2.1.1 if语句 36
2.1.2 switch语句 41
2.2 循环控制 45
2.2.1 while语句 45
2.2.2 do-while语句 48
2.2.3 for语句 52
2.2.4 循环的嵌套 56
2.3 判断表达式的使用 58
2.4 转向语句 60
本章小结 63
练习题 63
第3章 函数 70
3.1 函数的定义与调用 70
3.1.1 函数定义 70
3.1.2 函数调用 71
3.1.3 函数原型 71
3.2 函数参数的传递 73
3.2.1 传值参数 73
3.2.2 指针参数 77
3.2.3 引用参数 79
3.2.4 函数的返回类型 81
3.3 函数调用机制 84
3.3.1 嵌套调用 84
3.3.2 递归调用 85
3.4 函数地址和函数指针 89
3.4.1 函数的地址 90
3.4.2 函数指针 91
3.5 内联函数和重载函数 95
3.5.1 内联函数 95
3.5.2 重载函数 96
3.6 变量存储特性与标识符作用域 96
3.6.1 存储特性 97
3.6.2 标识符的作用域与可见性 98
3.7 多文件程序结构 101
3.7.1 多文件结构 101
3.7.2 预处理指令 102
3.7.3 多文件程序使用全局变量 106
3.8 命名空间 107
3.8.1 标准名空间 107
3.8.2 定义命名空间 108
3.8.3 使用命名空间 110
3.9 终止程序执行 111
本章小结 113
练习题 114
第4章 数组 124
4.1 一维数组 124
4.1.1 一维数组定义与初始化 124
4.1.2 一维数组访问 126
4.2 指针数组 129
4.2.1 指向基本数据类型的指针数组 129
4.2.2 指向数组的指针数组 129
4.2.3 指向函数的指针数组 130
4.3 二维数组 131
4.3.1 二维数组的定义与初始化 132
4.3.2 二维数组访问 133
4.4 数组作为函数参数 136
4.4.1 向函数传送数组元素 136
4.4.2 数组名作为函数参数 137
4.4.3 应用举例 139
4.5 动态存储 143
4.5.1 new和delete操作符 143
4.5.2 动态存储的应用 143
4.6 字符数组与字符串 146
4.6.1 字符串存储 146
4.6.2 字符串的访问 148
4.6.3 字符串处理函数 150
4.7 STRING类 154
本章小结 158
练习题 159
第5章 集合与结构 169
5.1 位运算 169
5.2 集合 175
5.2.1 集合的基本运算 175
5.2.2 集合运算的实现 175
5.3 结构 181
5.3.1 定义结构 181
5.3.2 访问结构 183
5.3.3 结构参数 185
5.4 结构数组 187
5.5 链表 190
本章小结 199
练习题 199
第6章 类与对象 207
6.1 类和对象的定义与访问 207
6.1.1 定义类和对象 208
6.1.2 访问对象成员 210
6.1.3 this指针 211
6.2 构造函数和析构函数 211
6.2.1 简单构造函数和析构函数 212
6.2.2 带参数的构造函数 213
6.2.3 重载构造函数 215
6.2.4 复制构造函数 215
6.3 类的其他成员 221
6.3.1 常成员 221
6.3.2 静态成员 224
6.3.3 友元 228
6.4 类的包含 230
本章小结 234
练习题 234
第7章 运算符重载 244
7.1 运算符重载规则 244
7.1.1 重载运算符的限制 244
7.1.2 重载运算符的语法形式 244
7.2 用成员或友元函数重载运算符 246
7.2.1 用成员函数重载运算符 247
7.2.2 用友元函数重载运算符 249
7.3 几个典型运算符的重载 251
7.3.1 重载++与- - 251
7.3.2 重载赋值运算符 253
7.3.3 重载运算符[ ]和() 254
7.3.4 重载流插入和流提取运算符 256
7.4 类类型转换 263
7.4.1 构造函数进行类类型转换 263
7.4.2 类型转换函数 264
本章小结 268
练习题 268
第8章 继承 277
8.1 类之间的关系 277
8.2 基类和派生类 278
8.2.1 访问控制 278
8.2.2 重名成员 285
8.2.3 派生类中访问静态成员 288
8.3 基类的初始化 289
8.4 继承的应用实例 291
8.5 多继承 296
8.5.1 多继承的派生类构造和访问 297
8.5.2 虚继承 300
本章小结 304
练习题 305
第9章 虚函数与多态性 314
9.1 静态联编 314
9.2 类指针的关系 315
9.2.1 用基类指针引用派生类对象 315
9.2.2 用派生类指针引用基类对象 316
9.3 虚函数和动态联编 319
9.3.1 虚函数和基类指针 319
9.3.2 虚函数的重载特性 322
9.3.3 虚析构函数 323
9.4 纯虚函数和抽象类 325
9.4.1 纯虚函数 325
9.4.2 抽象类 327
9.5 虚函数和多态性的应用 329
9.5.1 一个实例 329
9.5.2 异质链表 334
本章小结 337
练习题 337
第10章 模板 341
10.1 什么是模板 341
10.2 函数模板 341
10.2.1 模板说明 342
10.2.2 函数模板与模板函数 342
10.2.3 重载函数模板 344
10.3 类模板 346
10.3.1 类模板与模板类 346
10.3.2 类模板作为函数参数 348
10.3.3 在类层次中的类模板 349
10.3.4 类模板与友元 352
10.3.5 类模板与静态成员 354
10.4 标准模板 355
10.4.1 容器 355
10.4.2 迭代器 360
10.4.3 算法 362
本章小结 365
练习题 366
第11章 输入/输出流 370
11.1 流类和流对象 370
11.1.1 流类库 370
11.1.2 头文件 371
11.2 标准流和流操作 372
11.2.1 标准流 372
11.2.2 输入流操作 373
11.2.3 输出流操作 374
11.2.4 流错误状态 375
11.3 格式控制 377
11.3.1 设置标志字 377
11.3.2 格式控制符 380
11.4 串流 382
11.5 文件处理 384
11.5.1 文件和流 384
11.5.2 打开和关闭文件 385
11.5.3 文本文件 387
11.5.4 二进制数据文件 391
本章小结 402
练习题 403
第12章 异常处理 409
12.1 C++的异常处理机制 409
12.2 异常处理的实现 410
12.2.1 异常处理程序 410
12.2.2 带异常说明的函数原型 413
12.2.3 再抛出异常传递 414
12.2.4 创建对象的异常处理 415
本章小结 416
附录A 控制台程序设计 418
附录B 常用库函数 440
附录C C++关键字表 452
附录D ASCII码字符集 453
展开
前 言
C++语言是优秀的计算机程序设计语言,它的功能相当强大。我们编写这本书的目的是,为没有任何程序设计基础的理工科大学生提供一本适用教材,使他们掌握从理论到实践都要求很高的C++语言。
一门课程的设置应该放在整个教学培养计划中统筹考虑。我们的教学目标不是马上培养一个会使用某种语言(例如C++语言)的程序员,而是强调对程序设计语言的理解和应用,“计算机语言”的角色是第一位的。所以,在教材编写和组织教学的过程中,我们力图通过对基本语法现象的剖析,由浅入深地让学生理解、掌握语言规则的原理,懂得用计算机指令的模式去分析和求解问题,并在机器上实现简单的程序。至于深入的算法及大程序的组织讨论,将由相关的后续课程(例如,数据结构、算法分析、计算方法、软件工程等)完成。因此,对高级程序设计语言规则的理解和应用是本教材写作的立足点。
我们根据多年从事计算机程序设计教学的经验,按照学生学习的认知规律,精心构造整本教材的体系和叙述方式。原则是:循序渐进、难点分散、通俗而不肤浅。本教材以语法范畴和程序组织为脉络,清晰渐进。从字、词、数据、表达式、语句,到函数、类,是语法范畴构成的基本脉络;在程序功能方面,则以组织数据和组织程序为另外一条基本脉络,并以渐进的、粒度扩大的方式逐步导入分析。
例如,数据的组织方式:基本数据类型—数组—结构—链表,体现如何利用基本数据类型根据需要组织数据;程序的组织方式:语句—函数—类,体现结构化思想和面向对象思想对程序不同的组织方式。
指针是C++语言的重要概念,是操作对象的有力工具。本书没有一般C语言、C++语言教材中专门的“指针”一章。我们从最简单的变量开始,建立对象的名和地址的概念,用对象的不同访问方式贯穿于各章节。从结构化程序设计到面向对象程序设计,采取了比较平滑的过渡。首先,在一开始介绍基本数据类型、程序流程控制、函数等结构化程序设计的基本知识时,就非正式地使用“对象”这个术语(从计算机程序的角度,任何占有存储空间的实体都是对象);继而,掌握结构到类的演变,给出对象的准确定义;进一步,展开介绍面向对象程序的几个基本特性,即封装、继承、多态和类属在C++语言中的实现方法。同时,我们在本书的阐述中体现一个思想:没有一种对所有问题都是最好的程序设计方法,对特定问题,选择合适的解决方案是程序员必备的素质。
本书之所以取名为《C++程序设计基础》,原因有二:第一,它不是一本C++语言手册,不可能包罗所有语法规则和特定版本提供的各种功能;第二,它没有涉及复杂的算法和工程化的面向对象分析设计方法。这两个问题与教材的定位相关。对第一个原因,我们认为学生在掌握了程序设计的基本概念和基本方法之后,可以通过语言平台(例如Visual C++)或者其他资料学习,拓展对语言功能的了解。我们在有关章节中,也做了类似的引导,例如,STL标准类库的介绍,这些内容提供给教师选择或学生自学。至于第二个原因,那些是计算机专业后续课程的教学内容。本书介绍的程序设计方法和使用到的算法都立足于基本概念和方法,所以,例程通常是简单和小规模的。
本书分别在2003年、2006年、2009年和2012年出版了第1~4版,目前为第5版。上册介绍程序设计的基础知识,在第5章中增加了一节讨论结构参数;第11章增加了文件应用的例程。全书按节配置习题,以方便学生自学。下册介绍VC++在.NET环境下的Windows应用程序设计,增加了一章用于强化综合训练的设计案例。
上册共分12章,主要内容包括:基本数据与表达式、程序控制结构、函数、数组、集合与结构、类与对象、运算符重载、继承、虚函数与多态性、模板、输入/输出流、异常处理。
本书提供配套的电子课件和习题解答,请登录华信教育资源网(www.hxedu.com.cn)注册后免费下载。电子课件由近3000张PPT幻灯片组成,以图形语言为设计理念,充分表达程序设计课程的教学特点。
本书可以作为高等学校计算机类、信息类、电类专业本科生高级语言程序设计课程教材,也可以作为教师、学生和C++语言爱好者的参考书。
本书的编写过程,是作者不断向学生学习,向同行学习,向C++学习的过程。在此,对所有使用本书的教师、学生,以及热心向我们提出宝贵意见的读者致以诚挚的感谢!希望继续得到读者的支持和帮助。
作 者
课程简介
华南理工大学计算机学院开设的“高级语言程序设计(C++)”课程是2007年国家级精品网络课程,2012年国家级精品资源共享课程。本书是该课程的使用教材。
相关网站链接可以扫描以下二维码获得。
爱课程:
http://www.icourses.cn/coursestatic/course_5847.html
华南理工大学网络学院:
http://cs.scutde.net/courses/course_10/index.html
展开