本书是作者在多年从事 C++语言教学的基础上编写的。书中总结了教学中的经验和教训,并针对学生在学习过程中遇到的困难和提出的问题进行讲解。本书第1版出版以来,已被多所学校作为教材,印数逾20万册。为更好地满足教学需求,根据读者建议及教学实践,作者对本书第1版进行了认真的修订,删去了一些不必要的内容,增加了函数模板和类模板等新内容。本书的特点是: 通俗易懂,适于自学;由浅入深,便于理解;概念明确,语言简洁;例题丰富,内容全面;重点突出,难点详解。
本书较全面、系统地讲述了 C++语言的基本概念和编程方法。通过学习本书,读者能够正确理解 C++语言中面向对象的方法,基本掌握 C++语言中的词法、语法,并且可以达到使用 C++语言编写简单程序的目的。
本书第2版继承了第1版的章节结构,共分9章。前4章讲述了 C++语言的基本词法和语法规则,包括字符集、词法规则、程序结构、运算符和表达式、各类语句、函数格式和调用方式、作用域及存储类等内容。在这些内容中, C++语言只是对C语言中的相应内容进行一些改进和补充,与C语言的内容很相近。第5~8章讲述了 C++语言所支持的面向对象的程序设计方法的内容,包括类和对象的概念及定义格式、对象的赋值和运算、继承性和派生类、多态性和虚函数等内容。这些内容使 C++语言成为一种面向对象的程序设计语言,这是学习 C++语言的重点和难点。这部分内容是C语言所没有的。第9章讲述了标准文件的读写函数和对一般文件的操作。本书每章都提供了较多例题,例题的针对性较强。全书共有180道例题。每章后面都备有相当数量的练习题和作业题。读者通过练习题可以检查自己对本章所学内容掌握的情况,练习题的覆盖面很广;通过作业题可以练习所讲过的主要内容,包括概念性的训练和方法技巧训练。初学 C++语言的读者,一是要弄清基本概念;二是要多看程序,从中学习方法和技巧,从而积累编程经验。本书提供了这两方面的训练。
本书的所有例题和作业题中要求分析输出结果的程序都在Visual C++6.0版本的编译系统下运行通过,在其他版本的编译系统中一般也都可以运行。
本书可作为高等学校教材,也可作为教师和学生的参考书。本书还适合作为自学 C++语言的教材。
目录
- 第1章C++语言概述1
- 1.1面向对象程序设计的有关概念1
- 1.1.1面向对象的由来和发展1
- 1.1.2面向对象的有关概念2
- 1.2C++语言是一种面向对象的程序设计语言4
- 1.2.1C++语言对面向对象程序设计方法的支持4
- 1.2.2C++语言与C语言的关系5
- 1.3C++语言的词法及词法规则6
- 1.3.1C++语言的字符集7
- 1.3.2单词及词法规则7
- 1.4C++程序结构的特点9
- 1.4.1一个 C++语言的示范程序9
- 1.4.2C++程序的组成部分10
- 1.43C++程序的书写格式12
- 1.5C++程序的实现14
- 1.5.1C++程序的编辑、编译和运行14
- 1.5.2Visual C++ 6.0版本的基本用法16
- 练习题19
- 作业题20
- 第2章数据类型和表达式23
- 2.1基本数据类型23
- 2.2常量和变量25
- 2.2.1常量25
- 2.2.2变量28
- 2.3数组29
- 2.3.1数组的定义29
- 2.3.2数组的赋值30
- 2.3.3字符数组32
- 2.4枚举33
- 2.4.1枚举类型和枚举变量33
- 2.4.2枚举变量的值34
- 2.5指针和引用35
- 2.5.1指针35
- 2.5.2指针和数组38
- 2.5.3字符指针43
- 2.5.4引用45
- 2.6运算符46
- 2.6.1算术运算符46
- 2.6.2关系运算符48
- 2.6.3逻辑运算符48
- 2.6.4位操作运算符48
- 2.6.5赋值运算符49
- 2.6.6其他运算符50
- 2.6.7运算符的优先级和结合性53
- 2.7表达式53
- 2.7.1表达式的种类53
- 2.7.2表达式的值和类型54
- 2.7.3表达式中的类型转换59
- 2.8类型定义61
- 2.9结构和联合63
- 2.9.1结构64
- 2.9.2联合67
- 练习题69
- 作业题70
- 第3章预处理和语句75
- 3.1预处理功能75
- 3.1.1文件包含命令76
- 3.1.2条件编译命令76
- 3.1.3宏定义命令79
- 3.2语句85
- 3.2.1表达式语句和空语句85
- 3.2.2复合语句和分程序85
- 3.3选择语句86
- 3.3.1条件语句86
- 3.3.2开关语句88
- 3.4循环语句91
- 3.4.1while循环语句91
- 3.4.2do-while循环语句92
- 3.4.3for循环语句93
- 3.4.4多重循环95
- 3.5转向语句99
- 3.5.1goto语句99
- 3.5.2break语句100
- 3.5.3continue语句101
- 练习题102
- 作业题102
- 第4章函数和作用域111
- 4.1函数的定义和说明111
- 4.1.1函数的定义格式113
- 4.1.2函数的说明方法113
- 4.2函数的调用115
- 4.2.1函数的值和类型115
- 4.2.2函数的传值调用116
- 4.2.3函数的引用调用118
- 4.3函数的参数120
- 4.3.1函数参数的求值顺序120
- 4.3.2设置函数参数的默认值121
- 4.3.3使用数组作为函数参数122
- 4.4内联函数124
- 4.4.1内联函数引入的原因124
- 4.4.2内联函数的定义方法125
- 4.4.3使用内联函数应注意的事项125
- 4.5函数重载126
- 4.5.1参数类型上不同的重载函数126
- 4.5.2参数个数上不同的重载函数127
- 4.6函数的嵌套调用和递归调用128
- 4.6.1函数的嵌套调用128
- 4.6.2函数的递归调用129
- 4.7作用域131
- 4.7.1标识符的作用域规则132
- 4.7.2作用域的种类132
- 4.7.3关于重新定义标识符的作用域规定133
- 4.7.4局部变量和全局变量135
- 4.7.5内部函数和外部函数138
- 4.8C++语言的系统函数141
- 4.8.1C++语言系统函数概述141
- 4.8.2字符串处理函数143
- 4.9函数模板147
- 4.9.1函数模板的概念147
- 4.9.2函数模板的使用149
- 练习题151
- 作业题152
- 第5章类和对象(一)161
- 5.1类的定义161
- 5.1.1什么是类161
- 5.1.2类的定义格式162
- 5.1.3注意事项164
- 5.2对象的定义166
- 5.2.1对象的定义格式166
- 5.2.2对象成员的表示方法166
- 5.3对象的初始化169
- 5.3.1构造函数和析构函数169
- 5.3.2默认构造函数和默认析构函数171
- 5.3.3复制构造函数171
- 5.4成员函数的特性174
- 5.4.1内联函数和外联函数175
- 5.4.2重载性176
- 5.4.3设置参数的默认值177
- 5.5静态成员178
- 5.5.1静态数据成员179
- 5.5.2静态成员函数182
- 5.6友元183
- 5.6.1友元函数183
- 5.6.2友元类185
- 5.7类的作用域187
- 5.8局部类和嵌套类188
- 5.8.1局部类188
- 5.8.2嵌套类189
- 5.9对象的生存期190
- 练习题192
- 作业题193
- 第6章类和对象(二)200
- 6.1对象指针和对象引用200
- 6.1.1指向类的成员的指针200
- 6.1.2对象指针和对象引用作为函数参数203
- 6.1.3this指针205
- 6.2对象数组和对象指针数组207
- 6.2.1对象数组207
- 6.2.2指向数组的指针和指针数组209
- 6.2.3带参数的main()函数214
- 6.3常类型215
- 6.3.1一般常量和对象常量215
- 6.3.2常指针和常引用216
- 6.3.3常成员函数219
- 6.3.4常数据成员221
- 6.4子对象和堆对象222
- 6.4.1子对象222
- 6.4.2堆对象224
- 6.5类型转换230
- 6.5.1类型的自动隐式转换230
- 6.5.2构造函数具有类型转换功能231
- 6.5.3类型转换函数232
- 6.6类模板234
- 6.6.1类模板的引进234
- 6.6.2类模板和模板类235
- 6.6.3类模板应用举例238
- 6.7应用实例——链表240
- 练习题244
- 作业题245
- 第7章继承性和派生类254
- 7.1基类和派生类254
- 7.1.1派生类的定义255
- 7.1.2派生类的三种继承方式255
- 7.1.3基类成员在派生类中的访问权限256
- 7.1.4成员访问权限的控制256
- 7.2单继承259
- 7.2.1派生类构造函数和析构函数260
- 7.2.2子类型和赋值兼容规则266
- 7.3多继承269
- 7.3.1多继承的概念269
- 7.3.2多继承的构造函数和析构函数270
- 7.3.3多继承的二义性问题273
- 7.4虚基类278
- 7.4.1虚基类的引入和说明278
- 7.4.2含有虚基类的派生类的构造函数280
- 7.5应用实例——日期和时间282
- 练习题284
- 作业题285
- 第8章多态性和虚函数295
- 8.1函数重载295
- 8.2运算符重载298
- 8.2.1运算符重载的几个问题298
- 8.2.2运算符重载函数的两种形式299
- 8.2.3其他运算符的重载举例306
- 8.3静态联编和动态联编310
- 8.3.1静态联编310
- 8.3.2动态联编311
- 8.4虚函数312
- 8.5纯虚函数和抽象类319
- 8.5.1纯虚函数319
- 8.5.2抽象类322
- 8.6虚析构函数324
- 8.7程序举例326
- 练习题332
- 作业题333
- 第9章C++语言的I/O流库342
- 9.1屏幕输出343
- 9.1.1使用预定义的插入符343
- 9.1.2使用成员函数put()输出一个字符345
- 9.1.3使用成员函数write()输出一个字符串346
- 9.2键盘输入347
- 9.2.1使用预定义的提取符347
- 9.2.2使用成员函数get()获取一个字符349
- 9.2.3使用成员函数read()读取一串字符352
- 9.3插入符和提取符的重载353
- 9.4格式化输入和输出356
- 9.4.1使用成员函数设置流的格式化标志位356
- 9.4.2格式输出函数358
- 9.4.3操作子360
- 9.5磁盘文件的输入和输出361
- 9.5.1磁盘文件的打开和关闭操作361
- 9.5.2文本文件的读写操作363
- 9.5.3二进制文件的读写操作366
- 9.5.4随机访问数据文件368
- 9.5.5其他有关文件操作的函数371
- 9.6字符串流374
- 9.6.1ostrstream类的构造函数375
- 9.6.2istrstream类的构造函数376
- 9.7流错误的处理377
- 9.7.1状态字和状态函数378
- 9.7.2清除和设置流的状态位379
- 练习题380
- 作业题381
- 附录AASCII码表386
- 参考文献387