C++面向对象程序设计

C++面向对象程序设计"

作者:黄宝贵、黄万丽、马春梅、禹继国、赵景秀、闫超
ISBN:9787302550341
定价:¥59.50
字数:千字
页数:
出版时间:2020.04.01
开本:
版次:1-2
装帧:
出版社:清华大学出版社
简介

本书作为高校本科生面向对象程序设计的入门教程,使学生掌握面向对象程序设计的基本方法、设计思路及编程理念,掌握C++面向对象程序设计的三大核心技术:封装、继承与多态。了解代码重用的主要机制及方法,掌握泛型编程的基本方法。本书注重理论性与实用性相结合,由浅入深,通过简单的示例讲解复杂的语法,用项目案例将基本语法进行整合,引导读者深入理解与体会面向对象程序设计的精髓。本书内容分为十章,包括:C++程序设计语言概述、C++对C的扩展、类的声明及使用、运算符的重载、类的继承与多态、函数模板与类模板、STL、输入/输出与

前言

一、 为什么编写这本书

毋庸置疑,C++语言是当前非常流行的面向对象程序设计语言,各高等院校的计算机专业都开设了C++语言课程,作为面向对象程序设计的入门课程,有些学校甚至把C++语言课程作为非计算机专业学生的公共课。

然而,不可否认的是,C++语言语法复杂,想要轻松学习并熟练掌握C++语言的精髓绝非易事。目前,介绍C++语言的书数不胜数,这些书要么篇幅过大,要么内容比较具体、深入。当然,适合初学者的书也比较多,其中也不乏优秀的书。

但是,笔者依然耗费巨大的精力编写本书。笔者多年来一直从事一线教学工作,有着多年讲授C语言和C++语言的经验,知道学生学习C++语言的主要障碍是什么,哪些问题对他们来说是难以理解的,哪些问题是相对比较容易的。笔者一直尝试站在学生的角度看C++语言到底是什么,如何以学生的思维理解一个语法知识点。这也是编写本书的出发点。本书力求做到深入浅出,通过大量的示例把复杂的概念用浅显的语言介绍给读者。

二、 如何使用这本书

本书主要面向高等院校计算机专业的学生,使用本书时要注意以下几点。

(1) 需要有C语言编程基础。严格来说,本书并不是一部完整的C++程序设计语言教程,因为本书省略了一些关于C++语言的基本语法方面的内容,如基本数据类型(int、char、float、double等)、程序控制结构(顺序结构、分支结构和循环结构)、数组、指针、结构体、自定义函数等。C++语言是在C语言基础上发展起来的,它兼容C语言,有许多语法与C语言语法是相同的。因此,笔者建议读者要有一定的C语言编程基础。(2) 突出本书的基础性作用。通常,C++语言是学生接触的第一门面向对象程序设计语言,他们缺乏程序设计的实际经验,而且没有学习数据结构、算法等相关课程。所以,目前他们很难用C++语言编写出实用的应用程序。本书以大量的、简单的控制台应用程序演示C++语言语法及功能,通俗化地介绍面向对象程序设计中晦涩的、难以理解的概念,希望读者不要厌烦这些看似简单、没有任何用处的示例。事实上,每个示例都是笔者精心设计的、具有代表性的,能够深刻剖析C++语言的每个语法细节。但是,笔者始终坚持一个观点: 学习C++语言时绝不能沉陷于C++语言的语法细节的汪洋大海中,因为C++语言的语法太过复杂,如果拘泥于语法细节的实现,往往只会使读者深切地感到C++语言语法的枯燥,无法从更高的角度高屋建瓴地理解面向对象程序设计的概念及编程理念。而建立正确的面向对象程序设计的理念及程序设计方法是学习C++语言的一个最主要目的。

(3) 切忌眼高手低。学好C++语言通常需要经过三个阶段: 首先是模仿阶段。多读别人写的代码,不断揣摩编程者的心思,试图做到与编程者的心灵相通,彻底理解代码的功能及设计思路。其次是质疑阶段。质疑别人写的任何代码,力图从另外一个角度找到解决问题的方法,做到以更简洁、易懂的代码解决相同的问题。但是,这个阶段编写的代码往往经不起推敲。最后是自由发挥阶段。对于任何问题总能找到最恰当的算法,编写出无懈可击的、健壮的代码。笔者在教学过程中发现,有些学生编写代码的思路很“奇特”,代码虽然简单却不容易理解。而这些学生往往很欣赏自己的“杰作”,俨然把自己当作了“编程达人”。事实上,思路“奇特”、可读性差的代码并不是好的代码,这些代码中往往存在设计漏洞,经不起推敲。所以,在使用本书的过程中,笔者建议读者放下“身段”,把每个示例都读一遍、写一遍、改一遍。读懂笔者的心思,看懂示例代码,然后亲自编写一遍代码,力求做到仿而不抄。最后修改代码,达到“青出于蓝而胜于蓝”的效果。

笔者很喜欢网上看到的一段话,大概意思是: 我知道打基础是痛苦而且没有多少成就感的过程,但是在化茧成蝶之前,我们还是要继续做而且要认真地做“毛毛虫”,因为我们知道我们会有变成美丽蝴蝶的那一天!以此与读者共勉。

三、 本书各章内容介绍

本书内容共分为10章,包括初识C++、预备知识、类与对象、运算符重载、类继承、多态、模板、标准模板库、输入/输出流、异常与断言。

第1章主要介绍C++语言的发展、特点及应用领域;C++语言程序设计基本过程、程序基本结构、名称空间、常用编译器等;Code::Blocks集成开发环境,在Code::Blocks中设计C++语言控制台应用程序的基本方法及过程。

第2章主要介绍C++语言不同于C语言的数据类型、变量声明及初始化方法,包括布尔类型、类型转换、自动类型声明及变量的列表初始化;数组的另外三种实现方法: vector、array和string字符串;使用new和delete运算符申请内存及回收内存,引用与指针的联系与区别,左值引用与右值引用,内联函数、默认参数函数及函数重载的概念及作用等。

第3章主要介绍面向对象程序设计的概念及程序设计理念,类的声明、对象定义、构造函数、析构函数等,类中成员的访问方式,类的封装性的意义,类中特殊成员(如静态成员、常成员等)的作用及使用方式,类的友元的作用及使用注意事项。

第4章主要介绍运算符重载的概念、意义,常用运算符在自定义类中的重载规则、重载方式,类型转换函数及类型转换构造函数等。

第5章主要介绍类的继承,包括程序设计中代码重用的意义、不同继承方式下类中成员的访问方式、多重继承等。

第6章主要介绍多态,包括静态多态性及动态多态性、基类与派生类之间的类型转换、虚函数与动态多态性的实现、纯虚函数与抽象类等。

第7章主要介绍程序设计中的代码重用和范型编程的概念及意义,包括函数模板的功能及使用方法、类模板的功能及使用方法、函数模板及类模板的实例化、可变参数函数模板等。

第8章主要介绍标准模板库(Standard Template Library,STL),STL主要包含容器、迭代器、算法、函数对象等。本章内容包括序列容器(vector、deque、list)及容器适配器(stack、queue)、关联容器(set、map等)、迭代器(迭代器的类型及作用)、算法(STL中常用的算法,如find、sort、for_each等)及函数对象的使用方法。

第9章主要介绍输入/输出流的概念、C++中标准流类库、标准输入流(istream)、标准输出流(ostream)、数据输入/输出的方法及格式化控制、文件流类、文件流对象的创建、文件的打开与关闭、文本文件及二进制文件的读/写方法、字符串流的概念及使用方法等。

第10章主要介绍程序设计过程中的异常处理,包括异常的概念、异常处理的机制、异常类、断言及静态断言等。

四、 致谢

首先感谢山东省教育服务新旧动能转换专业对接产业项目(曲阜师范大学精品旅游)对本书的资助。

笔者在编写本书的过程中得到了很多领导和教师的指导与帮助,也得到了父母、爱人、孩子的大力支持,没有他们的帮助,笔者很难完成书稿。

感谢禹继国教授、赵景秀教授,他们为本书稿提出了一些很有见地的指导意见。感谢清华大学出版社编辑的帮助。

感谢所有参与书稿编写的教师,主要参编人员有黄万丽、马春梅、闫超、张秀娟、司广涛、刘金星、崔新春、任平红等,全体人员在编写过程中付出了辛勤的汗水,在此一并表示感谢!

尽管我们付出了最大的努力,但是由于知识水平及能力有限,书中难免有不妥之处。真诚地希望各位专家及读者朋友提出宝贵意见,我们将不胜感激。

编者2019年7月于曲阜师范大学

目录

第1章初识C++1

1.1C++简介1

1.1.1C++发展史1

1.1.2C++应用领域3

1.2C++程序集成开发环境3

1.2.1Code::Blocks简介4

1.2.2Code::Blocks环境设置4

1.3C++程序设计基本过程6

1.4第一个程序8

1.4.1C++程序基本结构8

1.4.2使用名称空间12

小结16

第2章预备知识17

2.1数据类型17

2.1.1整数类型17

2.1.2宽字符类型18

2.1.3布尔类型18

2.1.4类型转换19

2.2变量声明及初始化22

2.2.1auto类型说明22

2.2.2关键字decltype23

2.2.3列表初始化24

2.3数组的替代方案25

2.3.1向量vector25

2.3.2类模板array27

2.4字符串string32

2.4.1定义string字符串32

2.4.2string的常用操作32

2.5指针与引用362.5.1new与delete运算符37

2.5.2引用运算符42

2.6基于范围的for循环45

2.7函数剖析46

2.7.1引用作为函数参数46

2.7.2函数重载51

2.7.3默认参数55

2.7.4内联函数58

小结59

第3章类与对象60

3.1面向对象程序设计60

3.1.1面向对象与面向过程的区别60

3.1.2面向对象的基本概念61

3.2类的定义61

3.2.1成员的访问控制63

3.2.2数据的封装64

3.2.3成员函数的实现64

3.3使用类65

3.3.1创建对象65

3.3.2访问对象的成员68

3.3.3this指针69

3.4构造函数71

3.4.1默认构造函数71

3.4.2自定义无参构造函数71

3.4.3自定义带参数的构造函数73

3.4.4委托构造函数75

3.4.5含有对象成员的构造函数77

3.4.6默认参数的构造函数79

3.5析构函数83

3.6拷贝构造函数85

3.6.1拷贝构造函数的触发时机85

3.6.2深拷贝与浅拷贝89

3.7对象数组94

3.8数据共享96

3.8.1静态数据成员96

3.8.2静态成员函数98

3.9数据保护99

3.9.1常数据成员100

3.9.2静态常数据成员102

3.9.3常成员函数102

3.9.4常对象103

3.10类的友元105

3.10.1友元函数105

3.10.2友元类110

小结111

第4章运算符重载112

4.1运算符重载的概念112

4.1.1运算符重载的基本格式115

4.1.2运算符重载的基本规则115

4.2运算符重载方式116

4.2.1重载为类的成员函数116

4.2.2重载为类的友元函数118

4.2.3重载为成员函数与友元函数的探讨120

4.3常用运算符的重载122

4.3.1输入/输出运算符的重载122

4.3.2赋值运算符的重载125

4.3.3关系运算符的重载128

4.3.4下标运算符的重载129

4.3.5函数调用运算符的重载133

4.4类的转换134

4.4.1类型转换构造函数134

4.4.2类型转换函数136

小结138

第5章类继承139

5.1继承的概念139

5.2继承方式142

5.2.1公有继承142

5.2.2私有继承145

5.2.3保护继承146

5.3改造派生类147

5.3.1派生类构造函数147

5.3.2继承基类构造函数149

5.3.3派生类析构函数151

5.3.4隐藏基类成员153

5.4多重继承156

5.4.1声明多重继承156

5.4.2多重继承中派生类构造函数158

5.4.3多重继承引起的二义性160

5.4.4虚基类163

小结168

第6章多态169

6.1多态的概念169

6.1.1静态多态169

6.1.2动态多态170

6.2指针和引用类型的兼容性170

6.3虚函数172

6.3.1虚成员函数172

6.3.2虚析构函数177

6.4纯虚函数与抽象类180

6.4.1纯虚函数180

6.4.2抽象类181

小结183

第7章模板184

7.1函数模板184

7.1.1函数模板的实例化186

7.1.2函数模板的显式具体化189

7.1.3函数模板的重载192

7.1.4函数版本的选择194

7.1.5函数模板返回值的类型199

7.1.6函数模板小结201

7.1.7可变参数函数模板203

7.2类模板206

7.2.1类模板的声明206

7.2.2类模板的成员函数实现207

7.2.3类模板的实例化208

7.2.4类模板的显式具体化210

7.2.5类模板的模板参数213

7.2.6类模板和友元函数216

7.2.7类模板的继承与派生223

小结224第8章标准模板库225

8.1标准模板库简介225

8.2序列容器225

8.2.1vector226

8.2.2deque231

8.2.3list232

8.3容器适配器241

8.3.1stack241

8.3.2queue242

8.3.3priority_queue244

8.4关联容器245

8.4.1set/multiset246

8.4.2map/multimap250

8.4.3unordered_set/unordered _multiset254

8.4.4unordered_map/unordered _multimap256

8.5迭代器258

8.5.1使用迭代器的原因258

8.5.2迭代器的分类259

8.5.3迭代器函数260

8.6函数对象263

8.6.1预定义函数对象264

8.6.2自定义函数对象266

8.6.3lambda函数270

8.7算法272

8.7.1算法概述272

8.7.2常用算法272

小结277

第9章输入/输出流278

9.1输入/输出流概述278

9.2使用cout输出数据280

9.2.1“<<”运算符280

9.2.2刷新输出流281

9.2.3使用成员函数282

9.2.4控制输出格式283

9.3使用cin输入数据289

9.3.1“>>”运算符289

9.3.2流状态291

9.3.3使用成员函数293

9.4文件操作295

9.4.1文件流296

9.4.2文件读/写299

9.5字符串流309

小结313

第10章异常与断言314

10.1异常处理机制315

10.2异常处理机制的剖析318

10.3异常类322

10.4重抛异常328

10.5exception类331

10.6断言与静态断言334

小结336

参考文献337

作者简介

编辑推荐

本书作为高等院校计算机相关专业大学生面向对象程序设计的入门教程,使学生掌握面向对象程序设计的基本方法、设计思路及编程理念,掌握C++面向对象程序设计的三大核心技术:封装、继承与多态,了解代码重用的主要机制及方法,掌握泛型编程的基本方法。本书注重理论性与实用性相结合,由浅入深,通过简单的示例讲解复杂的语法,引导读者深入理解与体会面向对象程序设计的精髓。本书内容分为十章,包括:初识C++、预备知识、类与对象、运算符重载、类继承、多态、模板、标准模板库、输入输出流、异常与断言。    

作者寄语

黄宝贵,博士研究生,讲师。2001年获得曲阜师范大学计算机科学与技术专业学士学位,2008年获得曲阜师范大学计算机应用技术工学硕士学位,目前攻读曲阜师范大学数学专业博士学位,主要研究方向为多媒体技术、无线网络算法设计与分析。主持山东省高等学校科技计划项目1项,曲阜师范大学科技计划项目1项,参与国家自然科学基金项目2项,获得科研成果奖一项;参编教材3部,获得教学成果奖一项。作为一线教师,连续十年主讲C/C++程序设计语言,有丰富的C++程序设计语言的语法理论。

电子资料

www.luweidong.cn

下一个