本书详细介绍了C 面向对象的核心编程思想和方法,特别注重程序设计的实用性,使读者具备运用面向对象的方法分析和解决实际问题的能力。
本书以面向对象的程序设计贯穿始终,共9章,主要包括:C 程序设计基础、文件操作、类的基础、继承、多态、虚函数、对象组合、异常处理、标准模板库STL(主要介绍编程常用的string类、容器类、迭代器及其算法等)以及通过ODBC对数据库进行编程等,为后继课程的学习和课程设计打下坚实的基础。书中列举了数百个可供直接使用的程序示例代码,并给出了运行结果。
本书语言流畅、实例丰富,讲解了C 程序设计的核心内容。全部代码都在Visual Studio C 2010环境下调试通过,并配有大量的习题,同时在网站提供了该书的电子教案和程序示例源码,特别适合作为高等学校C 编程和面向对象程序设计课程的教材。
(1) 本书主要讲解面向对象的程序设计理论和编程方法,这些是计算机科学与技术专业学生的编程基础。(2) 本书作者近20年来一直从事程序设计方面的教学和科研工作,主讲过程序设计方面的多门课程,如C、C 和Java,积累了丰富的教学经验。从实践到理论,再从理论到实践,循序而渐进是作者教学的心得体会,编写教材也不例外,作者深知学生的薄弱环节和学习特点,具有针对性。(3) 该书内容与时俱进,讲解了C 的许多新内容。例如,string类、体现了泛型程序设计思想的STL,以及基于STL的基本程序设计方法、通过ODBC对常规数据库的编程方法等。作者认为,随着C 的发展,教材也应当与之同步。本书另辟新章专门讲解了这些内容,并结合实例给出了具体应用和综合举例。为读者采用C 进行课程设计和项目研发打下坚实的基础。(4) 作业安排从易到难,环环相扣。许多学生学过C ,却不会编程。因此,本书设计了许多与实际有关的习题,并且它们彼此相关。(5) 课程设计。C 课程往往都有课程设计,为便于教师组织教学和学生理解课程设计要求,本书的*后给出了课程设计的基本要求和文档模板,为课程设计的顺利进行提供了便利。(6) 力求通俗易懂。编写本书的目的是让读者通过自学或在教师的讲授下,能够运用C 语言的核心要素,进行面向对象的程序设计。因此,本书围绕着如何进行C 编程展开。为了便于读者的学习,作者力求该书的语言通俗易懂,将复杂的概念采用浅显的语言讲述,便于读者理解和掌握。本书编排特点(1) 每章开始均引出本章要讲解的内容和学习要求。(2) 每章安排的习题都具有很强的操作性,能通过计算机编程验证。(3) 对书中重要的内容采用黑体标记,特别重要的内容采用下面加点标记。(4) 本书强调程序的可读性。书中的程序全部采用统一的程序设计风格。例如,类名、方法名和变量名的定义做到望名知义;语句的末尾或下一句的开头放上左大括号,而右大括号自成一行,并采用缩排格式组织程序代码;此外,对程序中的语句还进行了尽可能多的注释。希望读者模仿这种程序设计风格。(5) 本书包含了大量的程序示例,全部采用Microsoft Visual C 2010(Express) 版本给出了运行结果。凡是程序开头带有程序名编号的程序都是完整的程序,可以直接在计算机上编译运行。(6) 本书采用醒目的标记来显示知识点。这些注意和思考的标记,都穿插在内容中,帮助读者尽快找到重要的信息。
前言
C 是一种广泛使用的计算机编程语言,常用于系统开发、引擎开发等应用领域,是至今为止最受广大程序员喜爱的、最强大的编程语言之一,它支持封装、继承和重载等面向对象的重要特性。同时,C 也是高校学生学习程序设计的一门专业必修课程,学好C 语言,可以很容易地触类旁通其他语言,如Java、C#等。本书是作者总结近20年的教学和实践经验编著而成的,结合实例讲解了C 的基本概念和方法,力求将复杂的概念用简洁、通俗的语言描述,做到深入浅出、循序渐进。适合用作为高校C 程序设计和面向对象程序设计课程的教材,也可供具有C语言编程基础的自学者使用。本书特点(1) 本书主要讲解面向对象的程序设计理论和编程方法,这些是计算机科学与技术专业学生的编程基础。(2) 本书作者近20年来一直从事程序设计方面的教学和科研工作,主讲过程序设计方面的多门课程,如C、C 和Java,积累了丰富的教学经验。从实践到理论,再从理论到实践,循序而渐进是作者教学的心得体会,编写教材也不例外,作者深知学生的薄弱环节和学习特点,具有针对性。(3) 该书内容与时俱进,讲解了C 的许多新内容。例如,string类、体现了泛型程序设计思想的STL,以及基于STL的基本程序设计方法、通过ODBC对常规数据库的编程方法等。作者认为,随着C 的发展,教材也应当与之同步。本书另辟新章专门讲解了这些内容,并结合实例给出了具体应用和综合举例。为读者采用C 进行课程设计和项目研发打下坚实的基础。(4) 作业安排从易到难,环环相扣。许多学生学过C ,却不会编程。因此,本书设计了许多与实际有关的习题,并且它们彼此相关。(5) 课程设计。C 课程往往都有课程设计,为便于教师组织教学和学生理解课程设计要求,本书的最后给出了课程设计的基本要求和文档模板,为课程设计的顺利进行提供了便利。(6) 力求通俗易懂。编写本书的目的是让读者通过自学或在教师的讲授下,能够运用C 语言的核心要素,进行面向对象的程序设计。因此,本书围绕着如何进行C 编程展开。为了便于读者的学习,作者力求该书的语言通俗易懂,将复杂的概念采用浅显的语言讲述,便于读者理解和掌握。本书编排特点(1) 每章开始均引出本章要讲解的内容和学习要求。(2) 每章安排的习题都具有很强的操作性,能通过计算机编程验证。(3) 对书中重要的内容采用黑体标记,特别重要的内容采用下面加点标记。(4) 本书强调程序的可读性。书中的程序全部采用统一的程序设计风格。例如,类名、方法名和变量名的定义做到望名知义;语句的末尾或下一句的开头放上左大括号,而右大括号自成一行,并采用缩排格式组织程序代码;此外,对程序中的语句还进行了尽可能多的注释。希望读者模仿这种程序设计风格。(5) 本书包含了大量的程序示例,全部采用Microsoft Visual C 2010(Express) 版本给出了运行结果。凡是程序开头带有程序名编号的程序都是完整的程序,可以直接在计算机上编译运行。(6) 本书采用醒目的标记来显示知识点。这些注意和思考的标记,都穿插在内容中,帮助读者尽快找到重要的信息。【注意】 值得读者关注的地方,往往是容易混淆的知识点。【程序运行结果】 给出当前示例的运行结果。【程序解析】 对示例程序中的难点给予分析,帮助读者理解程序。【思考】 在对示例程序理解的基础上,进一步提出问题,引导读者思考,以培养其思考能力。教学支持我们向使用本教材的教师免费提供本书的用PowerPoint 2003制作的电子课件和全部程序示例源代码,需要的教师可以在http://www.tup.tsinghua.edu.cn网站上获取。感谢读者选择本书,欢迎提出批评和修改建议,作者联系电子邮件dc.pi@163.com。
作者2017年1月
目录
第1章C 程序设计基础1
1.1为什么要学习C 程序设计1
1.2过程化程序设计和面向对象程序设计2
1.3简单的输出和输入方法2
1.3.1cout对象2
1.3.2cin对象4
1.4标识符7
1.5布尔类型8
1.6培养良好的编程风格8
1.6.1风格对比9
1.6.2注释方法9
1.7格式化输出11
1.7.1采用操作符实现格式化输出12
1.7.2采用函数成员实现格式化输出17
1.7.3对函数成员的初步讨论19
1.8格式化输入19
1.8.1指定输入域宽19
1.8.2读取一行20
1.8.3读取一个字符21
1.8.4读取字符时容易出错的地方22
1.9函数的默认参数23
1.10引用作函数参数25
1.11函数重载27
1.12内存的动态分配和释放30
思考与练习33
第2章文件操作36
2.1文件的基本概念36
2.1.1文件命名的原则36
2.1.2使用文件的基本过程36
2.1.3文件流类型37目录2.2打开文件和关闭文件37
2.2.1打开文件38
2.2.2文件的打开模式39
2.2.3定义流对象时打开文件40
2.2.4测试文件打开是否成功40
2.2.5关闭文件41
2.3采用流操作符读写文件41
2.3.1采用<<写文件41
2.3.2格式化输出在写文件中的应用43
2.3.3采用>>从文件读数据45
2.3.4检测文件结束46
2.4流对象作为参数47
2.5出错检测49
2.6采用函数成员读写文件51
2.6.1采用>>读文件的缺陷51
2.6.2采用函数getline读文件52
2.6.3采用函数get读文件53
2.6.4采用函数put写文件54
2.7多文件操作55
2.8二进制文件57
2.8.1二进制文件的操作57
2.8.2读写结构体记录58
2.9随机访问文件62
2.9.1顺序访问文件的缺陷62
2.9.2定位函数seekp和seekg62
2.9.3返回位置函数tellp和tellg65
2.10输入输出文件67
思考与练习71
第3章类的基础部分73
3.1过程化程序设计与面向对象程序设计的区别73
3.1.1过程化程序设计的缺陷74
3.1.2面向对象程序设计的基本思想74
3.2类的基本概念75
3.3定义函数成员78
3.4定义对象79
3.4.1访问对象的成员79
3.4.2指向对象的指针79
3.4.3引入私有成员的原因81
3.5类的多文件组织82
3.6私有函数成员的作用84
3.7内联函数85
3.8构造函数和析构函数87
3.8.1构造函数87
3.8.2析构函数89
3.8.3带参构造函数91
3.8.4构造函数应用举例输入有效的对象93
3.8.5重载构造函数95
3.8.6缺省构造函数的表现形式97
3.9对象数组98
3.10类的应用举例101
3.11抽象数组类型106
3.11.1创建抽象数组类型106
3.11.2扩充抽象数组类型109
思考与练习114
第4章类的高级部分115
4.1静态成员115
4.1.1静态数据成员116
4.1.2静态函数成员118
4.2友元函数121
4.3对象赋值问题125
4.4拷贝构造函数127
4.4.1默认的拷贝构造函数129
4.4.2调用拷贝构造函数的情况129
4.4.3拷贝构造函数中的常参数131
4.5运算符重载131
4.5.1重载赋值运算符132
4.5.2this指针134
4.5.3重载运算符时要注意的问题137
4.5.4重载双目算术运算符138
4.5.5重载单目算术运算符140
4.5.6重载关系运算符141
4.5.7重载流操作符<<和>>142
4.5.8重载类型转换运算符144
4.5.9重载\[\]操作符149
4.5.10操作符重载综合举例自定义string类154
4.6对象组合163
思考与练习165
第5章继承、多态和虚函数166
5.1继承166
5.2保护成员和类的访问171
5.3构造函数和析构函数174
5.3.1缺省构造函数和析构函数的调用175
5.3.2向基类的构造函数传参数176
5.4覆盖基类的函数成员179
5.5虚函数182
5.6纯虚函数和抽象类185
5.6.1纯虚函数185
5.6.2抽象类186
5.6.3指向基类的指针189
5.7多重继承190
5.8多继承192
思考与练习195
第6章异常处理198
6.1异常198
6.1.1抛出异常199
6.1.2处理异常199
6.2基于对象的异常处理201
6.3捕捉多种类型的异常203
6.4通过异常对象获取异常信息205
6.5再次抛出异常207
思考与练习208
第7章模板209
7.1函数模板209
7.1.1从函数重载到函数模板209
7.1.2在函数模板中使用操作符需要注意的地方212
7.1.3在函数模板中使用多种类型213
7.1.4重载函数模板213
7.1.5定义函数模板的方法214
7.2类模板215
7.2.1定义类模板的方法215
7.2.2定义类模板的对象217
7.2.3类模板与继承219
思考与练习222
第8章标准模板库STL223
8.1标准模板库简介223
8.2string类型226
8.2.1如何使用string类型226
8.2.2为string对象读取一行226
8.2.3string对象的比较227
8.2.4string对象的初始化227
8.2.5string的函数成员228
8.2.6string对象应用举例230
8.3迭代器类231
8.4顺序容器233
8.4.1矢量类234
8.4.2列表类239
8.4.3双端队列类242
8.5函数对象与泛型算法244
8.5.1函数对象245
8.5.2泛型算法248
8.6关联容器251
8.6.1集合和多重集合类251
8.6.2映射和多重映射类253
8.7容器适配器255
8.7.1栈容器适配器255
8.7.2队列容器适配器256
8.7.3优先级队列容器适配器257
思考与练习258
第9章数据库程序设计259
9.1数据库简介259
9.2SQL语句260
9.2.1定义表260
9.2.2查询260
9.2.3插入261
9.2.4删除261
9.2.5修改261
9.3数据库连接262
9.3.1ODBC简介262
9.3.2ODBC驱动程序262
9.3.3创建数据源262
9.4数据库编程中的基本操作264
9.4.1数据库编程的基本过程264
9.4.2数据库查询265
9.4.3插入记录266
9.4.4修改记录267
9.4.5删除记录268
9.5数据库编程综合举例269
思考与练习276
附录A课程设计要求278
A.1课程设计简介278
A.2程序结构282
A.3程序的主要特点283
A.4操作说明283
A.4.1收银模块283
A.4.2书库管理模块284
A.4.3报表模块284
A.4.4退出系统285
附录B课程设计报告格式286
参考文献288