C++面向对象程序设计(第4版)
定价:¥69.00
作者: 杜茂康
出版时间:2024-12
出版社:电子工业出版社
- 电子工业出版社
- 9787121474903
- 4版
- 560115
- 60266887-3
- 平塑
- 16开
- 2024-12
- 704
- 440
- 工学
- 计算机类
- 计算机科学与技术
- 本科 高职
内容简介
本书以C++ 14/17/20标准为指引,深入浅出地介绍了标准C++面向对象程序设计的相关知识,包括C++对C语言的扩展以及类、对象、友元、继承、多态、虚函数、重载、I/O流类库、文件、模板与STL、异常、多线程等内容。全书本着易于理解、实用性强的原则设计其内容和案例,并以一个规模较大的综合性程序贯穿于C++面向对象编程的全过程,引领读者理解和掌握面向对象程序设计的思想、方法和技术,以及运用C++设计自定义类进行软件开发的方法。 本书取材新颖,内容全面,通俗易懂,可作为高等院校计算机、电子信息类专业及其他理工类相关专业和信息管理与信息系统等专业的教材,也可作为C++语言自学者或程序设计人员的参考用书。
目录
目 录
第1章 C++与面向对象程序设计 1
1.1 面向对象程序设计概述 2
1.1.1 面向过程程序设计 2
1.1.2 面向对象程序设计 3
1.1.3 面向对象程序设计语言的特征 4
1.2 C++语言概述 6
1.2.1 C++语言简史 7
1.2.2 C++的特点 8
1.2.3 C++程序的结构 8
1.2.4 标准C++程序设计 11
1.3 数据的输入和输出 13
1.3.1 数据类型 13
1.3.2 流的概念 15
1.3.3 cin和提取运算符>> 15
1.3.4 cout和插入运算符<< 17
1.3.5 输出格式控制符 19
1.3.6 数制基数 21
1.3.7 string和字符串的输入、输出 22
1.3.8 数据输入的典型问题 24
1.4 编程实作:Visual C++ 2022编程简介 28
习题1 32
第2章 C++程序设计基础 34
2.1 C++语言对C语言的类型扩展和类型定义 35
2.2 C++程序变量设计的基本思想 36
2.3 左值、右值和断言 38
2.4 指针 39
2.4.1 指针概述 39
2.4.2 void*指针和获取数组首、尾元素位置的指针 41
2.4.3 内存的分配和释放 42
2.4.4 智能指针 44
2.5 引用 49
2.5.1 左值引用 49
2.5.2 右值引用、移动及其语义 52
2.6 const和constexpr常量 54
2.6.1 常量的定义 54
2.6.2 const、constexpr与指针 55
2.6.3 const与引用 56
2.6.4 顶层const和底层const 57
2.7 auto、decltype和decltype(auto)类型 58
2.8 C++新式for循环和数组 60
2.8.1 begin、end和基于范围的for循环 60
2.8.2 vector和valarray 61
2.9 数据类型转换 63
2.10 函数 66
2.10.1 函数原型 66
2.10.2 函数参数传递的方式 67
2.10.3 函数默认参数 71
2.10.4 函数返回值 72
2.10.5 函数重载 75
2.10.6 函数与const和constexpr 78
2.10.7 内联函数 81
2.11 匿名函数 82
2.12 命名空间 88
2.13 变量 90
2.13.1 变量定义 90
2.13.2 作用域 90
2.13.3 变量的类型和生命期 92
2.13.4 变量初始化 93
2.13.5 局部变量与函数返回地址 97
2.14 预处理器 97
2.15 文件的输入和输出 100
2.15.1 文件操作的基本流程 100
2.15.2 输入流、输出流的泛化思想 101
2.16 编程实作:C++程序设计初步 102
习题2 104
第3章 类和对象 110
3.1 类的抽象和封装 111
3.1.1 抽象 111
3.1.2 封装 113
3.2 结构 115
3.2.1 C++对结构的扩展 116
3.2.2 类 118
3.3 数据成员 119
3.4 成员函数 120
3.4.1 成员函数定义方式和内联函数 120
3.4.2 常量成员函数 122
3.4.3 成员函数重载和默认参数值 123
3.5 对象 123
3.6 构造函数设计 126
3.6.1 编译器默认添加成员函数 127
3.6.2 构造函数和类内初始值 128
3.6.3 默认构造函数 130
3.6.4 重载构造函数 133
3.6.5 构造函数与初始化列表 135
3.6.6 委托构造函数 137
3.7 析构函数 138
3.7.1 析构函数的设计思想和定义 138
3.7.2 弱指针与析构函数 140
3.8 赋值运算符函数、复制构造函数和移动函数设计 142
3.8.1 赋值运算符函数 142
3.8.2 复制构造函数 146
3.8.3 移动函数 149
3.9 静态成员 154
3.10 this指针 157
3.11 对象应用 161
3.11.1 成员访问操作符 161
3.11.2 对象数组与对象指针 164
3.11.3 向函数传递对象 165
3.11.4 对象成员 166
3.12 类的作用域和对象的生命期 169
3.13 友元 172
3.14 编程实作:类的接口与实现的分离 173
3.14.1 头文件 174
3.14.2 源文件 175
3.14.3 对类的应用 176
习题3 180
第4章 继承 185
4.1 继承的概念 186
4.2 protected与继承 187
4.3 继承方式 188
4.4 派生类对基类的扩展 191
4.4.1 成员函数的重定义和名字隐藏 191
4.4.2 基类成员访问 193
4.4.3 using和隐藏函数重现 194
4.4.4 派生类修改基类成员的访问权限 195
4.4.5 友元与继承 196
4.4.6 静态成员与继承 197
4.4.7 继承和类作用域 198
4.5 构造函数和析构函数 199
4.5.1 派生类构造函数的建立规则 200
4.5.2 派生类构造函数和析构函数的调用次序 205
4.5.3 派生类的赋值、复制和移动操作 207
4.6 基类与派生类对象的关系 208
4.6.1 派生类对象对基类对象的赋值和初始化 209
4.6.2 派生类对象与基类对象的类型转换 211
4.7 多继承 213
4.7.1 多继承的概念和应用 213
4.7.2 多继承方式下的成员二义性 215
4.7.3 多继承的构造函数和析构函数 216
4.8 虚拟继承 217
4.9 继承和组合 222
4.10 编程实作:继承编程应用 226
习题4 231
第5章 多态 237
5.1 多态概述 238
5.1.1 多态的概念 238
5.1.2 多态的意义 240
5.1.3 多态和绑定 241
5.2 虚函数 241
5.2.1 虚函数的意义 241
5.2.2 override和final 244
5.2.3 虚函数的特性 246
5.3 虚析构函数 251
5.4 纯虚函数和抽象类 252
5.4.1 纯虚函数和抽象类 252
5.4.2 抽象类的应用 254
5.5 运行时类型信息 262
5.5.1 dynamic_cast 263
5.5.2 typeid 266
5.6 编程实作:多态编程应用 268
习题5 269
第6章 运算符重载 274
6.1 运算符重载基础 275
6.2 重载二元运算符 277
6.2.1 类与二元运算符重载 277
6.2.2 非类成员方式重载二元运算符的特殊用途 280
6.3 重载一元运算符 282
6.3.1 作为成员函数重载 282
6.3.2 作为友元函数重载 284
6.4 特殊运算符重载 285
第1章 C++与面向对象程序设计 1
1.1 面向对象程序设计概述 2
1.1.1 面向过程程序设计 2
1.1.2 面向对象程序设计 3
1.1.3 面向对象程序设计语言的特征 4
1.2 C++语言概述 6
1.2.1 C++语言简史 7
1.2.2 C++的特点 8
1.2.3 C++程序的结构 8
1.2.4 标准C++程序设计 11
1.3 数据的输入和输出 13
1.3.1 数据类型 13
1.3.2 流的概念 15
1.3.3 cin和提取运算符>> 15
1.3.4 cout和插入运算符<< 17
1.3.5 输出格式控制符 19
1.3.6 数制基数 21
1.3.7 string和字符串的输入、输出 22
1.3.8 数据输入的典型问题 24
1.4 编程实作:Visual C++ 2022编程简介 28
习题1 32
第2章 C++程序设计基础 34
2.1 C++语言对C语言的类型扩展和类型定义 35
2.2 C++程序变量设计的基本思想 36
2.3 左值、右值和断言 38
2.4 指针 39
2.4.1 指针概述 39
2.4.2 void*指针和获取数组首、尾元素位置的指针 41
2.4.3 内存的分配和释放 42
2.4.4 智能指针 44
2.5 引用 49
2.5.1 左值引用 49
2.5.2 右值引用、移动及其语义 52
2.6 const和constexpr常量 54
2.6.1 常量的定义 54
2.6.2 const、constexpr与指针 55
2.6.3 const与引用 56
2.6.4 顶层const和底层const 57
2.7 auto、decltype和decltype(auto)类型 58
2.8 C++新式for循环和数组 60
2.8.1 begin、end和基于范围的for循环 60
2.8.2 vector和valarray 61
2.9 数据类型转换 63
2.10 函数 66
2.10.1 函数原型 66
2.10.2 函数参数传递的方式 67
2.10.3 函数默认参数 71
2.10.4 函数返回值 72
2.10.5 函数重载 75
2.10.6 函数与const和constexpr 78
2.10.7 内联函数 81
2.11 匿名函数 82
2.12 命名空间 88
2.13 变量 90
2.13.1 变量定义 90
2.13.2 作用域 90
2.13.3 变量的类型和生命期 92
2.13.4 变量初始化 93
2.13.5 局部变量与函数返回地址 97
2.14 预处理器 97
2.15 文件的输入和输出 100
2.15.1 文件操作的基本流程 100
2.15.2 输入流、输出流的泛化思想 101
2.16 编程实作:C++程序设计初步 102
习题2 104
第3章 类和对象 110
3.1 类的抽象和封装 111
3.1.1 抽象 111
3.1.2 封装 113
3.2 结构 115
3.2.1 C++对结构的扩展 116
3.2.2 类 118
3.3 数据成员 119
3.4 成员函数 120
3.4.1 成员函数定义方式和内联函数 120
3.4.2 常量成员函数 122
3.4.3 成员函数重载和默认参数值 123
3.5 对象 123
3.6 构造函数设计 126
3.6.1 编译器默认添加成员函数 127
3.6.2 构造函数和类内初始值 128
3.6.3 默认构造函数 130
3.6.4 重载构造函数 133
3.6.5 构造函数与初始化列表 135
3.6.6 委托构造函数 137
3.7 析构函数 138
3.7.1 析构函数的设计思想和定义 138
3.7.2 弱指针与析构函数 140
3.8 赋值运算符函数、复制构造函数和移动函数设计 142
3.8.1 赋值运算符函数 142
3.8.2 复制构造函数 146
3.8.3 移动函数 149
3.9 静态成员 154
3.10 this指针 157
3.11 对象应用 161
3.11.1 成员访问操作符 161
3.11.2 对象数组与对象指针 164
3.11.3 向函数传递对象 165
3.11.4 对象成员 166
3.12 类的作用域和对象的生命期 169
3.13 友元 172
3.14 编程实作:类的接口与实现的分离 173
3.14.1 头文件 174
3.14.2 源文件 175
3.14.3 对类的应用 176
习题3 180
第4章 继承 185
4.1 继承的概念 186
4.2 protected与继承 187
4.3 继承方式 188
4.4 派生类对基类的扩展 191
4.4.1 成员函数的重定义和名字隐藏 191
4.4.2 基类成员访问 193
4.4.3 using和隐藏函数重现 194
4.4.4 派生类修改基类成员的访问权限 195
4.4.5 友元与继承 196
4.4.6 静态成员与继承 197
4.4.7 继承和类作用域 198
4.5 构造函数和析构函数 199
4.5.1 派生类构造函数的建立规则 200
4.5.2 派生类构造函数和析构函数的调用次序 205
4.5.3 派生类的赋值、复制和移动操作 207
4.6 基类与派生类对象的关系 208
4.6.1 派生类对象对基类对象的赋值和初始化 209
4.6.2 派生类对象与基类对象的类型转换 211
4.7 多继承 213
4.7.1 多继承的概念和应用 213
4.7.2 多继承方式下的成员二义性 215
4.7.3 多继承的构造函数和析构函数 216
4.8 虚拟继承 217
4.9 继承和组合 222
4.10 编程实作:继承编程应用 226
习题4 231
第5章 多态 237
5.1 多态概述 238
5.1.1 多态的概念 238
5.1.2 多态的意义 240
5.1.3 多态和绑定 241
5.2 虚函数 241
5.2.1 虚函数的意义 241
5.2.2 override和final 244
5.2.3 虚函数的特性 246
5.3 虚析构函数 251
5.4 纯虚函数和抽象类 252
5.4.1 纯虚函数和抽象类 252
5.4.2 抽象类的应用 254
5.5 运行时类型信息 262
5.5.1 dynamic_cast 263
5.5.2 typeid 266
5.6 编程实作:多态编程应用 268
习题5 269
第6章 运算符重载 274
6.1 运算符重载基础 275
6.2 重载二元运算符 277
6.2.1 类与二元运算符重载 277
6.2.2 非类成员方式重载二元运算符的特殊用途 280
6.3 重载一元运算符 282
6.3.1 作为成员函数重载 282
6.3.2 作为友元函数重载 284
6.4 特殊运算符重载 285

















