第1篇 简介 2
第1章 开始 2
1.1 C++简史 2
1.1.1 C++发展历程 2
1.1.2应先学习C语言吗 3
1.1.3 C++与面向对象编程(OOP) 4
1.2编程工具的安装与使用 7
1.2.1 ANSI标准以及标准化的重要性 7
1.2.2编程工具的安装 8
1.2.3编程工具的配置 10
1.3编程准备 12
1.4创建程序的步骤 13
1.4.1用编译器生成目标文件 14
1.4.2用链接器生成可执行文件 15
1.5小结 16
第2章 C++概述 17
2.1 Hello World!第一个C++程序 17
2.1.1打开编译器并新建源文件 17
2.1.2保存文件并输入代码 18
2.1.3编译并运行程序 19
2.1.4出错信息 21
2.2主函数 22
2.2.1最小的C++程序 22
2.2.2主函数的定义 23
2.2.3使用主函数的注意事项 23
2.2.4主函数的返回值 24
2.3标准库名字空间 25
2.3.1从程序了解名字空间 25
2.3.2名字空间解析 26
2.4预处理指示符 27
2.5输入与输出 28
2.5.1标准输出(cout) 29
2.5.2标准输入 32
2.5.3命令提示符窗口下怎样编译程序 36
2.5.4标准错误(cerr) 40
2.6关于注释 42
2.6.1单行注释 43
2.6.2多行注释 43
2.6.3使用注释应该注意些什么 44
2.7控制结构 47
2.7.1 while语句 47
2.7.2 for语句 50
2.7.3 if语句 51
2.8常见面试题 53
2.9小结 54
2.10习题 54
第2篇 基础入门 56
第3章 变量和基本类型 56
3.1基本内置类型 56
3.1.1整型 57
3.1.2算术类型可以带符号 60
3.1.3浮点型 63
3.2文字常量 64
3.2.1整型文字常量 64
3.2.2浮点型文字常量 67
3.2.3布尔值文字常量 68
3.2.4字符文字常量 68
3.2.5字符串文字常量 69
3.2.6转义字符 71
3.3变量 72
3.3.1变量的命名 75
3.3.2关键字的使用 75
3.3.3变量命名规则 76
3.3.4变量初始化 76
3.3.5变量的声明与定义 78
3.3.6名字的作用域 78
3.4 const限定符 81
3.4.1不使用const限定符 82
3.4.2使用const限定符 83
3.5引用 85
3.5.1什么是引用 85
3.5.2使用引用的注意事项 85
3.5.3引用是对象的别名 86
3.5.4多个引用如何定义 88
3.5.5带const限定符的引用 90
3.6使用typedef来创建类型别名 91
3.7枚举 92
3.7.1枚举的定义 92
3.7.2枚举成员是常量 94
3.7.3枚举定义了新的类型 95
3.8类类型 96
3.9常见面试题 96
3.10小结 97
3.11习题 97
第4章 表达式 99
4.1表达式的定义 99
4.2算术操作符 101
4.2.1+操作符 101
4.2.2-操作符 102
4.2.3*与/操作符 103
4.2.4%操作符 104
4.3关系操作符 108
4.4逻辑运算符 110
4.4.1逻辑运算符的使用 110
4.4.2使用逻辑操作符的注意事项 113
4.5位操作符 113
4.5.1什么是位操作符 114
4.5.2位与操作符 114
4.5.3位异或操作符 114
4.5.4位或操作符 115
4.5.5位移操作符 115
4.6赋值操作符 115
4.6.1什么是赋值操作符 115
4.6.2赋值操作符的左操作数必须是非const的左值 116
4.6.3赋值操作符的右结合性 118
4.6.4赋值操作符的优先级 119
4.6.5复合赋值操作符 120
4.7自增和自减操作符 121
4.7.1前置操作符 121
4.7.2后置操作符 122
4.8复合表达式的求值 123
4.8.1优先级 123
4.8.2结合性 124
4.8.3圆括号 126
4.9条件操作符 126
4.10常见面试题 127
4.11小结 129
4.12习题 129
第5章 语句 130
5.1简单语句 130
5.1.1简单语句的使用 130
5.1.2空语句 131
5.1.3空语句造成的错误 132
5.1.4表达式语句 133
5.2声名语句 133
5.3复合语句:大括号括起来的语句 133
5.3.1什么是复合语句 133
5.3.2复合语句也可是空语句 134
5.3.3复合语句中名字的作用范围 135
5.4语句作用域:语句的有效范围 137
5.5 if语句 138
5.5.1什么是if语句 138
5.5.2 else语句 140
5.5.3注意正确的书写缩进 143
5.6 switch语句 143
5.6.1使用switch语句 143
5.6.2 switch中的控制流 146
5.6.3在switch语句中慎用break语句 147
5.6.4 default标号 148
5.6.5使用switch语句需知 149
5.7 while语句:实现循环 150
5.7.1 while语句 150
5.7.2 while语句的使用 150
5.8 for语句:实现循环 152
5.8.1 for语句的简介与使用 152
5.8.2省略for语句头的某些部分 153
5.8.3 for语句头中的多个定义 155
5.9 do while语句:通过判断实现循环 155
5.10 break语句 158
5.11 continue语句:结束最近的循环语句 159
5.12 goto语句:实现函数内部的无条件跳转 160
5.12.1 goto语句简介 160
5.12.2使用goto语句需注意 161
5.13常见面试题 162
5.14小结 163
5.15 习题 163
第6章 数组 165
6.1一维数组 165
6.1.1一维数组的定义 165
6.1.2一维数组的初始化 167
6.1.3一维数组的操作 169
6.1.4数组不能直接复制与赋值 170
6.2二维数组 171
6.2.1二维数组的定义 171
6.2.2二维数组的初始化 173
6.2.3二维数组的操作 176
6.3多维数组 179
6.3.1多维数组的定义 179
6.3.2多维数组的初始化 180
6.3.3多维数组的操作 180
6.4字符数组 182
6.4.1字符数组的定义 182
6.4.2字符数组的初始化 182
6.4.3字符数组的操作 184
6.5常见面试题 185
6.6小结 186
6.7习题 186
第7章 字符串 187
7.1 C风格字符串 187
7.1.1 C风格字符串的使用 188
7.1.2永远不要忘记字符串结束符null 189
7.1.3调用者必须确保目标字符串具有足够的大小 190
7.1.4尽量使用标准库类型string 190
7.2 string类:长度可变的字符串 190
7.2.1 string类型的定义和初始化 191
7.2.2 string对象的读写 192
7.2.3 getline读取整行文本 193
7.2.4 string类型的size和empty操作 193
7.2.5 string类型的赋值与相加 194
7.3字符串的各种方法 195
7.3.1 strcpy():将一个字符串完全复制到另一个字符串 195
7.3.2 strcat():将一个字符串连接到另一个字符串的后面 196
7.3.3 strcmp():比较两个字符串 197
7.3.4 strlen():统计字符串的个数 199
7.4常见面试题 199
7.5小结 200
7.6习题 200
第8章 指针 202
8.1什么是指针 202
8.1.1内存简介 202
8.1.2获取变量的内存地址 204
8.1.3指针的定义与初始化 204
8.1.4使用“*”来操作指针变量 211
8.1.5指针、地址与变量 213
8.2指针的操作 213
8.2.1通过操作指针来操作指针所指向的值 213
8.2.2使指针指向另一个指针 215
8.3指针变量可以作为函数的参数 217
8.4使用指针操作数组 218
8.4.1如何使用指针操作数组 218
8.4.2输出数组元素的值 220
8.5指向const变量的指针与const指针 221
8.5.1指向const变量的指针 221
8.5.2 const指针 222
8.6常见面试题 224
8.7小结 225
8.8 习题 225
第9章 函数 227
9.1函数的定义 227
9.1.1函数原形 229
9.1.2函数的调用 231
9.1.3函数的返回类型 235
9.1.4函数形参表 236
9.1.5函数体为一个作用域 239
9.2参数传递 241
9.2.1形参与实参 241
9.2.2非引用形参:复制形参的值 241
9.2.3引用形参:形参只是实参的别名 242
9.2.4数组形参 246
9.3主函数 249
9.3.1主函数的类型 249
9.3.2 return语句 250
9.4嵌套与递归 253
9.4.1函数的嵌套调用 253
9.4.2函数嵌套调用的实例 254
9.4.3函数的递归 255
9.4.4函数递归的实例 255
9.5函数重载 256
9.6常见面试题 257
9.7小结 258
9.8习题 259
第3篇 类和数据抽象 262
第10章 标准库类型 262
10.1 using声明 262
10.2标准库string类型:对字符串的一般应用 264
10.2.1 string对象的定义和初始化 265
10.2.2 string对象的读写 266
10.2.3 string对象的size操作 267
10.2.4 string对象的empty操作 267
10.2.5 string对象的赋值操作 268
10.2.6 string对象的下标操作 269
10.2.7 string对象的相加操作 270
10.2.8 string对象的关系操作 273
10.2.9 string对象中字符的处理 275
10.3标准vector类型:一种类型对象的集合 280
10.3.1 vector对象的定义和初始化 280
10.3.2向vector对象添加元素 282
10.3.3 vector对象的empty与size操作 282
10.3.4 vector对象的下标操作 284
10.3.5 vector对象的复制操作 286
10.4迭代器 287
10.4.1 vector容器的迭代器类型 287
10.4.2迭代器的begin与end操作 287
10.4.3迭代器的解引用操作 288
10.4.4迭代器的关系操作 289
10.4.5迭代器的算术操作 290
10.5常见面试题 291
10.6小结 292
10.7习题 292
第11章 类 293
11.1类的定义与声明 293
11.1.1如果没有类会怎么样 293
11.1.2类定义 294
11.1.3类对象 296
11.1.4成员函数 298
11.1.5数据抽象与封装 303
11.1.6访问标号 303
11.1.7类声明与类定义的区别 306
11.1.8 inline(内联)函数 307
11.1.9结构与类 308
11.2类的作用域 309
11.2.1每个类都有一个作用域 309
11.2.2类中的成员可以在类外进行定义 310
11.2.3使用类中的成员 310
11.3构造函数 311
11.3.1定义构造函数 312
11.3.2类中可以声明多个构造函数 314
11.3.3构造函数的初始化 317
11.3.4数据成员初始化的顺序 322
11.3.5默认构造函数 324
11.3.6拷贝构造函数 327
11.4析构函数 328
11.4.1析构函数的定义 328
11.4.2合成析构函数 329
11.4.3析构函数的调用顺序 329
11.5隐含的this指针:指向类对象的指针 331
11.6友元:可以访问类的私有成员 334
11.6.1友元函数 334
11.6.2友元类 337
11.7 static成员 339
11.7.1类中的static成员 339
11.7.2 static成员函数 341
11.7.3 static数据成员 342
11.8常见面试题 344
11.9小结 345
11.10习题 345
第12章 重载操作符 347
12.1重载操作符简介 347
12.1.1重载操作符的定义 347
12.1.2可重载与不可重载的操作符 348
12.1.3重载并不改变优先级与结合性 348
12.1.4内置类型的内置操作不能重定义 348
12.1.5如何使用重载操作符 349
12.1.6重载操作符函数可以是类的成员函数 349
12.1.7重载操作符函数也可以是非成员函数 349
12.2算术操作符和关系操作符重载 349
12.2.1相等操作符 350
12.2.2关系操作符 352
12.2.3算术操作符 354
12.3输入和输出操作符重载 356
12.3.1输出操作符的重载 356
12.3.2输入操作符的重载 358
12.4赋值操作符重载 363
12.5自增与自减操作符重载 364
12.5.1前置操作 364
12.5.2后置操作 366
12.6常见面试题 369
12.7小结 370
12.8习题 370
第13章 继承性 372
13.1基类和派生类 373
13.1.1继承结构 373
13.1.2定义基类 375
13.1.3派生类的定义 377
13.1.4派生类的构造函数和析构函数 379
13.2继承方式 382
13.2.1继承方式简介 382
13.2.2 public继承实例 383
13.2.3 protected继承实例 386
13.2.4 private继承实例 388
13.3多继承:继承多个基类 392
13.3.1多继承的概念 392
13.3.2二义性问题 394
13.4虚基类 397
13.4.1虚基类的引入和说明 398
13.4.2虚基类的构造 401
13.5继承相关 401
13.5.1友元关系与继承 402
13.5.2继承与static成员 403
13.6常见面试题 404
13.7小结 406
13.8习题 407
第14章 多态性 408
14.1多态性 408
14.1.1没有多态将会遇到的问题 408
14.1.2多态的定义 411
14.1.3普通成员函数重载的方法 413
14.1.4普通成员函数在类中重载 417
14.1.5基类的成员函数在派生类中存在重载吗 418
14.1.6函数重载的注意事项 422
14.1.7函数重载的二义性 425
14.1.8构造函数重载 428
14.1.9基类指针指向派生类 432
14.2虚函数 436
14.2.1没有虚函数将会遇到的问题 436
14.2.2静态联编与动态联编 439
14.2.3虚函数 440
14.2.4虚函数的重定义 447
14.3常见面试题 450
14.4小结 452
14.5习题 452
第4篇 高级主题 456
第15章 命名空间 456
15.1命名空间的定义 456
15.1.1命名空间的定义 456
15.1.2命名空间的作用域 457
15.1.3添加新成员 458
15.1.4在命名空间外定义函数 460
15.2嵌套命名空间 461
15.2.1如何嵌套定义命名空间 461
15.2.2外围名字将被嵌套名字屏蔽 462
15.2.3注意嵌套命名空间中名字的作用域 463
15.2.4外围命名空间也可以使用嵌套命名空间中的名字 465
15.3命名空间别名 466
15.4未命名的命名空间 467
15.5命名空间中设定名字的优先级 470
15.6命名空间与重载 471
15.7常见面试题 473
15.8小结 474
15.9习题 474
第16章 模板 476
16.1函数模板 476
16.1.1未使用函数模板的程序 476
16.1.2函数模板的定义 478
16.1.3函数模板的使用 479
16.1.4函数模板与模板函数 481
16.1.5函数模板参数 481
16.2类模板 485
16.2.1类模板的定义 485
16.2.2类模板的使用 486
16.2.3模板类与类模板 487
16.3与typename具有相同含义的class 488
16.4模板形参与非类型模板形参 489
16.4.1模板形参 489
16.4.2非类型模板形参 491
16.5常见面试题 492
16.6小结 493
16.7习题 493
第17章 异常处理与错误 495
17.1为何需要异常处理 495
17.2 throw表达式 496
17.3 try块与catch的使用 497
17.4常见错误 499
17.5程序调试 501
17.5.1设置断点 501
17.5.2添加查看 504
17.6常见面试题 507
17.7小结 508
17.8习题 508