介绍了C++程序的运行方式、基本数据类型、复合数据类型、循环和关系表达式、分支语句和逻辑运算符、函数重载和函数模板、内存模型和名称空间、类的设计和使用、多态、虚函数、动态内存分配、继承、代码重用、友元、异常处理技术、string类和标准模板库、输入/输出、C++11新增功能等内容。
本书循序渐进地介绍了C++程序设计的相关概念、方法。内容上突出工程特色,以工程教育为理念,围绕培养应用创新型工程人才这一目标,着重学生的独立研究能力、动手能力和解决实际问题能力的培养,将测控技术与仪器专业工程人才培养模式和教学内容的改革成果体现在教材中,通过科学规范的工程人才教材建设促进专业建设和工程人才培养质量的提高。
全书共12章。第1章介绍了进行C++语言程序设计的预备知识,包括数制、数据的表示方法,介绍了C++语言开发工具;第2章介绍了C++语言程序设计中的数据类型与表达式;第3章介绍了基于过程的程序设计方法,主要包括输入/输出流、关系运算与逻辑运算、选择结构、循环结构等内容;第4章介绍了函数与预处理方法,介绍了常见的函数形式与用法;第5章介绍了数组的概念、创建方法及使用方法;第6章介绍了指针的概念,并对指针的应用进行详细解析;第7章介绍了自定义数据类型,包括结构体类型、链表、共用体等内容;第8章介绍了类,这是面向对象编程中最基本的概念,详细介绍了类的定义及使用方法、构造函数与析构函数及对象的使用方法;第9章介绍了运算符重载的定义、方法、规则等内容;第10章介绍了继承和派生的概念及工作方式;第11章介绍了多态性的概念、虚函数的定义与使用方法;第12章介绍了输入/输出流的常用函数及使用方法。
本书第1、8章由徐耀松执笔;第2、3、5、9、10章由郭磊执笔;第4、6、7章由尹玉萍执笔;第11章由王丹丹、屠乃威、马玉芳、谢国民共同执笔;第12章由郭磊和徐耀松共同执笔。全书的写作思路由付华教授提出,由付华和徐耀松统稿。此外,李猛、任仁、陶艳风、代巍、汤月、司南楠、陈东、谢鸿、郭玉雯、于田、孟繁东、曹坦坦等也参加了本书的编写。在此,向对本书的完成给予了热情帮助的同行们表示感谢。
由于作者的水平有限,加上时间仓促,书中的错误和不妥之处,敬请读者批评指正。
徐耀松(1979.2-),河北沧州人,博士后,副教授,辽宁省优秀青年骨干教师。毕业于天津大学精密测试技术与仪器国家重点实验室。先后获得辽宁省科技进步奖二等奖、中国煤炭工业协会科学技术二等奖、国家安全生产总局第三届安全生产科技成果三等奖、阜新市科技进步一等奖、辽宁省普通高等教育本科教学成果奖获奖三等奖等省部级科技奖励。在《传感技术学报》、《纳米技术与精密工程》、《计算机工程》等国内外期刊发表论文二十余篇,EI检索3篇。申报获得国家专利8项。主持参与辽宁省教育厅基金、国家自然科学基金以及企业项目多项。主要研究方向:煤矿瓦斯灾害前兆信息的采集、分析、特征提取和灾害预测;声源信号时延估计与定位方法研究;工业远程监控系统开发;嵌入式系统设计。
第1章 预备知识 (1)
1.1 C++简介 (1)
1.2 计算机数据表示方法 (2)
1.2.1 二进制、八进制、十六进制 (3)
1.2.2 表示数据的字节和位 (5)
1.2.3 内存 (5)
1.3 C++开发工具 (7)
第2章 C++的数据类型 (13)
2.1 C++的数据类型 (13)
2.2 常量 (14)
2.2.1 数值常量 (15)
2.2.2 字符常量和字符串常量 (15)
2.2.3 布尔常量 (17)
2.2.4 符号常量 (17)
2.3 变量 (18)
2.3.1 变量名规则 (18)
2.3.2 定义变量 (18)
2.3.3 对变量赋初值 (18)
2.3.4 常变量 (19)
2.4 C++的运算符 (19)
2.5 算术运算符与算术表达式 (20)
2.5.1 基本的算术运算符 (20)
2.5.2 算术表达式和运算符的优先级与结合性 (20)
2.5.3 表达式中各类数值型数据间的混合运算 (21)
2.5.4 自增(++)和自减(--)运算符 (21)
2.6 赋值运算符和赋值表达式 (22)
2.6.1 赋值运算符和赋值表达式概述 (22)
2.6.2 赋值过程中的类型转换 (22)
2.6.3 复合赋值运算符 (22)
2.7 逗号运算符和逗号表达式 (23)
2.8 强制类型转换运算符 (23)
思考与练习 (24)
第3章 基于过程的程序设计 (26)
3.1 基于过程的程序设计和算法 (26)
3.1.1 算法的概念 (26)
3.1.2 算法的表示 (27)
3.2 C++的程序结构和C++语句 (28)
3.3 C++的输入与输出 (29)
3.3.1 输入流与输出流的基本操作 (29)
3.3.2 在标准输入流与输出流中使用控制符 (31)
3.3.3 用getchar和putchar函数进行字符的输入和输出 (33)
3.3.4 用scanf和printf函数进行输入和输出 (34)
3.4 编写顺序结构的程序 (35)
3.5 关系运算和逻辑运算 (36)
3.5.1 关系运算和关系表达式 (36)
3.5.2 逻辑常量与逻辑变量 (37)
3.5.3 逻辑运算和逻辑表达式 (38)
3.6 选择结构和if语句 (39)
3.6.1 if语句的形式 (39)
3.6.2 if语句的嵌套 (42)
3.6.3 条件运算符和条件表达式 (43)
3.6.4 多分支选择结构与switch语句 (44)
3.7 循环结构和循环语句 (46)
3.7.1 用while语句构成循环 (46)
3.7.2 用do…while语句构成循环 (47)
3.7.3 用for语句构成循环 (49)
3.7.4 循环嵌套 (50)
3.7.5 break语句和continue语句 (51)
3.7.6 循环结构程序设计举例 (52)
思考与练习 (55)
第4章 函数与预处理 (57)
4.1 函数概述 (57)
4.2 函数定义与函数声明 (59)
4.2.1 定义无参函数的一般形式 (59)
4.2.2 定义有参函数的一般形式 (59)
4.2.3 函数声明 (60)
4.3 函数的调用 (62)
4.3.1 函数调用的一般形式 (62)
4.3.2 函数调用的方式 (64)
4.3.3 函数的返回值 (64)
4.3.4 函数的值传递方式 (65)
4.4 内置函数 (66)
4.5 函数的重载 (67)
4.6 有默认参数的函数 (68)
4.7 函数模板 (69)
4.8 函数的嵌套调用 (70)
4.9 函数的递归调用 (71)
4.10 局部变量和全局变量 (76)
4.10.1 局部变量 (76)
4.10.2 全局变量 (77)
4.11 变量的存储类别 (79)
4.11.1 动态存储方式与静态存储方式 (79)
4.11.2 自动变量 (79)
4.11.3 用static声明静态局部变量 (80)
4.11.4 用register声明寄存器变量 (81)
4.11.5 用extern声明外部变量 (81)
4.12 内部函数和外部函数 (83)
4.12.1 内部函数 (83)
4.12.2 外部函数 (84)
4.13 预处理命令 (85)
4.13.1 文件包含 (85)
4.13.2 条件编译 (86)
4.13.3 宏定义 (86)
4.13.4 关于C++标准库 (87)
思考与练习 (88)
第5章 数组 (90)
5.1 数组的概念 (90)
5.2 一维数组的定义和引用 (91)
5.2.1 一维数组的定义 (91)
5.2.2 一维数组元素的引用 (92)
5.2.3 一维数组的初始化 (93)
5.3 二维数组的定义和引用 (97)
5.3.1 二维数组定义的一般格式 (97)
5.3.2 二维数组元素的引用 (97)
5.3.3 二维数组的初始化 (98)
5.3.4 二维数组应用举例 (98)
5.4 用数组名做函数参数 (100)
5.5 字符数组 (102)
5.5.1 字符数组的定义和初始化 (103)
5.5.2 字符串处理函数 (105)
5.5.3 字符数组应用举例 (107)
5.6 C++处理字符串的方法―字符串类与字符串变量 (108)
思考与练习 (111)
第6章 指针 (112)
6.1 什么是指针 (112)
6.2 变量与指针 (113)
6.2.1 定义指针变量 (114)
6.2.2 指针变量赋值 (115)
6.2.3 引用指针变量 (116)
6.2.4 指针作为函数参数 (116)
6.3 数组与指针 (119)
6.3.1 指向数组元素的指针变量 (119)
6.3.2 指针的运算 (119)
6.3.3 通过指针引用数组元素 (120)
6.3.4 用数组名做函数参数 (122)
6.4 字符串与指针 (126)
6.4.1 字符串的表示方法 (126)
6.4.2 字符指针做函数参数 (128)
6.4.3 字符指针与字符数组的区别 (128)
6.5 函数与指针 (129)
6.5.1 函数的指针和指向函数的指针变量 (129)
6.5.2 返回指针值的函数 (130)
6.6 指针数组和指向指针的指针 (130)
6.6.1 指针数组的概念 (130)
6.6.2 指向指针的指针 (131)
6.7 指针运算小结 (132)
6.8 引用 (133)
6.8.1 什么是变量的引用 (133)
6.8.2 引用作为函数参数 (134)
思考与练习 (135)
第7章 自定义数据类型 (137)
7.1 结构体类型 (137)
7.1.1 结构体类型的定义 (137)
7.1.2 结构体变量的定义 (139)
7.1.3 结构体变量的初始化 (141)
7.1.4 结构体变量的引用 (142)
7.1.5 结构体数组 (143)
7.1.6 指向结构体变量的指针 (145)
7.1.7 结构体数据做函数参数 (148)
7.1.8 动态内存分配 (150)
7.2 共用体 (152)
7.2.1 共用体的定义 (152)
7.2.2 共用体变量的引用 (153)
7.2.3 共用体的特点 (154)
7.2.4 共用体变量的应用 (154)
7.3 枚举类型 (156)
7.4 用typedef定义类型 (156)
思考与练习 (157)
第8章 类和对象 (159)
8.1 类 (160)
8.1.1 类的定义 (160)
8.1.2 类成员的可见性 (162)
8.1.3 类的数据成员 (164)
8.1.4 类的成员函数 (165)
8.1.5 类与结构的区别 (170)
8.2 对象 (170)
8.2.1 对象的创建 (170)
8.2.2 访问对象的成员 (171)
8.2.3 类与对象的关系 (173)
8.3 this指针 (174)
8.4 构造函数 (175)
8.5 析构函数 (176)
8.6 调用构造函数和析构函数的顺序 (179)
8.6.1 实例1 (179)
8.6.2 实例2 (181)
8.7 对象数组 (182)
8.8 对象指针 (186)
8.8.1 对象指针和对象引用 (186)
8.8.2 对象指针和对象引用做函数参数 (188)
8.9 共用数据的保护 (190)
8.9.1 常对象 (190)
8.9.2 常成员函数 (191)
8.10 对象的动态建立和释放 (192)
8.11 对象的赋值和复制 (195)
8.11.1 对象的赋值 (195)
8.11.2 对象的复制 (197)
8.12 静态成员 (201)
8.12.1 静态数据成员 (201)
8.12.2 静态函数成员 (202)
8.13 友元 (203)
8.13.1 问题的提出 (203)
8.13.2 友元函数 (204)
8.13.3 友元类 (205)
8.14 类模板 (206)
思考与练习 (212)
第9章 运算符重载 (214)
9.1 什么是运算符重载 (214)
9.2 运算符重载的方法 (215)
9.3 C++运算符重载的规则 (218)
9.4 运算符重载函数作为类成员函数和友元函数 (218)
9.5 重载双目运算符 (220)
9.6 重载单目运算符 (222)
9.7 重载流插入运算符和流提取运算符 (225)
9.8 不同类型数据间的转换 (227)
思考与练习 (229)
第10章 继承与派生 (230)
10.1 继承与派生的概念 (231)
10.2 派生类的声明方式 (232)
10.3 派生类的构成 (233)
10.4 派生类成员的访问属性 (235)
10.4.1 公有继承 (235)
10.4.2 私有继承 (237)
10.4.3 保护成员和保护继承 (238)
10.4.4 多级派生时的访问属性 (240)
10.5 派生类的构造函数和析构函数 (243)
10.5.1 基类构造函数不包括参数 (243)
10.5.2 基类构造函数包括参数 (244)
10.5.3 有子对象的派生类构造函数 (246)
10.5.4 多层派生时的构造函数 (248)
10.6 多重继承 (251)
10.6.1 声明多重继承 (251)
10.6.2 多重继承派生类的构造函数 (253)
10.6.3 多重继承引起的二义性问题 (255)
10.6.4 虚基类 (258)
10.7 基类与派生类的转换 (261)
10.8 继承与组合 (264)
思考与练习 (265)
第11章 多态性与虚函数 (267)
11.1 多态性的概念 (267)
11.2 基类对象的指针指向派生类对象 (271)
11.3 虚函数 (272)
11.3.1 虚函数的定义 (272)
11.3.2 虚函数的使用方法 (274)
11.3.3 虚函数与实函数的区别 (275)
11.3.4 在构造函数和析构函数中调用虚函数 (278)
11.3.5 虚析构函数 (279)
11.4 纯虚函数与抽象类 (282)
11.4.1 纯虚函数 (282)
11.4.2 抽象类 (284)
思考与练习 (285)
第12章 输入/输出流 (288)
12.1 C++的输入/输出 (288)
12.1.1 输入/输出的含义 (288)
12.1.2 流与标准库 (289)
12.2 标准输出流 (290)
12.2.1 cout、cerr和clog流 (290)
12.2.2 格式输出 (292)
12.2.3 用流成员函数put输出字符串 (295)
12.3 标准输入流 (296)
12.3.1 cin流 (296)
12.3.2 用于字符输入的流成员函数 (297)
12.4 文件操作与文件流 (299)
12.4.1 文件流 (299)
12.4.2 打开和关闭文件 (299)
12.4.3 对ASCII文件操作 (301)
12.4.4 二进制文件的读写操作 (303)
12.4.5 随机访问二进制文件 (306)
12.5 字符串流 (307)
思考与练习 (309)
附录A ASCII码表 (310)
参考文献 (314)