本书是根据著名C语言专家Herbert Schildt的著作翻译的。这是一本关于C++语言的百科全书,包括C 和C++的命令、功能、编程和应用等方面的内容。全书分为五个部分:C++基础:C子集;C++的专有特征;标准函数库;标准C++类库;C++应用程序范例。详细描述和演示了定义C++语言的关键字、语法、函数、类和特征。其中第一部分全面讨论了C++的C子集;第二部分详细介绍了C++本身的特性,如类和对象、构造函数、析构函数和模板等;第三部分描述了标准函数库;第四部分讨论了标准类库,包括STL(标准模板库);第五部分显示了两个应用C++和面向对象编程的实际例子。
本书内容全面、翔实,是学习C++编程语言的广大学生的一部有用的工具书,也是对C++感兴趣的读者的必备参考书。
目录
第一部分 C++基础:C子集
第1章 C语言概述 3
1.1 C语言的起源和历史 3
1.2 C语言是中级语言 4
1.3 C语言是结构化语言 5
1.4 C语言是程序员的语言 6
1.5 C程序的结构 7
1.6 库和链接 8
1.7 分别编译 9
1.8 理解.C和.CPP文件扩展 9
第2章 表达式 10
2.1 五种基本数据类型 10
2.2 修饰基本类型 10
2.3 标识符名称 12
2.4 变量 12
2.5 const和volatile限定符 16
2.6 存储类限定符 18
2.7 变量初始化 22
2.8 常量 23
2.9 运算符 24
2.10 表达式 36
第3章 语句 40
3.1 C和C++中的真值和假值 40
3.2 选择语句 40
3.3 迭代语句 49
3.4 在选择和迭代语句内声明变量 57
3.5 跳转语句 57
3.6 表达式语句 62
3.7 块语句 62
第4章 数组和以null结束的字符串 63
4.1 一维数组 63
4.2 生成指向数组的指针 64
4.3 向函数传递一维数组 64
4.4 以null结束的字符串 65
4.5 二维数组 67
4.6 多维数组 71
4.7 带下标的指针 72
4.8 数组初始化 73
4.9 棋盘游戏实例 75
第5章 指针 79
5.1 什么是指针 79
5.2 指针变量 79
5.3 指针运算符 80
5.4 指针表达式 81
5.5 指针和数组 84
5.6 多级间址 85
5.7 初始化指针 86
5.8 指向函数的指针 87
5.9 C语言的动态分配函数 89
5.10 指针应用中的问题 91
第6章 函数 94
6.1 函数的一般形式 94
6.2 函数作用域的规则 94
6.3 函数变元 95
6.4 传给main( )的变元argc和argv 99
6.5 return语句 101
6.6 递归 105
6.7 函数原型 106
6.8 声明变长参数列表 108
6.9 传统的与现代的函数参数声明 108
第7章 结构、联合、枚举和用户定义的类型 110
7.1 结构 110
7.2 结构数组 113
7.3 向函数传递结构 113
7.4 结构指针 115
7.5 结构中的数组和结构 118
7.6 位域 118
7.7 联合 120
7.8 枚举 122
7.9 用sizeof来保证可移植性 124
7.10 typedef 125
第8章 C风格的控制台I/O 127
8.1 一个重要的应用说明 127
8.2 读写字符 128
8.3 读写字符串 130
8.4 格式化的控制台I/O 132
8.5 printf( ) 132
8.6 scanf( ) 137
第9章 文件I/O 143
9.1 C与C++的文件I/O 143
9.2 流和文件 143
9.3 流 143
9.4 文件 144
9.5 文件系统基础 144
9.6 fread( )和fwrite( ) 153
9.7 fseek( )和随机访问I/O 155
9.8 fprintf( )和fscanf( ) 156
9.9 标准流 157
第10章 预处理器和注释 160
10.1 预处理器 160
10.2 #define 160
10.3 #error 162
10.4 #include 162
10.5 条件编译指令 163
10.6 #undef 166
10.7 使用defined 166
10.8 #line 166
10.9 #pragma 167
10.10 #和##预处理器运算符 167
10.11 预定义的宏名 168
10.12 注释 168
第二部分 C++的专有特征
第11章 C++语言概述 172
11.1 C++的起源 172
11.2 什么是面向对象的程序设计 173
11.3 C++基础 174
11.4 老的C++与现代C++ 179
11.5 C++的类 182
11.6 函数重载 185
11.7 运算符重载 187
11.8 继承 187
11.9 构造函数和析构函数 191
11.10 C++的关键字 194
11.11 C++程序的一般形式 195
第12章 类和对象 196
12.1 类 196
12.2 结构和类是相互关联的 198
12.3 联合和类是相互关联的 200
12.4 友元函数 201
12.5 友元类 205
12.6 内联函数 206
12.7 在类中定义内联函数 207
12.8 带参数的构造函数 208
12.9 带一个参数的构造函数:特例 210
12.10 静态类成员 211
12.11 何时执行构造函数和析构函数 216
12.12 作用域分辨符 217
12.13 嵌套类 217
12.14 局部类 217
12.15 向函数传递对象 218
12.16 返回对象 220
12.17 对象赋值 221
第13章 数组、指针、引用和动态分配运算符 222
13.1 对象数组 222
13.2 指向对象的指针 224
13.3 C++指针的类型检查 226
13.4 this指针 226
13.5 指向派生类型的指针 228
13.6 指向类成员的指针 229
13.7 引用 231
13.8 格式问题 236
13.9 C++的动态分配运算符 237
第14章 函数重载、拷贝构造函数和默认变元 245
14.1 函数重载 245
14.2 重载构造函数 246
14.3 拷贝构造函数 249
14.4 查找重载函数的地址 252
14.5 重载的过去与现在 253
14.6 默认的函数变元 253
14.7 函数重载和二义性 257
第15章 运算符重载 261
15.1 创建成员运算符函数 261
15.2 使用友元函数的运算符重载 266
15.3 重载new和delete 270
15.4 重载某些特殊运算符 277
15.5 重载逗号运算符 282
第16章 继承 284
16.1 基类访问控制 284
16.2 继承和保护成员 285
16.3 继承多个基类 289
16.4 构造函数、析构函数和继承 290
16.5 准许访问 296
16.6 虚基类 297
第17章 虚函数与多态性 302
17.1 虚函数 302
17.2 继承虚属性 305
17.3 虚函数是分层的 306
17.4 纯虚函数 308
17.5 使用虚函数 310
17.6 早期绑定与后期绑定 312
第18章 模板 313
18.1 通用函数 313
18.2 应用通用函数 319
18.3 通用类 322
18.4 关键字typename和export 330
18.5 模板的功用 331
第19章 异常处理 332
19.1 异常处理基础 332
19.2 处理派生类异常 338
19.3 异常处理选项 339
19.4 理解terminate( )和unexpected( ) 343
19.5 uncaught_exception( )函数 345
19.6 exception和bad_exception类 345
19.7 异常处理的应用 345
第20章 C++输入/输出系统基础 347
20.1 老的C++ I/O与现代的C++ I/O 347
20.2 C++的流 347
20.3 C++的流类 348
20.4 格式化的I/O 349
20.5 重载<> 358
第21章 C++文件的输入/输出 368
21.1 和文件类 368
21.2 打开和关闭文件 368
21.3 读写文本文件 370
21.4 无格式和二进制I/O 372
21.5 其他get( )函数 376
21.6 getline( )函数 376
21.7 检测EOF 377
21.8 ignore( )函数 379
21.9 peek( )和putback( )函数 379
21.10 flush( )函数 380
21.11 随机访问 380
21.12 I/O状态 383
21.13 定制的I/O和文件 384
第22章 运行时类型标识与强制转换运算符 387
22.1 运行时类型标识 387
22.2 强制转换运算符 394
22.3 dynamic_cast 394
第23章 名字空间、转换函数和其他高级主题 403
23.1 名字空间 403
23.2 std名字空间 409
23.3 创建转换函数 411
23.4 const成员函数与mutable 414
23.5 volatile成员函数 415
23.6 explicit构造函数 415
23.7 成员初始化语法 416
23.8 利用关键字asm 420
23.9 连接说明 421
23.10 基于数组的I/O 421
23.11 C与C++的区别 426
第24章 标准模板库 428
24.1 STL概述 428
24.2 容器类 430
24.3 一般的操作原理 431
24.4 vector容器 432
24.5 list容器 439
24.6 map容器 447
24.7 算法 452
24.8 使用函数对象 459
24.9 string类 464
24.10 关于STL的最后一点说明 473
第三部分 标准函数库
第25章 基于C的输入/输出函数 477
25.1 clearerr函数 477
25.2 fclose函数 477
25.3 feof函数 478
25.4 ferror函数 478
25.5 fflush函数 478
25.6 fgetc函数 478
25.7 fgetpos函数 479
25.8 fgets函数 479
25.9 fopen函数 479
25.10 fprintf函数 480
25.11 fputc函数 481
25.12 fputs函数 481
25.13 fread函数 481
25.14 freopen函数 481
25.15 fscanf函数 482
25.16 fseek函数 482
25.17 fsetpos函数 483
25.18 ftell函数 483
25.19 fwrite函数 483
25.20 getc函数 483
25.21 getchar函数 484
25.22 gets函数 484
25.23 perror函数 484
25.24 printf函数 484
25.25 putc函数 486
25.26 putchar函数 486
25.27 puts函数 487
25.28 remove函数 487
25.29 rename函数 487
25.30 rewind函数 487
25.31 scanf函数 487
25.32 setbuf函数 490
25.33 setvbuf函数 490
25.34 sprintf函数 490
25.35 sscanf函数 490
25.36 tmpfile函数 491
25.37 tmpnam函数 491
25.38 ungetc函数 491
25.39 vprintf,vfprintf和vsprintf函数 492
第26章 字符串与字符函数 493
26.1 isalnum函数 493
26.2 isalpha函数 493
26.3 iscntrl函数 493
26.4 isdigit函数 494
26.5 isgraph函数 494
26.6 islower函数 494
26.7 isprint函数 494
26.8 ispunct函数 494
26.9 isspace函数 495
26.10 isupper函数 495
26.11 isxdigit函数 495
26.12 memchr函数 495
26.13 memcmp函数 495
26.14 memcpy函数 496
26.15 memmove函数 496
26.16 memset函数 496
26.17 strcat函数 496
26.18 strchr函数 497
26.19 strcmp函数 497
26.20 strcoll函数 497
26.21 strcpy函数 497
26.22 strcspn函数 498
26.23 strerror函数 498
26.24 strlen函数 498
26.25 strncat函数 498
26.26 strncmp函数 498
26.27 strncpy函数 499
26.28 strpbrk函数 499
26.29 strrchr函数 499
26.30 strspn函数 499
26.31 strstr函数 500
26.32 strtok函数 500
26.33 strxfrm函数 500
26.34 tolower函数 500
26.35 toupper函数 501
第27章 数学函数 502
27.1 acos函数 502
27.2 asin函数 502
27.3 atan函数 503
27.4 atan2函数 503
27.5 ceil函数 503
27.6 cos函数 503
27.7 cosh函数 503
27.8 exp函数 504
27.9 fabs函数 504
27.10 floor函数 504
27.11 fmod函数 504
27.12 frexp函数 504
27.13 ldexp函数 505
27.14 log函数 505
27.15 log10函数 505
27.16 modf函数 505
27.17 pow函数 506
27.18 sin函数 506
27.19 sinh函数 506
27.20 sqrt函数 506
27.21 tan函数 506
27.22 tanh函数 507
第28章 时间、日期和定位函数 508
28.1 asctime函数 508
28.2 clock函数 509
28.3 ctime函数 509
28.4 difftime函数 509
28.5 gmtime函数 509
28.6 localeconv函数 510
28.7 localtime函数 511
28.8 mktime函数 511
28.9 setlocale函数 511
28.10 strftime函数 512
28.11 time函数 512
第29章 动态分配函数 514
29.1 calloc函数 514
29.2 free函数 514
29.3 malloc函数 515
29.4 realloc函数 515
第30章 实用函数 516
30.1 abort函数 516
30.2 abs函数 516
30.3 assert函数 516
30.4 atexit函数 517
30.5 atof函数 517
30.6 atoi函数 517
30.7 atol函数 518
30.8 bsearch函数 518
30.9 div函数 518
30.10 exit函数 519
30.11 getenv函数 519
30.12 labs函数 519
30.13 ldiv函数 519
30.14 longjmp函数 520
30.15 mblen函数 520
30.16 mbstowcs函数 520
30.17 mbtowc函数 520
30.18 qsort函数 521
30.19 raise函数 521
30.20 rand函数 522
30.21 setjmp函数 522
30.22 signal函数 522
30.23 srand函数 522
30.24 strtod函数 523
30.25 strtol函数 523
30.26 strtoul函数 523
30.27 system函数 524
30.28 va_arg,va_start和va_end函数 524
30.29 wcstombs函数 524
30.30 wctomb函数 525
第31章 宽字符函数 526
31.1 宽字符分类函数 526
31.2 宽字符I/O函数 528
31.3 宽字符串函数 529
31.4 宽字符串转换函数 529
31.5 宽字符数组函数 530
31.6 多字节/宽字符转换函数 530
第四部分 标准C++类库
第32章 标准C++ I/O类 534
32.1 I/O类 534
32.2 I/O头文件 535
32.3 格式化标记和I/O操作算子 536
32.4 几个数据类型 537
32.5 重载<>运算符 538
32.6 通用的I/O函数 538
第33章 STL容器类 549
33.1 容器类 549
第34章 STL算法 564
34.1 adjacent_find 564
34.2 binary_search 564
34.3 copy 565
34.4 copy_backward 565
34.5 count 565
34.6 count_if 565
34.7 equal 565
34.8 equal_range 565
34.9 fill和fill_n 566
34.10 find 566
34.11 find_end 566
34.12 find_first_of 566
34.13 find_if 567
34.14 for_each 567
34.15 generate和generate_n 567
34.16 includes 567
34.17 inplace_merge 567
34.18 iter_swap 568
34.19 lexicographical_compare 568
34.20 lower_bound 568
34.21 make_heap 568
34.22 max 568
34.23 max_element 569
34.24 merge 569
34.25 min 569
34.26 min_element 569
34.27 mismatch 570
34.28 next_permutation 570
34.29 nth_element 570
34.30 partial_sort 570
34.31 partial_sort_copy 571
34.32 partition 571
34.33 pop_heap 571
34.34 prev_permutation 571
34.35 push_heap 572
34.36 random_shuffle 572
34.37 remove, remove_if, remove_copy和remove_copy_if 572
34.38 replace, replace_copy, replace_if和 replace_copy_if 573
34.39 reverse和reverse_copy 573
34.40 rotate和rotate_copy 573
34.41 search 574
34.42 search_n 574
34.43 set_difference 574
34.44 set_intersection 574
34.45 set_symmetric_difference 575
34.46 set_union 575
34.47 sort 575
34.48 sort_heap 576
34.49 stable_partition 576
34.50 stable_sort 576
34.51 swap 576
34.52 swap_ranges 576
34.53 transform 576
34.54 unique和unique_copy 577
34.55 upper_bound 577
第35章 STL迭代器、分配器和函数对象 578
35.1 迭代器 578
35.2 函数对象 585
35.3 分配器 590
第36章 字符串类 592
36.1 basic_string类 592
36.2 char_traits类 598
第37章 数字类 600
37.1 complex类 600
37.2 valarray类 603
37.3 数字算法 614
第38章 异常处理和杂项类 618
38.1 异常 618
38.2 auto_ptr 619
38.3 pair类 621
38.4 本地化 621
38.5 其他有趣的类 621
第五部分 C++应用程序范例
第39章 集成新的类:自定义字符串类 624
39.1 StrType类 624
39.2 构造函数和析构函数 625
39.3 字符串I/O 626
39.4 赋值函数 627
39.5 连接 628
39.6 子字符串减法 630
39.7 关系运算符 632
39.8 各种字符串函数 632
39.9 完整的StrType类 633
39.10 使用StrType类 640
39.11 创建和集成新类型 642
39.12 挑战 642
第40章 分析表达式 643
40.1 表达式 643
40.2 分析表达式:问题 644
40.3 分析一个表达式 644
40.4 parser类 645
40.5 剖析一个表达式 646
40.6 一个简单的表达式分析器 648
40.7 向分析器中添加变量 653
40.8 递归下降分析器中的语法检查 660
40.9 构建一个通用的分析器 661
40.10 需要试验的一些东西 667
附录A C++的.NET可管理扩展 669
附录B C++和机器人时代 672