全书详细介绍了和C++相关的C语言知识、类和对象、继承、多态、模板和运算符重载,以及面向对象设计方法的概念,结合知识点简要地讨论了几种常用的设计模式;针对重要概念精心设计了大量实例,涉及很多技巧和经验。
本书不仅可以作为高等院校C++面向对象程序设计的教材,也是希望了解C++语言和面向对象程序设计知识的专业人员的参考书。
C++是一门非常重要的语言,有着许多不同语言的特性,它甚至可以上升到思想的高度,其思想被很多其他语言借鉴和沿袭。掌握了C++,学习其他语言就非常容易了。
本书内容覆盖基本概念和方法,基本数据结构和面向对象的概念、方法和技巧。全书分为9章。第1章介绍面向对象程序设计的思想和基本概念。第2章介绍有关C++的一些知识,让读者们轻松地从C语言转到C++。第3章介绍C++的一些基本知识,如名字空间、输入输出等。第4~6章介绍面向对象的三大主要特性: 封装、继承和多态。第7章介绍操作符重载,通过示例对常见的操作符重载进行分析。第8章介绍面向对象编程体系中的思想精髓——面向接口编程。第9章介绍模板相关知识。
本书全面而又系统地介绍了C++编程的基本知识,包括C++基本数据类型、基本语法和面向对象编程的基础知识和技巧。无论是刚开始编程还是已有一些编程经验,都会发现本书的精心安排使得学习C++变得快捷又轻松。
大多数教材都是按各部分内容逻辑上的先后顺序进行组织的,各知识点比较孤立,跨度较大,容易使学生产生“只见树木,不见森林”的感觉。针对这一问题,本书将知识点进一步细化分级,突出重点、难点,缩小台阶,达到深入浅出、循序渐进的目的。
本书针对已有C程序设计基础,要学习C++面向对象程序设计的读者。本书可作为高等学校C++面向对象程序设计课程的教材,也可作为工程技术人员的参考书。
本书具有以下特色:
(1) 内容整合。C、C++相融合。本书针对已有C语言基础的学生,帮助其从C语言顺利过渡到C++语言,涵盖了C++语言的主要特征,使初学者能很快学习掌握C++。
(2) 知识体系完整,教学内容由浅入深,从易到难,循序渐进,层次分明,对每个C++的理论方法从需求到应用做了详细的描述。
(3) 本书在内容组织上采用案例教学的思想,对C++中容易出错的地方都用实例进行了讲解。
(4) 本书配有电子课件、程序源代码、习题参考答案。
本书中包含大量的示例代码,其中大部分是完整程序,如无特殊声明,该程序编译和运行环境为Visual C++ 2012、32位Windows 7系统。
这里,特别感谢恩师范辉教授一直以来给予的关怀、教诲和启迪。在初稿完成后,范辉教授仔细审阅后提出了很多宝贵意见,使本书更加完善。同时,对所有曾经鼓励和帮助过我的领导、同事、专家、朋友表示诚挚的谢意。
由于时间仓促及作者水平有限,本书肯定有疏漏甚至错误之处,望专家和广大读者不吝指正。
作者
2015年10月
第1章绪论1
1.1程序设计语言1
1.2C++的发展历史4
1.3面向过程程序设计语言5
1.4面向对象程序设计语言7
1.5类与抽象数据类型10
1.6继承与多态10
1.7接口与组件11
习题12
第2章从C到C++13
2.1自定义数据类型13
2.1.1结构体13
2.1.2共用体28
2.1.3位域33
2.1.4枚举39
2.1.5typedef声明类型42
2.2函数46
2.2.1引用46
2.2.2参数传递方式52
2.2.3函数的重载57
2.2.4有默认参数的函数60
2.2.5内联函数61
2.2.6函数调用栈结构65
2.2.7函数返回值69
2.2.8函数指针和指针函数78
2.2.9const修饰符88目录◆C++面向对象程序设计(第2版)2.3函数和结构体97
2.3.1有函数的结构体97
2.3.2若干实例102
习题112
第3章C++语言初步114
3.1一个简单的C++程序114
3.2名字空间115
3.2.1名字空间的定义117
3.2.2域操作符::118
3.2.3无名的名字空间120
3.2.4名字空间的别名121
3.2.5组合和选择122
3.2.6名字空间和重载123
3.2.7名字查找124
3.2.8名字空间是开放的125
3.3输入和输出125
3.3.1cout输出126
3.3.2cin输入130
3.4string类型133
3.5new和delete140
3.6异常处理146
习题153
第4章类和对象156
4.1一个典型例子156
4.2类介绍162
4.3示例: Stack类173
4.4构造函数与析构函数176
4.4.1构造函数176
4.4.2复制构造函数182
4.4.3构造函数的初始化列表189
4.4.4析构函数192
4.4.5构造/析构函数的显示调用200
4.5类的静态成员203
4.6this指针211
4.7指向类成员的指针220
4.8成员对象和封闭类224
4.9常成员和常对象230
4.10引用成员236
4.11友元241
4.12局部类和嵌套类246
4.13C语言实现类的封装253
习题256
第5章继承和派生260
5.1介绍260
5.2基本概念与语法264
5.3派生类成员的访问属性268
5.3.1公有继承269
5.3.2私有继承274
5.3.3保护继承279
5.3.4基类static成员的继承281
5.3.5派生类的using声明284
5.4派生类构造函数和析构函数287
5.4.1派生类构造函数287
5.4.2派生类析构函数294
5.4.3派生类复制构造函数295
5.4.4派生类和成员对象297
5.5多重继承299
5.6继承和组合310
5.7重载、隐藏和覆盖318
5.8C语言实现继承323
习题325
第6章多态性330
6.1多态的形式330
6.1.1静态多态330
6.1.2动态多态333
6.2虚函数定义334
6.3虚函数和多态341
6.3.1虚函数多态的形式341
6.3.2动态联编345
6.3.3多态的实现347
6.3.4构造函数中调用virtual函数352
6.3.5普通成员函数中调用虚函数355
6.3.6私有虚函数356
6.3.7虚析构函数362
6.3.8有默认参数的虚函数363
6.3.9虚函数和友元364
6.4纯虚函数和抽象类369
6.4.1纯虚函数定义369
6.4.2继承的局限373
6.4.3接口的继承和实现继承375
6.5多态增强程序可扩充性的例子378
6.6dynamic_cast和static_cast389
6.7多重继承和虚函数396
6.8C语言实现多态400
习题405
第7章运算符重载407
7.1运算符重载的定义407
7.2常用运算符的重载412
7.2.1下标运算符的重载412
7.2.2输入输出运算符重载414
7.2.3赋值运算符重载416
7.2.4关系运算符重载420
7.2.5new和delete运算符重载423
7.2.6解除引用运算符重载426
7.2.7函数运算符重载429
7.3运算符重载的注意事项438
习题442
第8章面向接口编程444
8.1接口与实现分离444
8.2代理模式448
8.3桥接模式453
8.4适配器模式461
8.5组合模式467
8.6观察者模式470
习题478
第9章模板480
9.1函数模板480
9.2类模板490
9.3类模板实例: 队列510
9.4模板的特化512
9.5模板和宏521
习题524
附录AUML类图526
参考文献532