找回密码
 立即注册
  • QQ空间
  • 回复
  • 收藏

C++课程的教与学(专业认证版教学大纲)

admin 2021-1-18 08:21 115人围观 C++相关





教学大纲的说明
早些年,C++课程教学分为精品课程和非精品课程,分设两种大纲,以适应不同类学生群。2014年,计算机类专业认证启动,大纲便修改成符合专业认证要求之大纲。所以前后大纲有各种版本。后期采用通识课,所以两个学期的C++课程名称,改为了不同名称,第一学期为《程序设计基础C》,第二学期为《C++程序设计》。实际实施的内容还是C++程序设计I和C++程序设计II。C++精品课程的课程名,也往通识课上靠,只是考试方式专门进行补充说明。《C++程序设计》课程后续还有一个反映其综合运用训练的课程设计环节,最早称为《程序设计大型实验》,也分为精品课程与非精品课程两种,2015年,因计算机类专业认证的需要,这两种课程的教学要求统一,合为单一的课程设计课程来操作,改为《C++程序设计课程设计》。至于课时,过去也好,通识课也好,都是按照64学时/课程,连开两个学期在大一年级实施。然而所有这一切,都是随当时教师、专业、学院的不同而作调整,原精品课程选用的是《C++程序设计(第二版)》(清华大学出版社钱能),相当于将要出版的《C++程序设计教程(第3版)竞技版》。
大纲都是结合自己学校的办学宗旨、具体专业、生源情况而设,大纲在制定过程中,经历不同专业背景的课程责任人,难免东挪西凑,诸多差错,这也是每年都要修订大纲的原因。此处提供的方案,只是一种选项,仅供参考。





专业认证版

《C++程序设计》课程教学大纲

英文课程名称

C++ Programming

课程编码

226198

总学时/学分

64学时4学分

理论教学学时

48学时

实践教学学时

实验学时16 / 上机学时16

适用专业

计算机大类

课程类别

通识课程、必修大类基础课程

先修课程

先修《程序设计基础C》、并修《离散数学2》

开课学院

计算机学院


01.

课程性质与教学目标

【课程性质】

C++含得到广泛应用的面向对象编程方法之语言,现代面向对象程序设计思想在其中得到了充分的体现。本课程在学习C++面向对象语言的基本成分,如类和对象、友元、模版等,重点介绍面向对象的封装、继承、多态的基本思想和实现机制。让学生充分理解和学习面向对象程序设计语言的使用,能运用面向对象程序设计的思想和方法进行问题求解。因此,C++是计算机专业的重要必修基础课程。

【教学目标】

1. 理解并掌握包括类定义、类封装、类继承以及类系多态等面向对象的基本概念以及相关的编程方法。能够运用这些语法规则设计应用需要的类以及将类运用到具体应用中。掌握编制基于类的具有一定复杂性的程序,并具备使用这些知识求解一定程度的复杂应用问题。

2. 理解并掌握C++语言的面向对象编程思想,理解并掌握面向对象的程序设计语法规则和编程方法,了解与面向过程的程序设计方法之间的差异。掌握C++程序设计语言。

3. 深入实践,掌握C++软件开发环境(如 visual C++)的console工程应用,掌握面向对象程序开发的编程技术、编译调试方法。在C++语言基础下进一步提高实践操作能力,以便利用开发工具解决/调试工程实际问题。

02.

课程支撑的毕业要求及其指标点

该课程支撑以下毕业要求和具体细分指标点:
【毕业要求3】能够设计针对复杂工程问题的解决方案,设计满足特定需求的系统、单元(部件)或工艺流程,并能够在设计环节中体现创新意识,考虑社会、健康、安全、法律、文化以及环境等因素。支撑指标点3.1:掌握解决复杂工程问题的程序设计语言基础。支撑指标点3.3:能够根据特定需求对复杂计算机系统的子模块或子单元进行软硬件设计和实现。【毕业要求5】使用现代工具:能够针对复杂工程问题,开发、选择与使用恰当的技术、资源、现代工程工具和信息技术工具,包括对复杂工程问题的预测与模拟,并能够理解其局限性。支撑指标点5.2:能够开发、选择、使用恰当的现代工具、技术、资源,解决实际计算机工程问题。

03.

课程目标与毕业要求指标点的对应关系



04.

课程教学内容、学时分配及对毕业要求的支撑

1.理论教学安排







注:其中黑斜体部分内容为选学内容,授课教师可根据具体教学安排酌情讲解或组织学生自学。

2.实践教学安排



注:教师可按实际情况调整实践教学内容的顺序、强度和数量,学时应该不少于16学时。

05.

考核方式及成绩评定


本课程的考核强调课堂教学成果与学生上机实践的综合考核。学生成绩由考试成绩(50%)和过程化考核成绩(50%)构成;其中过程化考核成绩内容要求实验和作业不低于40%,其中实验不低于20%,允许有其他形式参与过程化考核,如课堂提问、小组讨论等,该项比例不高于10%。

作业方面要重点考核学生掌握课堂学习的基础知识以及知识点运用的程度,课内上机实验考察学生掌握运用所学知识点进行编程实践的能力。课堂表现主要从学生上课是否专心听讲、回答教师提问是否正确,以及分组讨论是否积极、正确、有独特见解等,以提高课堂教学效果和运用工程基础知识和本专业基本理论解决实际工程问题的能力。

期末考试将按照本课程的教学目标全面考核学生的课程学习效果,分析课程对毕业要求的达成度。

《C++程序设计课程设计》

课程教学大纲

英文课程名称

Course  Design of C++ programming

课程编码

526126

总学时/学分

32学时1学分

理论教学学时

0学时

实践教学学时

实验学时0 / 上机学时32

适用专业

计算机科学与技术学院的所有开设专业

课程类别

必修大类基础课程

先修课程

离散数学、程序设计基础C、C++程序设计I


开课学院

计算机科学与技术学院、软件学院


01.

课程的性质和教学目标
l 课程性质《C++程序设计课程设计》课程是一门针对计算机科学与技术学院所有专业开设的本科生的大类基础必修课。该课程在学生先修离散数学、程序设计C以及C++程序设计I的基础上进行,需要学生有一定的C/C++程序设计基础。该课程主要培养学生综合运用C/C++程序设计知识的能力,能独立进行程序编写、完成一定难度的课程设计的实践能力。l 教学目标课程旨在达成以下教学目标:目标1:巩固学生在程序设计课程所学知识点,使其能掌握问题分析、设计和程序实现的方法,扎实掌握C/C++程序设计语言的语法,包括基本数据类型、复合数据类型、控制结构、函数、类及文件读写等;目标2:要求学生掌握基本的上机技能,包括常用的C/C++开发环境、源程序的录入、编译及执行方法,常用的程序调试技能(语法纠错、逻辑纠错、开发环境的调试工具:断点设置,单步跟踪,变量值查看等);进一步学习掌握C/C++开发环境的使用技能,调试程序的技能等;目标3:训练学生掌握如何从具体问题出发独立查阅各种途径的资料来分析解决问题的能力,分析和建立计算机领域的问题模型的能力。体验软件开发的过程。能够综合运用面向过程和面向对象的程序设计方法编写程序,具备良好的程序设计习惯,并系统规范的书写实验文档总结软件开发的过程,描述在问题求解中建立的问题模型,讨论后续可改进的方法。
目标4:提高和加强学生计算机应用和软件开发的能力,使其能从初学者向专业的开发人员过渡;并能在工程实践开发中体会个人与团队的合作关系,能明确自己的职责,主动承担工作任务,与他人进行较好的互动和配合。

02.

课程支撑的毕业要求及其指标点

该课程支撑以下毕业要求和具体细分指标点:
【毕业要求5】能够针对复杂工程问题,开发、选择与使用恰当的技术、资源、现代工程工具和信息技术工具,包括对复杂工程问题的预测与模拟,并能够理解其局限性支撑指标点5.1:了解现代工程工具和信息技术工具的使用方法,以及实际软件工程实践中现代工具的使用现状。
支撑指标点5.2:能够开发、选择和使用恰当的现代工具、技术和资源用于解决实际计算机复杂工程问题。
03.

课程目标与毕业要求指标点的对应关系


课程目标

毕业要求指标点

目标1:巩固学生在程序设计课程所学知识点,使其能掌握问题分析、设计和程序实现的方法,扎实掌握C/C++程序设计语言的语法,包括基本数据类型、复合数据类型、控制结构、函数、类及文件读写等;

指标点5-1

目标2:要求学生掌握基本的上机技能,包括常用的C/C++开发环境、源程序的录入、编译及执行方法,常用的程序调试技能(语法纠错、逻辑纠错、开发环境的调试工具:断点设置,单步跟踪,变量值查看等);进一步学习掌握C/C++开发环境的使用技能,调试程序的技能等;

指标点5-1

指标点5-2

目标3:训练学生掌握如何从具体问题出发独立查阅各种途径的资料来分析解决问题的能力,分析和建立计算机领域的问题模型的能力。体验软件开发的过程。能够综合运用面向过程和面向对象的程序设计方法编写程序,具备良好的程序设计习惯,并系统规范的书写实验文档总结软件开发的过程,描述在问题求解中建立的问题模型,讨论后续可改进的方法。

指标点5-1

指标点5-2

目标4:提高和加强学生计算机应用和软件开发的能力,使其能从初学者向专业的开发人员过渡;并能在工程实践开发中体会个人与团队的合作关系,能明确自己的职责,主动承担工作任务,与他人进行较好的互动和配合。

指标点5-2


04.

课程的基本内容及学时分配

l  通关考试:2学时/次。在考核平台上独立完成3题程序编写任务。题目按难度按知识点抽取组合,可以分批次进行。每个学生在该学期内最多可以进行2次考试。
l  课程设计:30学时。由教师根据大型实验任务书(附录)布置任务,要求学生最后上交实验报告及源代码。学生可以分组或者独立完成一个设计任务。




05.

考核方式及成绩评定

l  考核方式
该课程以上机实践为主要教学形式,分为两个部分:1)通关考试;2)课程设计。1)通关考试为每个学生独立上机,并能在规定的时间完成考核平台上的要求算通过。过3题得35分;4题得45分,5题得50分。3题以下0分。2)课程设计为每个学生独立完成课程设计任务书的要求,最后以教师验收通过为准,要求学生上交源代码及实验报告。成绩评定以实验报告和现场系统演示情况两部分的评分为依据,其中实验报告占30%,系统演示20%,教师根据实际情况给出0-50的课程设计部分成绩。l  成绩评定《C++程序设计课程设计》成绩 =通关考试成绩(50%)+课程设计成绩(50%)备注:上机考核不通过则《C++程序设计课程设计》成绩判定不合格该课程的总成绩为5分制,对应优秀(100-90)、良好(89-80)、中等(79-70)、及格(69-60)和不及格(59-0)。
06.

课程评价与改进

课程考核结束后,任课教师遵循学院的教学委员会通过的课程达成度评价机制和评价方法,对本课程的达成度进行自我评价。此外,学院的教学委员会将指派专门的教师,依据学生的通关考试成绩和课程设计成绩等资料,对本课程的达成度进行评价,并出具达成度评价报告。教师根据评价结果,改进教学方法和教学内容,以便更好支撑地学生毕业要求的达成。

注:精品课程和非精品课程的教学大纲,见本书课件压缩包。

07.

授课示范

mpvideo

video: https://mp.weixin.qq.com/mp/readtemplate?t=pages/video_player_tmpl&action=mpvideo&auto=0&vid=wxv_887665606873481216

08.

配套教材





提供PPT课件,教学大纲,源码,MOOC视频,习题解答及实验指导书

第3版的通用版:侧重C++基础,主要从概念着手,介绍C++编写程序的技法,强调编写正确的程序。学习之后,应当能了解C++是怎么回事,能解决什么问题,能看懂C++程序,了解C++的诸多技术特征,能编制一些简单的C++程序,能发现一些常规的C++错误,了解不同的程序设计方法,对面向对象程序设计方法及其特征有一个基本的了解,具备进一步学习后续课程(如数据结构、算法分析与设计)的基础。适合各个专业的学生。

目录

上下滚动查看 ↓

第一部分C++过程化语言基础

第1章C++入门

1.1从C到C++

1.2程序与语言

1.3结构化程序设计

1.4面向对象程序设计

1.5程序开发过程

1.6最简单的程序

1.7函数

小结

第2章基本数据类型与输入/输出

2.1字符集与保留字

2.2基本数据类型

2.3变量定义

2.4字面量

2.5常量

2.6I/O流控制

2.7printf与scanf

小结

练习

第3章表达式和语句

3.1表达式

3.2算术运算和赋值

3.3算术类型转换

3.4增量和减量

3.5关系与逻辑运算

3.6if语句

3.7条件运算符

3.8逗号表达式

3.9求值次序与副作用

小结

练习

第4章过程化语句

4.1while语句

4.2do…while语句

4.3for语句

4.4switch语句

4.5转向语句

4.6过程应用: 求π

4.7过程应用:  判明素数

4.8过程应用:  求积分

小结

练习

第5章函数

5.1函数概述

5.2函数原型

5.3全局变量与局部变量

5.4函数调用机制

5.5静态局部变量

5.6递归函数

5.7内联函数

5.8重载函数

5.9默认参数的函数

小结

练习

第6章程序结构

6.1外部存储类型

6.2静态存储类型

6.3作用域

6.4可见性

6.5生命期

6.6头文件

6.7多文件结构

6.8编译预处理

小结

练习

第7章数组

7.1数组的概念

7.2访问数组元素

7.3初始化数组

7.4向函数传递数组

7.5二维数组

7.6数组应用:  排序

7.7数组应用: Josephus问题

7.8数组应用:  矩阵乘法

小结

练习

第8章指针

8.1指针的概念

8.2指针运算

8.3指针与数组

8.4堆内存分配

8.5const指针

8.6指针与函数

8.7字符指针

8.8指针数组

8.9命令行参数

8.10函数指针

小结

练习

第9章引用

9.1引用的概念

9.2引用的操作

9.3什么能被引用

9.4用引用传递函数参数

9.5返回多个值

9.6用引用返回值

9.7函数调用作为左值

9.8用const限定引用

9.9返回堆中变量的引用

小结

练习

第10章结构

10.1结构概述

10.2结构与指针

10.3结构与数组

10.4传递结构参数

10.5返回结构

10.6链表结构

10.7创建与遍历链表

10.8删除链表结点

10.9插入链表结点

10.10结构应用:  Josephus问题

小结

练习

第二部分面向对象程序设计

第11章类

11.1从结构到类

11.2软件方法的发展

11.3定义成员函数

11.4调用成员函数

11.5保护成员

11.6屏蔽类的内部实现

11.7名字识别

11.8再论程序结构

小结

练习

第12章构造函数

12.1类与对象

12.2构造函数的必要性

12.3构造函数的使用

12.4析构函数

12.5带参数的构造函数

12.6重载构造函数

12.7默认构造函数

12.8类成员初始化的困惑

12.9构造类成员

12.10构造对象的顺序

小结

练习

第13章面向对象程序设计

13.1抽象

13.2分类

13.3设计和效率

13.4讨论Josephus问题

13.5结构化方法

13.6结构化方法的实现

13.7面向对象方法

13.8面向对象方法的实现

13.9程序维护

小结

练习

第14章堆与拷贝构造函数

14.1关于堆

14.2需要new和delete的原因

14.3分配堆对象

14.4拷贝构造函数

14.5默认拷贝构造函数

14.6浅拷贝与深拷贝

14.7临时对象

14.8无名对象

14.9构造函数用于类型转换

小结

练习

第15章静态成员与友元

15.1静态成员的必要性

15.2静态成员的使用

15.3静态数据成员

15.4静态成员函数

15.5需要友元的原因

15.6友元的使用

小结

练习

第16章继承

16.1继承的概念

16.2继承的工作方式

16.3派生类的构造

16.4继承方式

16.5继承与组合

16.6多继承如何工作

16.7多继承的模糊性

16.8虚拟继承

16.9多继承的构造顺序

小结

练习

第17章多态

17.1多态性

17.2多态的思考方式

17.3多态性如何工作

17.4不恰当的虚函数

17.5虚函数的限制

17.6继承设计问题

17.7抽象类与纯虚函数

17.8抽象类派生具体类

17.9多态的目的

小结

练习

第18章运算符重载

18.1运算符重载的需要性

18.2如何重载运算符

18.3值返回与引用返回

18.4运算符作成员函数

18.5重载增量运算符

18.6转换运算符

18.7赋值运算符

小结

练习

第19章I/O流

19.1printf和scanf的缺陷

19.2I/O标准流类

19.3文件流类

19.4C字串流类

19.5控制符

19.6使用I/O成员函数

19.7重载插入运算符

19.8插入运算符与虚函数

19.9文件操作

小结

练习

第20章模板

20.1模板的概念

20.2为什么要用模板

20.3函数模板

20.4重载模板函数

20.5类模板的定义

20.6使用类模板

20.7使用标准模板类库: Josephus问题

小结

练习

第21章异常处理

21.1异常的概念

21.2异常的基本思想

21.3异常的实现

21.4异常的规则

21.5多路捕获

21.6异常处理机制

21.7使用异常的方法

小结

练习





提供PPT课件,教学大纲,源码,MOOC视频,习题解答及实验指导书

第3版的竞技版:侧重C++分析设计技术,从实战训练着手,介绍C++的各种编程策略与技术,引导对数学及算法学习的重视,强调编写高效的程序。学习之后,应当能掌握基本的问题分析方法,掌握解决问题的设计技术;了解编程过程中的许多难点,深切体会细节决定成败;能够学习且具备参加各个层次程序设计竞赛的能力;对C++能解决什么问题的能力有全新的看法,进一步了解面向对象程序设计的方法;学会层次分析和功能拆解,具备独立设计一个规模较大的程序的能力;具备语言学习的独立能力。适合计算机类专业的学生。

目录

上下滚动查看 ↓

第一部分  基 础 编 程

Part Ⅰ  The Basic Programming

第1章  概述(Introduction)     2

1.1  程序设计语言(Programming Language)          2

1.2  C++前史(The Prehistory of C++)       4

1.3  C++ 6

1.3.1  褒贬C(Pass Judgement on C)       6

1.3.2  C继承者(Inheritor of C)        7

1.3.3  标准C++(Standard C++)        7

1.4  C++编程流程(C++ Programming Flow)    8

1.4.1  编程过程(Programming Procedure)     8

1.4.2  最小样板程序(Minimum Sample Program) 9

1.4.3  编程风格(Programming Style)      10

1.5  程序与算法(Programs & Algorithms)      11

1.5.1  程序(Programs)     11

1.5.2  算法(Algorithms)  12

1.5.3  编程与结构(Programming & Structures)     13

1.6  过程化程序设计(Procedural Programming)   13

1.6.1  基于过程的程序设计(Procedure-Based Programming)      13

1.6.2  结构化程序设计(Structured Programming)         16

1.7  对象化程序设计(Objectified Programming)   18

1.7.1  基于对象的程序设计(Object-Based Programming)    18

1.7.2  面向对象的程序设计(Object-Oriented Programming)        20

1.8  目的归纳(Conclusion)      22

练习1(Exercises 1)    23

第2章  基本编程语句(Basic Programming Statements)      24

2.1  说明语句(Declarative Statements) 24

2.1.1  变量定义(Variable Definition)       25

2.1.2  函数声明和定义(Function Declaration & Definition)  26

2.1.3  初始化与赋值(Initializing & Assignment)    27

2.2  条件语句(Conditional Statements) 27

2.2.1  if语句(if Statement)      27

2.2.2  条件表达式(Conditional Expressions)  30

2.2.3  switch语句(switch Statement)    31

2.2.4  if或switch语句(if or switch Statement)      34

2.3  循环语句(Loop Statements)    35

2.3.1  for循环结构(for Loop Structure) 35

2.3.2  for循环(for Loop) 36

2.3.3  while循环(while Loop) 38

2.3.4  do-while循环(do-while Loop)        39

2.4  循环设计(Cycle Designs) 40

2.4.1  字符图形(Character Graphics)     40

2.4.2  素数判定(Prime Decision)    44

2.5  输入输出语句(I/O Statements)       46

2.5.1  标准I/O流(Standard I/O Streams)       46

2.5.2  流状态(Stream States) 46

2.5.3  文件流(File Streams)     49

2.6  转移语句(Move Statements)  51

2.6.1  break语句(break Statement)        51

2.6.2  continue语句(continue Statement)      52

2.6.3  goto语句(goto Statement)  53

2.7  再做循环设计(More Cycle Designs)        55

2.7.1  逻辑判断(Logic Decision)      55

2.7.2  级数逼近(Progression Approximation)         58

2.8  目的归纳(Conclusion)      61

练习2(Exercises 2)    62

第3章  数据类型(Data Types)       65

3.1  整型(int Types) 66

3.1.1  二进制补码(Binary Complement)         66

3.1.2  整型数表示范围(int Range)          68

3.1.3  编译器与整型长度(Compiler & int Length)          69

3.1.4  整数字面值(Integer Literals)        70

3.1.5  整数算术运算(Integer Arithmetic Operations)   70

3.2  整数子类(int Subtypes)    71

3.2.1  字符型(char Type)          71

3.2.2  枚举型(enum Type)       72

3.2.3  布尔型(bool Type) 73

3.3  浮点型(float Type)    73

3.3.1  浮点数表示(Floating-Point Number Representation)  74

3.3.2  浮点型表示范围 (Floating-PointType Ranges )         77

3.4  C-串与string(C-strings & string)     78

3.4.1  C-串(C-strings)       78

3.4.2  字符指针与字符数组(char Pointers & char Arrays)    79

3.4.3  string   82

3.4.4  string与C-串的输入输出(string & C-string I/O)          84

3.4.5  string流(string Streams)       85

3.5  数组(Arrays)     86

3.5.1  元素个数(Number of Elements)   86

3.5.2  初始化(Initialization)    87

3.5.3  默认值(Default Values)          89

3.5.4  二维数组(2-D Arrays)   90

3.6  向量(Vectors)   90

3.6.1  基本操作(Basic Operations)          90

3.6.2  添加元素(Adding Elements) 92

3.6.3  二维向量(2-D Vectors) 93

3.7  指针与引用(Pointers & References)        94

3.7.1  指针(Pointers)       95

3.7.2  指针的类型(Pointer Types)  96

3.7.3  指针运算(Pointer Operations)      98

3.7.4  指针限定(Pointer Restrictions)    99

3.7.5  引用(References)  101

3.8  目的归纳(Conclusion)      102

练习3(Exercises 3)    103

第4章  计算表达(Computation Expressing) 105

4.1  名词解释与操作符(Name Explanation & Operators)     105

4.1.1  名词解释(Some Name Explanations)   105

4.1.2  操作符汇总(Operators Summary)        107

4.1.3  操作符的说明(Operator Explanations)         108

4.2  算术运算问题(Arithmetic Problems)       109

4.2.1  周而复始的整数(int: Move in Cycles)  109

4.2.2  算法局限性(Algorithm Limitation)        110

4.2.3  中间结果溢出(Intermediate Result Overflow)    111

4.2.4  浮点数的比较(Floating-Point Number Comparison)    112

4.3  相容类型的转换(Cast Compatible Types)       113

4.3.1  隐式转换(Implicit Cast)         113

4.3.2  精度丢失(Lost Precision)      114

4.3.3  显式转换(Explicit Cast)         115

4.4  关系与逻辑操作(Relations & Logic Operations)     117

4.4.1  条件表达(Condition Expressing)  118

4.4.2  基本逻辑与短路求值(Basic Logic & Short-Circuit Evaluation)    120

4.4.3  逻辑推演(Logic Inference & Deduction)       121

4.5  位操作(Bit Operations)    122

4.5.1  位操作种类(The Kinds of Bit Operations)     122

4.5.2  位操作实例(Bit Operation Example)    123

4.6  增量操作(Increment Operations)    125

4.6.1  增量操作符(Increment Operators)      125

4.6.2  操作符识别(Operator Recognition)      126

4.6.3  指针的增量操作(Pointer Increment Operation) 127

4.7  表达式的副作用(Expression’s Side Effects)          128

4.7.1  操作数求值顺序(Operands Evaluating Order)     128

4.7.2  编译器相关(Complier Correlated)        129

4.7.3  交换律失效(Commutation Law Invalidation)       130

4.7.4  括号失效(Bracket Invalidation)    130

4.7.5  消除副作用(Avoiding Side Effects)        131

4.8  目的归纳(Conclusion)      131

练习4(Exercises 4)    132

第二部分  过程化编程

Part Ⅱ The Procedural Programming

第5章  函数机制(Function Mechanism)        136

5.1  函数性质(Function Character)         137

5.1.1  函数的形态(The Function Forms)          137

5.1.2  函数黑盒(Function Blackbox)        138

5.1.3  传值参数(Value-Passed Parameters)   140

5.2  指针参数(Pointer Parameters)        141

5.2.1  指针和引用参数(Pointer & Reference Parameters)   141

5.2.2  函数的副作用(Function’s Side Effect)        145

5.3  栈机制(The Stack Mechanism)         147

5.3.1  运行时内存布局(Runtime Memory Layout)         147

5.3.2  栈区(The Stack Area)    148

5.3.3  局部数据的不确定性(Uncertainty of Local Data)        151

5.3.4  指针作祟(The Menacing Pointers)        151

5.4  函数指针(Function Pointers)   153

5.4.1  指向函数的指针(Function Pointers)    153

5.4.2  函数指针参数(Function Pointer Parameters)      155

5.4.3  函数指针数组(Function Pointer Arrays)       156

5.4.4  简略函数指针表示(The Outline of Function Pointers)          158

5.4.5  函数指针的意义(The Sense of Function Pointers)        158

5.5  main函数参数(The main’s Arguments)        159

5.5.1  命令行重定向(Redirecting Command Line)          159

5.5.2  使用main参数(Using Main Arguments)      161

5.6  递归函数(Recursive Functions)        164

5.6.1  递归本质(Essence of Recursions)         164

5.6.2  递归条件(Condition of Recursions)       165

5.6.3  消去递归(Removing Recursions) 166

5.6.4  递归评说(Comment on Recursions)     167

5.7  函数重载(Function Overloading)      167

5.7.1  重载概念(Concept of Function Overload)     167

5.7.2  重载函数匹配(Overloaded Function Call Matches)     170

5.7.3  重载技术(Function Overload Technology)    171

5.7.4  默认参数(Default Parameters)    171

5.7.5  默认参数规则(Default Parameter Rules)    172

5.7.6  无名参数(Nameless Parameters)         173

5.7.7  重载或参数默认(Overload or Parameter Default)       173

5.8  目的归纳(Conclusion)      175

练习5(Exercises 5)    176

第6章  性能(Performance)    179

6.1  内联函数(Inline Functions)       180

6.1.1  概念(Concept)       180

6.1.2  规则(Rules)   182

6.1.3  性能测试(Performance Testing)   183

6.2  数据结构(Data Structures)      184

6.2.1  STL中的容器(Containers in STL)  184

6.2.2  安排车厢顺序(Arrange the Order of Coach)        185

6.2.3  栈法(Stack Method)      186

6.2.4  向量法(Vector Method)         187

6.3  算法(Algorithms)      188

6.3.1  算法与性能(Algorithms & Performance)     188

6.3.2  Fibonacci数列算法分析(Fib’s Algorithms Analyses)         189

6.3.3  选择算法(Selecting Algorithms)   191

6.3.4  超越数值范围的策略(Strategy that Exceeding Number Range)         193

6.4  数值计算(Numerical Computation)          194

6.4.1  求解积分问题(Solve the Integral Problems)         194

6.4.2  矩形法(Rectangle Method)  194

6.4.3  辛普生法(Simpson Method) 196

6.4.4  调用库函数(Calling for the Library Function)        198

6.5  标准C++算法(Standard C++ Algorithms)         199

6.5.1  集合元素访问(Element Access of Set)          199

6.5.2  判断字串相等1(Determining the String is Equal 1)     199

6.5.3  判断字串相等2(Determining the String is Equal 2)     200

6.5.4  判断字串相等3(Determining the String is Equal 3)     201

6.5.5  剩余串排列1(Arranging Remaining String 1)       202

6.5.6  剩余串排列2(Arranging Remaining String 2)       203

6.6  动态内存(Dynamic Memory)   204

6.6.1  预留向量空间(Reserving Vector Space)       204

6.6.2  蛮做素数判断(Judging Prime Numbers Rudely)  205

6.6.3  空间换时间(Space for Time)         206

6.7  低级编程(Low-Level Programming)         208

6.7.1  C编程(C Programming)         208

6.7.2  低级筛法(Low-Grade Sieve) 209

6.7.3  筛法性能的比较(Comparison of Sieve Performance)  211

6.8  目的归纳(Conclusion)      213

练习6(Exercises 6)    214

第7章  程序结构(Program Structure)   219

7.1  函数组织(Function Organization)    220

7.1.1  程序构成(Program Composition) 220

7.1.2  程序文件拆分(Program File Split)         221

7.2  头文件(Header File) 222

7.2.1  原始头文件(Original Header File)         222

7.2.2  界面头文件(Interface Header File)       224

7.2.3  头文件的内容(Content of Header File)         225

7.3  全局数据(Global Data)    226

7.3.1  全局数据访问(Global Data Access)     226

7.3.2  消除全局数据(Eliminate Global Data) 228

7.3.3  一次定义原则(One-Definition Principle)       229

7.3.4  全局常量(Global Constant)  232

7.4  静态数据(Static Data)      234

7.4.1  静态全局数据(Static Global Data)        234

7.4.2  静态局部数据(Static Local Data) 236

7.5  作用域与生命期(Scopes & Lifetime)       237

7.5.1  作用域(Scopes)     237

7.5.2  生命期(Lifetime)   239

7.6  名空间(Namespace)         241

7.6.1  名空间的概念(the Concept of Namespace)         241

7.6.2  名空间的组织(Namespace Organization)   242

7.6.3  组织模块(Module Organization)  244

7.6.4  数据名冲突(Data Name Conflict)         247

7.6.5  名空间的用法(Namespace Usage)      248

7.7  预编译(Pre-Compilation) 249

7.7.1  #include指令(#include Directive) 250

7.7.2  条件编译指令(Conditional Compiling Directive) 250

7.7.3  头文件卫士(Header Guard) 251

7.7.4  #define指令(#define Directive)    252

7.8  目的归纳(Conclusion)      253

练习7(Exercises 7)    253

第三部分  面向对象编程技术

Part Ⅲ  The Object-Oriented Programming

第8章  类(Classes)         258

8.1  从结构到类(From Structure to Class)      259

8.1.1  定义结构(Defining Structure)       259

8.1.2  定义类(Defining Class) 261

8.2  成员函数(Member Functions) 263

8.2.1  成员函数定义(Member Function Definition)        263

8.2.2  使用对象指针(Using Object Pointer)   265

8.2.3  常成员函数(Constant Member Functions)  266

8.2.4  重载成员函数(Overloading Member Functions) 267

8.3  操作符(Operators)   268

8.3.1  函数重载特征(Function Overloading Charcteristics)   268

8.3.2  性质(Characters)  270

8.3.3  值返回与引用返回(Returning Value or Reference)     271

8.3.4  增量操作符(Increment Operators)      272

8.3.5  成员操作符(Member Operators)          273

8.4  再论程序结构(Revisiting Program Structure)          275

8.4.1  访问控制(Access Controls)  275

8.4.2  类的程序结构(Class Program Structure)     277

8.4.3  类作用域(Class Scope) 278

8.5  屏蔽类的实现(Shielding Implementation of Class)          280

8.5.1  意义(Significance) 280

8.5.2  影响编程方法(Influence Programming Method)          283

8.5.3  影响语言设计(Affecting Language Designing)    283

8.6  静态成员(Static Members)      284

8.6.1  静态数据成员(Static Data Members) 284

8.6.2  静态成员函数(Static Member Functions)    286

8.7  友元(Friends)    287

8.7.1  频繁调用问题(Frequent Call Problems)       287

8.7.2  提高访问性能(Improving Access Performance)  290

8.7.3  其他特征(Other Features)    293

8.8  目的归纳(Conclusion)      294

练习8(Exercises 8)    295

第9章  对象生灭(Object Birth & Death)       299

9.1  构造函数设计(Constructor Design)         300

9.1.1  初始化要求(Initialization Requirement)       300

9.1.2  封装性要求(Encapsulation Requirement)    301

9.1.3  函数形式(Function Form)      301

9.1.4  无返回值(Non Return-Type) 302

9.1.5  set的缺憾(Shortcomings of set)  304

9.1.6  一次性对象(Only-One-Time Object)     306

9.2  构造函数的重载(Overloading of the Constructor) 306

9.2.1  重载构造函数(Overloaded Constructor)      306

9.2.2  无参构造函数(Non-Parameter Constructor)       309

9.3  类成员初始化(Class Member Initialization)   310

9.3.1  默认调用的无参构造函数(No-Argument Constructor Called

   by Default)         310

9.3.2  初始化的困惑(Initialization Confusion)        311

9.3.3  成员的初始化(Initializing Members)   313

9.4  构造顺序(Constructing Sequence)  314

9.4.1  局部对象(Local Objects)       314

9.4.2  全局对象(Global Objects)     315

9.4.3  成员对象(Member Objects) 317

9.4.4  构造位置(Constructing Location)          318

9.5  拷贝构造函数(Copy Constructor)   319

9.5.1  对象本体与实体(Object Realty & Entity)     319

9.5.2  默认拷贝构造函数(Default Copy Constructor)   321

9.5.3  自定义拷贝构造函数(Custom Copy Constructor)       322

9.6  析构函数(Destructors)    324

9.7  对象转型与赋值(Object Transformation & Assignment)        326

9.7.1  用于转型的构造函数(Constructor for Transformation)      326

9.7.2  对象赋值(Object Assignment)      327

9.8  目的归纳(Conclusion)      330

练习9(Exercises 9)    331

第10章  继承(Inheritance)    334

10.1  继承结构(Inheritance Structure)   335

10.1.1  类层次结构(Class Hierarchy)     335

10.1.2  派生类对象结构(Derived Object Structure)       336

10.2  访问父类成员(Access Parent Member)        337

10.2.1  继承父类成员(Inherit the Members of the Parent Class) 337

10.2.2  类内访问控制(In-Class Access Control)     339

10.3  派生类的构造(Constructing Derived Classes)      341

10.3.1  默认构造(Default Construction)         341

10.3.2  自定义构造(Custom Construction)    341

10.3.3  拷贝构造与赋值(Copy Construction & Assignment)          343

10.3.4  对象构造顺序(Object Construction Order)        344

10.4  继承方式(Inheritance Mode)         344

10.4.1  继承访问控制(Inherited Access Control)  344

10.4.2  调整访问控制(Adjusting Access Control)  347

10.5  继承与组合(Inheritance & Composition)      348

10.5.1  对象结构(Object Structure)        348

10.5.2  性质差异(Difference in Nature) 349

10.5.3  对象分析(Object Analysis) 349

10.5.4  继承设计(Inheritance Design)    351

10.5.5  组合设计(Composition Design)  352

10.6  多继承概念(Multi-Inheritance Concept)       354

10.6.1  多继承结构(Multi-Inheritance Structure)  354

10.6.2  基类成员名冲突(Base-Class Member Name Collision)     356

10.6.3  基类分解(Base-Class Decomposition)        356

10.7  多继承技术(Multi-Inheritance Technology)  358

10.7.1  虚拟继承(Virtual Inheritance)    358

10.7.2  多继承对象构造顺序(Multi-Inheritance Object

    Construction Order)      360

10.7.3  多继承评价(Multi-Inheritance Evaluation)         360

10.8  目的归纳(Conclusion)    360

练习10(Exercises 10)        361

第11章  基于对象编程(Object-Based Programming)  363

11.1  抽象编程(Abstract Programming)         364

11.1.1  行为抽象(Action Abstract) 364

11.1.2  数据抽象(Data Abstract)   365

11.1.3  数据结构(Data Structure)  366

11.2  编程质量(Programming Quality)   367

11.2.1  可读性(Readability)    367

11.2.2  易编程性(Programmability)        368

11.2.3  安全性(Security) 369

11.2.4  可维护性(Maintainability)  370

11.2.5  可扩充性(Extensibility)       370

11.2.6  效率(Efficiency)   370

11.3  分析Josephus问题(Analyze the Josephus Problem)    372

11.3.1  问题描述(Problem Description) 372

11.3.2  过程化分析(Process Analysis)    373

11.3.3  基于对象的分析(Object-Based Analysis)  374

11.4  基于过程的解决方案(Process-Based Solutions)  375

11.4.1  算法(The Algorithm)   375

11.4.2  算法解释(Algorithm Explanation)       376

11.4.3  算法实现(Algorithm Implementation)        377

11.5  基于对象的解决方案(Object-Based Solutions)    379

11.5.1  算法(The Algorithm)   379

11.5.2  算法解释(Algorithm Explanation)       381

11.5.3  算法实现(Algorithm Implementation)        382

11.5.4  程序解释(Program Explanation)         385

11.6  程序维护(Program Maintenance) 386

11.7  程序扩展(Program Extension)       388

11.8  目的归纳(Conclusion)    391

练习11(Exercises 11)        392

第四部分  高级编程

Part Ⅳ  Advanced Programming

第12章  多态(Polymorphism)         396

12.1  继承召唤多态(Inheritance Call Polymorphism)    397

12.1.1  祖孙互易的说明(Explanation of Mutual Change Between

       Up & Down)    397

12.1.2  覆盖父类操作(Overlapping Superclass Operation)    398

12.1.3  同化效应(Assimilation Effect)    399

12.1.4  渴望多态(Desire Polymorphism)         400

12.2  抽象编程的困惑(The Confusion of Abstract Programming)          401

12.2.1  类型域方案(Type Domain Scheme)    401

12.2.2  破坏抽象编程(Destroy Abstract Programming)        403

12.2.3  渴望内在的多态(Yearning for Inner Polymorphism) 404

12.3  虚函数(Virtual Function)         404

12.3.1  多态条件(Polymorphism Condition)   404

12.3.2  虚函数机理(Virtual Function Mechanism) 406

12.3.3  面向对象的真意(Object-Oriented True Meaning)     406

12.3.4  虚函数的传播(Propagation Virtual Functions)  407

12.4  避免虚函数误用(Avoiding Misuse of Virtual Functions)        408

12.4.1  搞清重载与覆盖(Understanding Overload & Overlap)      408

12.4.2  虚函数按覆盖实现(Virtual Function Realized as Overlap)         409

12.4.3  基类指针访问子类成员(Accessing SubClass’s Member

    Using BaseClass Pointer)         411

12.4.4  返回类型的例外(Exception of Return Type)       412

12.4.5  若干限制(Some Restrictions)     413

12.5  精简共性的类(Streamline Common Classes)        414

12.5.1  孤立的类(Isolated Classes)     

鲜花

握手

雷人

路过

鸡蛋

yafeilinux和他的朋友们微信公众号二维码

微信公众号

专注于Qt嵌入式Linux开发等。扫一扫立即关注。

Qt开源社区官方QQ群二维码

QQ交流群

欢迎加入QQ群大家庭,一起讨论学习!

我有话说......