资源描述
C+C+语言程序设计语言程序设计教学法讲座教学法讲座清华大学 郑莉C+C+语言程序设计语言程序设计 教学法讲座(教学法讲座(1 1):课程概述):课程概述清华大学 郑莉目录目录课程理念课程理念教材简介教材简介教学建议教学建议配套资源配套资源课程网址课程网址3课程理念课程理念C+作为第一门程序设计课程作为第一门程序设计课程C+语言支持面向对象的观念,更接近于人语言支持面向对象的观念,更接近于人类的思维方式,因而也就更容易为初学者所类的思维方式,因而也就更容易为初学者所接受。接受。在教学中抓住主线、突出重点、强调思想方在教学中抓住主线、突出重点、强调思想方法、注重实践环节,便可以克服语法复杂的法、注重实践环节,便可以克服语法复杂的难点。难点。从从6年来在清华大学的教学实践来看,以年来在清华大学的教学实践来看,以C+作为第一门高级程序设计语言来教是可作为第一门高级程序设计语言来教是可行的。行的。4课程理念课程理念第一门语言课的教学目标第一门语言课的教学目标语言只是一种表达工具,自然语言亦是如此。语言只是一种表达工具,自然语言亦是如此。程序设计语言可以用来表达需要解决的问题程序设计语言可以用来表达需要解决的问题和解决问题的方法,但是方法本身不属于语和解决问题的方法,但是方法本身不属于语言的范畴,要在其它课程中学习。例如:计言的范畴,要在其它课程中学习。例如:计算方法、数据结构等。算方法、数据结构等。学习语言需要实践,因而离不开对分析问题学习语言需要实践,因而离不开对分析问题和解决问题方法的学习。但是初学者的目标和解决问题方法的学习。但是初学者的目标应定位在编写小程序、解决简单问题。应定位在编写小程序、解决简单问题。5课程理念课程理念在有限的学时中先了解什么在有限的学时中先了解什么 树木还是森林?树木还是森林?先讲授面向过程的结构化程序设计,后讲面先讲授面向过程的结构化程序设计,后讲面向对象的思想向对象的思想先见树木,后见森林。先见树木,后见森林。先从细微处着眼,首先关注算法与技巧。先从细微处着眼,首先关注算法与技巧。熟练掌握基本的编程技术以后,再学习面向对象熟练掌握基本的编程技术以后,再学习面向对象的思想和方法。的思想和方法。优点:技巧训练充分、基本技术过硬。优点:技巧训练充分、基本技术过硬。缺点:先入为主,接受面向对象的思想较难。缺点:先入为主,接受面向对象的思想较难。6课程理念课程理念在有限的学时中先了解什么在有限的学时中先了解什么 树木还是森林?树木还是森林?先介绍面向对象的思想与方法,再训练程序设先介绍面向对象的思想与方法,再训练程序设计的方法与技巧计的方法与技巧先见森林,后见树木。先见森林,后见树木。首先学会将人类的自然思维方法用于程序设计。首先学会将人类的自然思维方法用于程序设计。首先建立系统与全局的观念。首先建立系统与全局的观念。在实践环节和后续课程中,不断学习各种算法、训在实践环节和后续课程中,不断学习各种算法、训练编程技巧。练编程技巧。优点:首先学习高度抽象的思维方法,建立系统和优点:首先学习高度抽象的思维方法,建立系统和全局的观念,为后续学习奠定了思想方法的基础。全局的观念,为后续学习奠定了思想方法的基础。缺点:对教材与教师的要求较高,若不能立足于较缺点:对教材与教师的要求较高,若不能立足于较高的位置、深入浅出地讲解,会使课程空洞无物、高的位置、深入浅出地讲解,会使课程空洞无物、枯燥无味。枯燥无味。7教材简介教材简介教材系列教材系列C+语言程序设计(第语言程序设计(第3版)版)C+语言程序设计(第语言程序设计(第3版)学生用书版)学生用书C+语言程序设计(第语言程序设计(第3版)教师用书版)教师用书C+语言程序设计案例教程语言程序设计案例教程内容编排原则:内容编排原则:不割裂面向过程部分与面向对象部分,以面不割裂面向过程部分与面向对象部分,以面向对象的程序设计思想贯穿始终。向对象的程序设计思想贯穿始终。8实践环节实践环节这门课的实践性很强,教师需要强调并这门课的实践性很强,教师需要强调并引导学生通过实践加深对课程内容的理解、引导学生通过实践加深对课程内容的理解、提高编程能力。为此,本书设计了配套的提高编程能力。为此,本书设计了配套的学生用书,包括学习指南、各章要点导读、学生用书,包括学习指南、各章要点导读、实验指导、习题解答。教师应该要求学生实验指导、习题解答。教师应该要求学生上机运行每一道例题,完成各章的实验任上机运行每一道例题,完成各章的实验任务,尽量多做习题。来不及做的习题,可务,尽量多做习题。来不及做的习题,可以参考习题解答,将习题解答作为补充的以参考习题解答,将习题解答作为补充的例题来使用。例题来使用。9配套资源配套资源教师用书(电子版),包括电子讲稿(教师用书(电子版),包括电子讲稿(PPT文文件)、讲课要点、考试样题。件)、讲课要点、考试样题。学生用书,包括学习指南、各章要点导读、实学生用书,包括学习指南、各章要点导读、实验指导、习题解答。验指导、习题解答。案例教程及案例课件库案例教程及案例课件库例题、实验参考程序源代码。例题、实验参考程序源代码。视频课件、配音课件视频课件、配音课件作者的教学网站,可以下载讲稿、录音,在线作者的教学网站,可以下载讲稿、录音,在线学习,参与讨论。学习,参与讨论。10案例课件库案例课件库http:/166.111.70.10:8080/demo/11清华网络学堂清华网络学堂课程网址课程网址清华课程网址清华课程网址http:/ 教学法讲座(2):程序设计基础目录目录对应章节对应章节背景知识的重要性背景知识的重要性思想方法的重要性思想方法的重要性基础知识如何介绍基础知识如何介绍培养编程实践能力的开端培养编程实践能力的开端基础语法的介绍方法基础语法的介绍方法函数的讲法函数的讲法实验课安排实验课安排15对应章节对应章节第第1章章 绪绪 论论第第2章章 C+简单程序设计简单程序设计第第3章章 函数函数16背景知识的重要性背景知识的重要性了解相关背景知识可以使学生从一开始了解相关背景知识可以使学生从一开始就站在全局的、宏观的角度看问题,避就站在全局的、宏观的角度看问题,避免单纯陷入语法细节,造成学会了语法免单纯陷入语法细节,造成学会了语法却不会写程序的后果。却不会写程序的后果。要使学生了解要使学生了解计算机程序的作用和意义计算机程序的作用和意义程序语言和程序设计技术的发展历程程序语言和程序设计技术的发展历程程序设计在软件开发中的地位程序设计在软件开发中的地位对应讲稿:第对应讲稿:第1章章3-7页,页,21-26页页17思想方法的重要性思想方法的重要性以面向对象的程序设计思想贯穿始终以面向对象的程序设计思想贯穿始终在绪论课中浅显地介绍面向对象的思想在绪论课中浅显地介绍面向对象的思想以后在讲授每个新的语法知识点时,都要从以后在讲授每个新的语法知识点时,都要从面向对象思想的角度阐释面向对象思想的角度阐释以面向对象的思想为起点,使学生将这以面向对象的思想为起点,使学生将这种程序设计思想与人类自然的思维方法种程序设计思想与人类自然的思维方法统一统一对应讲稿:第对应讲稿:第1章章8-20页页18基础知识如何介绍基础知识如何介绍信息的表示与存储相关知识对于程序设信息的表示与存储相关知识对于程序设计课程是必须的。计课程是必须的。如果有其他课程介绍相关知识,这部分如果有其他课程介绍相关知识,这部分内容可以不讲。内容可以不讲。如果没有其他课程介绍这部分内容,应如果没有其他课程介绍这部分内容,应考虑在课上讲授,或安排自学辅导。考虑在课上讲授,或安排自学辅导。对应讲稿:第对应讲稿:第1章章27-41页页19培养编程实践能力的开端培养编程实践能力的开端简单介绍上机编写程序的过程简单介绍上机编写程序的过程简单介绍相关术语和概念简单介绍相关术语和概念通过实验一,指导学生学会变异环境的通过实验一,指导学生学会变异环境的使用使用对应讲稿:第对应讲稿:第1章章42-45页页20基础语法的介绍方法基础语法的介绍方法基础语法内容基础语法内容C+语言概述语言概述基本数据类型和表达基本数据类型和表达式式数据的输入与输出数据的输入与输出基本控制结构基本控制结构自定义数据类型自定义数据类型函数的声明和调用函数的声明和调用函数间的参数传递函数间的参数传递内联函数内联函数带默认形参值的函数带默认形参值的函数函数重载函数重载C+系统函数系统函数21基础语法的介绍方法基础语法的介绍方法C+语言概述语言概述阐述与的关系,同时说明学习阐述与的关系,同时说明学习不必首先学习面向过程的语言。不必首先学习面向过程的语言。介绍基本语法成分时,采用与自然语言介绍基本语法成分时,采用与自然语言的语法成分类比的方法。的语法成分类比的方法。强调越丰富的语法规则为语言提供越强强调越丰富的语法规则为语言提供越强的表现力,可以与自然语言类比来讲,的表现力,可以与自然语言类比来讲,使学生对繁多的语法不要产生抵触使学生对繁多的语法不要产生抵触对应讲稿:第对应讲稿:第2章章3-8页页22基础语法的介绍方法基础语法的介绍方法基本数据类型和表达式基本数据类型和表达式阐明这部分语法的重要性:数据处理与阐明这部分语法的重要性:数据处理与计算是计算机程序的最基本功能,要使计算是计算机程序的最基本功能,要使程序能够处理计算问题,就需要能够对程序能够处理计算问题,就需要能够对各种类型的数据和运算进行模拟。各种类型的数据和运算进行模拟。在讲课中强调每一种数据类型模拟了哪在讲课中强调每一种数据类型模拟了哪些实际数据,用途是什么。具体语法规些实际数据,用途是什么。具体语法规定可以淡化,留给学生自学。定可以淡化,留给学生自学。对应讲稿:第对应讲稿:第2章章9-38页页23基础语法的介绍方法基础语法的介绍方法数据的输入与输出数据的输入与输出C+没有输入没有输入/输出语句输出语句输入输入/输出被看作信息的流动输出被看作信息的流动输入输入/输出功能通过输出功能通过I/O流类库实现。优点:流类库实现。优点:功能丰富、灵活,易于扩充功能丰富、灵活,易于扩充只通过例题简单介绍标准输入只通过例题简单介绍标准输入/输出,格输出,格式控制不作为重点,可以不讲。式控制不作为重点,可以不讲。对应讲稿:第对应讲稿:第2章章42页页24基础语法的介绍方法基础语法的介绍方法基本控制结构基本控制结构介绍每种分支与循环语句时,首先从涉介绍每种分支与循环语句时,首先从涉及分支与循环的实际问题入手,给出解及分支与循环的实际问题入手,给出解决问题的程序实例,然后引导学生从中决问题的程序实例,然后引导学生从中发现分支与循环语句的用法,最后给出发现分支与循环语句的用法,最后给出语法规定。语法规定。对于语法细节可以淡化,留给学生自学。对于语法细节可以淡化,留给学生自学。关键要讲清楚用途、用法。关键要讲清楚用途、用法。对应讲稿:第对应讲稿:第2章章43-74页页25基础语法的介绍方法基础语法的介绍方法自定义数据类型自定义数据类型基本数据类型不足以模拟复杂的实际数据,于基本数据类型不足以模拟复杂的实际数据,于是语法提供了自定义数据类型的机制。是语法提供了自定义数据类型的机制。枚举实际上是整数集合的子集,用以定义由有枚举实际上是整数集合的子集,用以定义由有限整数构成的数据类型,与使用整数类型相比,限整数构成的数据类型,与使用整数类型相比,可以获得由语法保证的数据和发行检验。可以获得由语法保证的数据和发行检验。结构体是将具有内在逻辑联系的不同类型数据结构体是将具有内在逻辑联系的不同类型数据组合在一起构成新的数据类型。是从组合在一起构成新的数据类型。是从C语言继语言继承的,面向过程的,不能规定对新数据类型的承的,面向过程的,不能规定对新数据类型的处理方法。处理方法。对应讲稿:第对应讲稿:第2章章75-88页页26基础语法的介绍方法基础语法的介绍方法函数函数函数是定义和实现一个功能模块的机制函数是定义和实现一个功能模块的机制在面向过程的程序设计中,函数是程序在面向过程的程序设计中,函数是程序模块的最小单位。模块的最小单位。在面向对象的程序设计中,函数是类的在面向对象的程序设计中,函数是类的行为的体现。行为的体现。27基础语法的介绍方法基础语法的介绍方法函数的声明和调用函数的声明和调用函数定义是函数功能的具体实现代码函数定义是函数功能的具体实现代码使用函数以前要声明函数原型使用函数以前要声明函数原型函数调用和返回的过程要讲透函数调用和返回的过程要讲透函数递归调用是难点,从以下几方面讲函数递归调用是难点,从以下几方面讲一些实际问题和解决问题的方法本身的描述是递归一些实际问题和解决问题的方法本身的描述是递归的,典型例子是阶乘。的,典型例子是阶乘。演示简单递归问题的函数调用过程演示简单递归问题的函数调用过程要求学生课后通过开发环境的调试工具观察递归调要求学生课后通过开发环境的调试工具观察递归调用的过程。用的过程。对应讲稿:第对应讲稿:第3章章3-41页页28基础语法的介绍方法基础语法的介绍方法函数的参数传递函数的参数传递形参在形实结合时才分配内存空间并被形参在形实结合时才分配内存空间并被初始化初始化形实结合时参数单向传递(传值)。以形实结合时参数单向传递(传值)。以数据交换不成功的典型例子来演示。数据交换不成功的典型例子来演示。介绍引用作形参。在此介绍引用类型学介绍引用作形参。在此介绍引用类型学生比较容易理解。生比较容易理解。对应讲稿:第对应讲稿:第3章章42-49页页29基础语法的介绍方法基础语法的介绍方法内联函数内联函数从兼顾执行效率和程序结构的角度来引从兼顾执行效率和程序结构的角度来引入内联函数。前面讲透了函数调用的执入内联函数。前面讲透了函数调用的执行过程,这里学生才能理解函数调用的行过程,这里学生才能理解函数调用的效率问题效率问题编译器在执行优化时可能会自主决定函编译器在执行优化时可能会自主决定函数是否内联数是否内联对应讲稿:第对应讲稿:第3章章50-51页页30基础语法的介绍方法基础语法的介绍方法带默认形参值的函数带默认形参值的函数实际问题中很多时候是有默认值的,举实际问题中很多时候是有默认值的,举一些例子。为了模拟这些情况,程序中一些例子。为了模拟这些情况,程序中也需要为函数处理的数据设置默认值也需要为函数处理的数据设置默认值对应讲稿:第对应讲稿:第3章章52-55页页31基础语法的介绍方法基础语法的介绍方法函数重载函数重载重载的思想,与人类自然的思维方式是重载的思想,与人类自然的思维方式是一致的。一致的。重载使得具有相似但不同功能的函数可重载使得具有相似但不同功能的函数可以拥有相同的函数名,方面了函数的使以拥有相同的函数名,方面了函数的使用者。用者。重载类的成员函数可以提高类通用性重载类的成员函数可以提高类通用性对应讲稿:第对应讲稿:第3章章56-62页页32基础语法的介绍方法基础语法的介绍方法C+系统函数系统函数C+的系统函数是从的系统函数是从c语言继承来的,对语言继承来的,对应的头文件是应的头文件是系统函数的说明文档可以查阅编译系统系统函数的说明文档可以查阅编译系统的帮助,学生应该学会阅读英文的帮助的帮助,学生应该学会阅读英文的帮助文档。文档。33实验课安排实验课安排实验一(实验一(2学时)学时)集成开发环境应用入门集成开发环境应用入门实验二(实验二(4学时)学时)学会编写简单的学会编写简单的C+程序。程序。复习基本语法及简单的输入输出。复习基本语法及简单的输入输出。观察头文件的作用。观察头文件的作用。学会使用集成开发环境中的学会使用集成开发环境中的debug调试功能:调试功能:单步执行、设置断点、观察变量值。单步执行、设置断点、观察变量值。34实验课安排实验课安排实验三(实验三(2学时)学时)掌握函数的定义和调用方法。掌握函数的定义和调用方法。练习重载函数的使用。练习重载函数的使用。练习使用系统函数。练习使用系统函数。学习使用学习使用VC+的的debug调试功能,使用调试功能,使用step into追踪到函数内部。追踪到函数内部。35小结小结程序设计基础部分的讲解要从大处着眼,程序设计基础部分的讲解要从大处着眼,强调强调面向对象的思想面向对象的思想程序在模拟和解决现实问题中的作用程序在模拟和解决现实问题中的作用每一种语法规定的用途和意义每一种语法规定的用途和意义淡化语法细节,切忌纯粹罗列语法淡化语法细节,切忌纯粹罗列语法通过自学、实验和作业掌握、巩固基础通过自学、实验和作业掌握、巩固基础语法。要安排足够的上机辅导和答疑,语法。要安排足够的上机辅导和答疑,作业可以多留一些,以加强基础训练。作业可以多留一些,以加强基础训练。36C+C+语言程序设计语言程序设计 教学法讲座教学法讲座(3)(3):类的概念:类的概念清华大学 郑莉目录目录对应章节对应章节面向对象的思想背景面向对象的思想背景超越语法介绍类与对象超越语法介绍类与对象特殊成员函数的讲解切入点特殊成员函数的讲解切入点类的组合类的组合实验课安排实验课安排38对应章节对应章节第第4章章 面向对象程序设计的基本特点面向对象程序设计的基本特点 类和对象类和对象 构造函数和析构函数构造函数和析构函数 类的组合类的组合 UML图形标识图形标识 程序实例程序实例-人员信息管理系统人员信息管理系统39面向对象的思想背景面向对象的思想背景现实中的类与对象现实中的类与对象计算机程序对现实问题的模拟计算机程序对现实问题的模拟程序中基本数据类型的局限性及自定义程序中基本数据类型的局限性及自定义类型的必要性类型的必要性“类型类型”的含义:数据的含义:数据+处理函数处理函数自定义类型的途径自定义类型的途径类类40超越语法介绍类与对象超越语法介绍类与对象从现实问题出发举例说明对象的实际意义从现实问题出发举例说明对象的实际意义从对现实事物的分类管理角度引出抽象与分类从对现实事物的分类管理角度引出抽象与分类观点观点从现实中物体的封装出发说明封装的必要性,从现实中物体的封装出发说明封装的必要性,引出引出C+中的封装机制中的封装机制类类以现实中封装物体的内部构造与外部接口,以以现实中封装物体的内部构造与外部接口,以及程序对现实的模拟角度,介绍成员的访问属及程序对现实的模拟角度,介绍成员的访问属性。性。对应讲稿:第对应讲稿:第4章章13-28页页41构造与析构函数构造与析构函数回顾基本类型变量初始化的过程回顾基本类型变量初始化的过程对象初始化的必要性及其困难对象初始化的必要性及其困难自定义的初始化自定义的初始化构造函数构造函数对象的对象的“克隆克隆”拷贝构造拷贝构造对象消亡前的对象消亡前的“善后善后”与析构函数与析构函数对应讲稿:第对应讲稿:第4章章29-46页页42类重用的方式之一类重用的方式之一组合组合部件组装的思想背景部件组装的思想背景组合类与成员对象间的组合类与成员对象间的“has-a”关系关系组合类的部件成员组合类的部件成员组合类对象的构造与析构组合类对象的构造与析构对应讲稿:第对应讲稿:第4章章47-58页页43实验课安排实验课安排实验四(实验四(4学时)学时)掌握类的声明和使用。掌握类的声明和使用。掌握类的声明和对象的声明。掌握类的声明和对象的声明。复习具有不同访问属性的成员的访问方式。复习具有不同访问属性的成员的访问方式。观察构造函数和析构函数的执行过程。观察构造函数和析构函数的执行过程。学习类的组合使用方法。学习类的组合使用方法。使用使用VC+的的debug调试功能观察程序流程,跟踪观调试功能观察程序流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。察类的构造函数、析构函数、成员函数的执行顺序。44小结小结对类与对象的介绍要以实际问题为背景对类与对象的介绍要以实际问题为背景对类的抽象、封装与隐藏机制要着重讲对类的抽象、封装与隐藏机制要着重讲解其意义和作用解其意义和作用构造、析构函数重点讲其用途构造、析构函数重点讲其用途类的组合中类的组合中“has-a”关系的应用背景关系的应用背景45C+C+语言程序设计语言程序设计 教学法讲座教学法讲座(4)(4):数据共享与程序结构:数据共享与程序结构清华大学 郑莉目录目录对应章节对应章节数据共享的需求与途径数据共享的需求与途径数据共享的相关语法数据共享的相关语法共享数据的安全性共享数据的安全性编译预处理命令与多文件结构编译预处理命令与多文件结构47对应章节对应章节第第5章章作用域与可见性作用域与可见性对象的生存期对象的生存期数据与函数数据与函数静态成员静态成员共享数据的保护共享数据的保护友元友元编译预处理命令编译预处理命令多文件结构和工程多文件结构和工程本章内容的特点:与数据的共享和保护相关本章内容的特点:与数据的共享和保护相关48变量的寿命、作用域、可见性变量的寿命、作用域、可见性理解变量的寿命、作用域、可见性是数理解变量的寿命、作用域、可见性是数据共享的基础据共享的基础寿命寿命静态生存期:全局寿命静态生存期:全局寿命动态生存期:局部寿命动态生存期:局部寿命以典型实例演示以典型实例演示寿命、作用域、可见性寿命、作用域、可见性的综合效果,可以借助调试工具演示的综合效果,可以借助调试工具演示对应讲稿:第对应讲稿:第5章章3-22页页49数据共享的需求与途径数据共享的需求与途径函数间需要数据共享函数间需要数据共享同一个类的对象间需要数据共享同一个类的对象间需要数据共享不同类之间需要数据共享不同类之间需要数据共享50数据共享的相关语法(一)数据共享的相关语法(一)函数间的数据共享函数间的数据共享全局变量、函数参数、返回值全局变量、函数参数、返回值将共享的数据与共享数据的函数封装成类将共享的数据与共享数据的函数封装成类对应讲稿:第对应讲稿:第5章章23-25页页51数据共享的相关语法(二)数据共享的相关语法(二)同一个类的对象间数据共享同一个类的对象间数据共享静态成员,也称类成员静态成员,也称类成员静态数据成员静态数据成员该类的所有对象共享该成员的同一个拷贝该类的所有对象共享该成员的同一个拷贝静态函数成员静态函数成员类外代码可以使用类名和作用域操作符来调用静态类外代码可以使用类名和作用域操作符来调用静态成员函数。成员函数。静态成员函数只能直接引用属于该类的静态数据成静态成员函数只能直接引用属于该类的静态数据成员或静态成员函数。员或静态成员函数。对应讲稿:第对应讲稿:第5章章26-32页页52数据共享的相关语法(三)数据共享的相关语法(三)不同类之间的数据共享不同类之间的数据共享友元函数友元函数友元类友元类对应讲稿:第对应讲稿:第5章章33-40页页53共享数据的安全保护共享数据的安全保护常类型常类型常引用:保护被引用的对象常引用:保护被引用的对象常对象:对象本身不可改变,用常成员函数常对象:对象本身不可改变,用常成员函数访问访问常指针:保护被指向的对象常指针:保护被指向的对象对应讲稿:第对应讲稿:第5章章41-48页页54编译预处理命令与多文件结构编译预处理命令与多文件结构主要通过学生自学与实验掌握主要通过学生自学与实验掌握55实验课安排实验课安排实验五(实验五(2学时)学时)观察程序运行中变量的作用域、生存期和可观察程序运行中变量的作用域、生存期和可见性;见性;学习类的静态成员的使用;学习类的静态成员的使用;学习多文件结构在学习多文件结构在C+程序中的使用;程序中的使用;56小结小结讲授本章内容时最主要的是找到主线索讲授本章内容时最主要的是找到主线索共享与保护,要避免杂乱无章共享与保护,要避免杂乱无章重点在静态成员、友元、常类型重点在静态成员、友元、常类型要强调学生在实验中的亲自动手调试、要强调学生在实验中的亲自动手调试、观察观察57C+C+语言程序设计语言程序设计 教学法讲座教学法讲座(5)(5):数组与指针:数组与指针清华大学 郑莉目录目录对应章节对应章节数组概念的引入数组概念的引入数组的讲解要点数组的讲解要点数组的适用场合、优点、缺点数组的适用场合、优点、缺点指针的讲解要点指针的讲解要点直接使用内存地址的优点及缺点直接使用内存地址的优点及缺点动态内存分配及对象深拷贝问题动态内存分配及对象深拷贝问题字符串的存储与处理字符串的存储与处理59对应章节对应章节第第6章章数组数组指针指针动态内存分配动态内存分配深拷贝与浅拷贝深拷贝与浅拷贝字符串字符串程序实例程序实例-人员信息管理系统改进人员信息管理系统改进60如何处理大量同类型对象如何处理大量同类型对象对同类型对象群体中每一个体往往使用同样的对同类型对象群体中每一个体往往使用同样的处理方法。可否使用循环语句?关键是在循环处理方法。可否使用循环语句?关键是在循环体中如何以统一的方式标识每一个体变量。体中如何以统一的方式标识每一个体变量。群体中的对象往往具有逻辑上的密切联系,或群体中的对象往往具有逻辑上的密切联系,或存在次序关系。如何以数据结构来描述这种关存在次序关系。如何以数据结构来描述这种关系?系?数组恰恰是解决上述问题的数据结构。数组恰恰是解决上述问题的数据结构。对应讲稿:第对应讲稿:第6章第章第3页页61数组的讲解要点数组的讲解要点数组的声明与引用数组的声明与引用以统一的名称命名一组变量以统一的名称命名一组变量以下标表示元素的序号以下标表示元素的序号数组的实质数组的实质数组名即数组的首地址数组名即数组的首地址数组元素在内存中是按次序连续存放的数组元素在内存中是按次序连续存放的对多维数组的理解对多维数组的理解二维数组可以看成是一维数组的数组二维数组可以看成是一维数组的数组二维数组按行存放二维数组按行存放对象数组的构造需要调用元素类的构造函数对象数组的构造需要调用元素类的构造函数对应讲稿:第对应讲稿:第6章章4-27页页62数组的适用场合举例数组的适用场合举例用于存储同类型的数据序列用于存储同类型的数据序列用于在函数间传递大批数据用于在函数间传递大批数据以数组名为参数,传递数组的首地址而不是以数组名为参数,传递数组的首地址而不是元素值元素值要注意:对形参数组的修改会直接反映到实要注意:对形参数组的修改会直接反映到实参数组中参数组中63数组的主要优点与缺点数组的主要优点与缺点优点优点便于按统一方式处理大量同类型数据便于按统一方式处理大量同类型数据支持对同类型数据序列的随机访问支持对同类型数据序列的随机访问便于在函数之间共享大量数据便于在函数之间共享大量数据缺点缺点插入插入/删除删除/重新排列元素时需要大量移动元素。重新排列元素时需要大量移动元素。存在下标越界等安全隐患存在下标越界等安全隐患长度不可动态调整长度不可动态调整64指针的讲解要点指针的讲解要点访问程序的内存单元既可以通过变量名,也可以通过访问程序的内存单元既可以通过变量名,也可以通过地址地址指针是存放地址的变量指针是存放地址的变量指针只有被赋予合法地址以后,才能使用指针只有被赋予合法地址以后,才能使用指针的运算规则与指向的类型相关指针的运算规则与指向的类型相关指针可以接受动态分配的内存地址指针可以接受动态分配的内存地址指向函数的指针可以增加程序的通用性指向函数的指针可以增加程序的通用性this指针使得非静态成员函数可以识别处理的对象指针使得非静态成员函数可以识别处理的对象指向类非静态成员的指针必须与对象名指向类非静态成员的指针必须与对象名/对象指针联合对象指针联合使用使用对应讲稿:第对应讲稿:第6章章28-86页页65使用内存地址的优点及缺使用内存地址的优点及缺点点优点优点灵活高效灵活高效支持动态内存分配支持动态内存分配有利于数据共享有利于数据共享缺点缺点安全性差,可能会出现对内存的非法访问安全性差,可能会出现对内存的非法访问使程序的可读性下降使程序的可读性下降注意事项注意事项使用指针时要确保其含有有效地址,例如不要使用使用指针时要确保其含有有效地址,例如不要使用未被初始化的指针,函数不要返回动态局部变量的未被初始化的指针,函数不要返回动态局部变量的地址等地址等66例题:动态数组类例题:动态数组类主要知识点主要知识点动态内存分配动态内存分配在析构函数中释放动态分配的内存空间在析构函数中释放动态分配的内存空间深拷贝与浅拷贝问题深拷贝与浅拷贝问题对应讲稿:第对应讲稿:第6章章87-89,96-105页页67字符串的存储与处理字符串的存储与处理以字符数组存储字符串以字符数组存储字符串C语言的方法语言的方法具有数组固有的安全隐患具有数组固有的安全隐患只能使用库函数进行处理只能使用库函数进行处理使用使用String类类安全性好安全性好封装了处理函数,重载了运算符封装了处理函数,重载了运算符对应讲稿:第对应讲稿:第6章章106-118页页68实验课安排实验课安排实验六(实验六(4学时)学时)学习使用数组数据对象;学习使用数组数据对象;学习字符串数据的组织和处理;学习字符串数据的组织和处理;学习标准学习标准C+库的使用;库的使用;掌握指针的使用方法;掌握指针的使用方法;练习通过练习通过debug观察指针的内容及其所指的对象的观察指针的内容及其所指的对象的内容;内容;练习通过动态内存分配实现动态数组,并体会指针练习通过动态内存分配实现动态数组,并体会指针在其中的作用;在其中的作用;分别使用字符数组和标准分别使用字符数组和标准C+库练习处理字符串的库练习处理字符串的方法。方法。69小结小结本章两大主要知识点是:数组和指针本章两大主要知识点是:数组和指针介绍数组关键在于概念的引入、数组的用途。介绍数组关键在于概念的引入、数组的用途。同时要指出数组这种数据结构的不足之处。同时要指出数组这种数据结构的不足之处。指针部分对于初学者的难度较大,主要是对地指针部分对于初学者的难度较大,主要是对地址的理解问题,要讲透。址的理解问题,要讲透。通过通过this指针说明类的非静态成员函数为什么指针说明类的非静态成员函数为什么能识别处理的对象能识别处理的对象对象的深拷贝问题、拷贝构造函数的必要性、对象的深拷贝问题、拷贝构造函数的必要性、析构函数的必要性,都要在本章讲清楚析构函数的必要性,都要在本章讲清楚70C+C+语言程序设计语言程序设计 教学法讲座教学法讲座(6)(6):类的继承与多态:类的继承与多态清华大学 郑莉目录目录内容构成内容构成继承机制的实际意义,以及继承机制的实际意义,以及“is-a”关系关系继承时的成员访问控制继承时的成员访问控制继承时的构造、析构函数继承时的构造、析构函数解决多继承时的冗余和二义性问题解决多继承时的冗余和二义性问题虚继承虚继承多态机制的背景和意义多态机制的背景和意义静态多态性:函数重载和运算符重载静态多态性:函数重载和运算符重载动态多态性:虚函数动态多态性:虚函数72对应章节对应章节第第7章章 继承与派生继承与派生继承与派生继承与派生访问控制访问控制类型兼容规则类型兼容规则派生类的构造和析构函数派生类的构造和析构函数派生类成员的标识与访问派生类成员的标识与访问程序实例程序实例-人员信息管理人员信息管理第第8章章 多态性多态性多态性概述多态性概述运算符重载运算符重载虚函数虚函数抽象类抽象类程序实例程序实例-对于一个小型公司的人员信息管理程序的改进对于一个小型公司的人员信息管理程序的改进73继承机制的实际意义继承机制的实际意义从一些容易理解的实例出发,解释从一些容易理解的实例出发,解释“继继承承”的意义的意义概念的继承和代码的重用概念的继承和代码的重用对新问题的适应对新问题的适应对应讲稿:第对应讲稿:第7章章3-8页页74继承时的成员访问控制继承时的成员访问控制继承过程中可以设定访问控制权限继承过程中可以设定访问控制权限无论以任何方式继承,基类的成员都存无论以任何方式继承,基类的成员都存在于派生类的对象中。在于派生类的对象中。基类的私有成员只能通过公有接口访问基类的私有成员只能通过公有接口访问对应讲稿:第对应讲稿:第7章章9-23页页75继承时的构造、析构函数继承时的构造、析构函数构造函数和析构函数不被继承构造函数和析构函数不被继承基类的构造基类的构造函数只能初始化从基类继承来的成员。派生类函数只能初始化从基类继承来的成员。派生类新增成员要自己设计构造函数来初始化新增成员要自己设计构造函数来初始化理解构造函数的执行次序和参数转递理解构造函数的执行次序和参数转递首先初始化基类子对象、对象成员,最后初始化派首先初始化基类子对象、对象成员,最后初始化派生类新增成员生类新增成员派生类要负责为基类的构造函数和对象成员的构造派生类要负责为基类的构造函数和对象成员的构造函数转递参数函数转递参数如果为一个类编写了构造函数,就最好再写一个默如果为一个类编写了构造函数,就最好再写一个默认的构造函数认的构造函数析构函数的调用次序与构造函数相反析构函数的调用次序与构造函数相反76虚继承虚继承多继承有可能导致冗余和二义性问题,多继承有可能导致冗余和二义性问题,可以通过虚继承解决可以通过虚继承解决继承一个类时,很难预料将来是否会出继承一个类时,很难预料将来是否会出现二义性,虚继承的基类及各派生类,现二义性,虚继承的基类及各派生类,直至最远派生类通常是由一个人或项目直至最远派生类通常是由一个人或项目组一次设计完成的组一次设计完成的能不用虚继承尽量不用,会给后继派生能不用虚继承尽量不用,会给后继派生类增加复杂性类增加复杂性77多态机制的背景和意义多态机制的背景和意义要从我们熟悉的多态的思维方式入手介要从我们熟悉的多态的思维方式入手介绍程序对多态的模拟绍程序对多态的模拟从设计新的类型的角度说明运算符重载从设计新的类型的角度说明运算符重载的意义的意义一个新的类型包括数据和运一个新的类型包括数据和运算方法算方法运算符重载实质上也就是函数重载,属运算符重载实质上也就是函数重载,属静态多态性静态多态性对应讲稿:第对应讲稿:第8章章3-7页页78运算符重载运算符重载这里只讲运算符重载的一般概念和基本这里只讲运算符重载的一般概念和基本语法,对一些特殊运算符的重载,如语法,对一些特殊运算符的重载,如,留到第留到第9章结合实例介绍会比较直观章结合实例介绍会比较直观对应讲稿:第对应讲稿:第8章章8-29页页79动态多态性动态多态性绑定的概念绑定的概念以基类的指针指向派以基类的指针指向派生类的对象,并希生类的对象,并希望由此调用派生类的函数望由此调用派生类的函数静态绑定静态绑定不能实现,使用动态绑定。不能实现,使用动态绑定。对应讲稿:第对应讲稿:第8章章30-4280实验课安排实验课安排实验七实验七学习声明和使用类的继承关系,声明派生类;学习声明和使用类的继承关系,声明派生类;熟悉不同继承方式下对基类成员的访问控制;熟悉不同继承方式下对基类成员的访问控制;学习利用虚基类解决二义性问题。学习利用虚基类解决二义性问题。实验八实验八掌握运算符重载的方法;掌握运算符重载的方法;学习使用虚函数实现动态多态性。学习使用虚函数实现动态多态性。81小结小结本章讲解时的关键在于以面向对象的现本章讲解时的关键在于以面向对象的现实意义引出语法规定,以程序模拟现实实意义引出语法规定,以程序模拟现实问题。问题。82C+C+语言程序设计语言程序设计 教学法讲座教学法讲座(7)(7):数据结构与数据结构与STLSTL清华大学 郑莉目录目录为什么在为什么在C+课中介绍数据结构基础知识课中介绍数据结构基础知识模板模板安全数组类、链表类安全数组类、链表类栈与队列的概念栈与队列的概念查找与排序算法查找与排序算法泛型程序设计思想泛型程序设计思想STL简介简介84对应章节对应章节第第9章章函数模板与类模板函数模板与类模板线性群体线性群体群体数据的组织群体数据的组织第第10章章泛型程序设计及概念和术语泛型程序设计及概念和术语C+标准模板库中的容器标准模板库中的容器迭代器迭代器标准标准C+库中的算法库中的算法85为什么介绍数据结构基础知为什么介绍数据结构基础知识识数据结构是程序设计能力的基础数据结构是程序设计能力的基础非计算机专业在本科阶段可能没有数据结构非计算机专业在本科阶段可能没有数据结构课,程序设计课中应该介绍一些基础知识课,程序设计课中应该介绍一些基础知识计算机专业在学习第一门语言时可能还没上计算机专业在学习第一门语言时可能还没上数据结构数据结构数据结构基础有利于对数据结构基础有利于对STL的理解的理解借本章的一些综合例题,对全书内容作借本章的一些综
展开阅读全文