}
2)、什么是内存泄漏?
分析【源程序1-12】的流程,说明该代码是否存在内存泄漏。
答:
C++规定,动态申请的储存单元可以提前释放,最晚必须在超出作用域时显示释放。
否则系统无法自动收回,只有在下次重新启动系统时才能回收。
这就是“内存泄漏”。
【源程序1-12】中第46~47行删除动态变量和动态数组,提前释放它们占用的系统资源。
所以说这一代码不存在内存的泄漏。
3)、什么是引用?
函数的参数传递使用指针的方式和使用引用的方式有什么区别?
答:
引用是为已有的变量起别名,当建立引用时,程序用另一个变量名称初始化引用。
对引用的改动实际就是对目标的改动。
使用引用的方式要在程序结束前释放,否则会出现内存泄漏,而指针则不用释放,也就不存在内存的泄漏。
4)、什么是函数的重载?
函数重载的匹配顺序是怎样的?
答:
是指C++允许申明和实现名称相同、参数类型或数量不同的函数,在调用时系统可以根据参数类型的不同来选择调用不同的函数实现代码。
函数重载的匹配顺序:
1、寻找一个严格的匹配(类型完全相同),如果找到了,就调用此函数。
2、通过内部转换寻找一个匹配,只要找到了,就调用此函数。
3、通过用户定义的转换寻找一个匹配,若能找到唯一的一组转换,就调用此函数。
2.2第二章
1、实训内容
2011年2月22日
课时量
4
实训内容
第二章OOP实现
详
细
内
容
1.类的基本定义与实现
2.面向对象基本概念分析
3.OOP实现技术分析
4.类模版
5.异常处理
体
会
和
收
获
在这一章的学习中知道了异常的处理方法,
定义异常(try语句块),将那些有可能产生错误的语句框定在try块中;
抛掷异常(throw语句块),当异常产生时,抛掷异常代码;
处理异常(catch),将特定异常处理的语句放在catch语句块中,以便异常被捕获石处。
知道了构造函数是类中特殊的成员函数,它们与类同名,但在析构函数之前冠以“~”字符,以区别与构造函数。
在定义构造函数与析构函数时,不能为它们指定返回类型。
构造函数的作用是在对象被建立时自动地对对象进行初始化,如为指针数据成员建立该成员所指向的对象。
析构函数则用于在对象的生命周期结束时执行一些必要的操作,如删除指针数据成员所指向的对象。
一般来讲,析构函数执行与构造函数相反的任务。
2、思考题的解答
1)、分析【源程序2-2】的流程,说明在该代码中是如何使用继承和多态机制的。
答:
1>继承的分析:
1、第1~181行定义和实现了3个类:
Location->Point->Circle,即Location派生出Point类,Point类又派生出Cricle类,也可以说Circle类是Point类的子类,Point类是Circle类的父类,Point类是Location的子类。
2、第7~8行定义了基类Location的成员变量x和y,用来刻画平面上一个位置的坐标,第10行定义了构造函数Location,第11~14行定义了查看和改变成员变量x、y值的接口函数,第15~16行申明了两个屏幕显示和隐藏的行为刻画函数框架。
第61~77行是这些成员函数的实现代码。
3、第21行的类Point是由Location类采用public方式派生的,在继承Location类的所有成员变量和成员函数的基础上,第23~28行新增加了用来进一步刻画平面上一个点的可见性、点的类型和实例个数的3个成员变量Visible、PTye和NumOflnstances,新增加了点的移动行为刻画成员函数MovTo|、获得点实例可见性的接口函数GetVisible和获取实例个数的静态接口函数getNumPflnstances等。
4、第47行的类Circle是由Point类采用public方式派生的,在继承Point类的所有成员变量和成员函数的基础上,第50行新增加了用来进一步刻画平面上一个园的大小的成员变量Radius,新增加了园的缩放行为刻画成员函数Expand、获取园半径的接口函数GetRadius等。
2>多态机制:
答:
1、通过虚函数实现多态性
2、通过构造函数重载实现多态性
3、通过成员函数重载实现多态
2)、什么是友元函数?
类的成员函数和友元函数有什么区别?
答:
友元函数不是成员函数,而是类在定义时声明的“朋友”函数,表明它不受访问控制的约束,可以访问类的全部成员。
除可以将一个函数定义为一个类的友元函数外,还可以将一个类定义为另一个类的友元类。
如一个类A是类B的友元类,则类A的所有成员函数在对B类实例进行操作时,可以不受控制的访问B类的多有成员。
友元的关系是单向的,而不是双向的,友元的关系不能传递。
区别:
成员函数是要受访问控制的约束,而友元函数不受约束。
3)、什么是异常?
C++如何处理异常?
答:
程序语句的语法正确是编译通过的前提条件,但有些语句在运行时的某些特殊情况下,如系统资源短缺、参数取值越界、指针非法指向、外部控制设备出错等,会导致系统运行时产生错误称为异常或异常错误。
规范化异常处理的基本规则是:
危险语句监督执行,尝试异常报告错误,所有同类型异常错误集中处理。
异常处理的实现步骤:
1、定义异常(try语句块),将那些有可能产生错误的语句框定在try块中;
2、抛掷异常(throw语句块),当异常产生时,抛掷异常代码;
3、处理异常(catch),将特定异常处理的语句放在catch语句块中,以便异常被捕获石处理。
4)、通过前两章内容的学习,总结C++代码重用的常用方法。
答:
代码重用主要分为源代码的级别重用和目标代码级别的重用,源代码级别重用虽然简单,只要将源代码一起编译即可,但它是最低级的重用方式;目标代码级重用是将常用的一些功能模块集中起来,经过编译独立存放在一个二进制文件中,一般以库的方式来体现
2.3第三章
1、实训内容
2011年2月23日
课时量
实训内容
第3章输入/输出
与C++流
详
细
内
容
1、C++流的概念
2、输入/输出流
1.标准输入流
2.标准输出流
3、文件流
1.ASCII文件的操作
2.二进制文件的操作
4、字符串流
体
会
和
收
获
文件流的标准输出与输入方式,以及ASCII与二进制的性质。
字符串流有相应的缓冲区,初始状态下流缓冲区是空的,如果向字符数组存入数据,随着不断向流插入数据,流缓冲区中的数据不断增加,代缓冲区满后,一起存入字符数组。
如果是从字符数组读取数据,则先将字符数组中的数据送到流缓冲区,然后从缓冲区提取数据赋给有关变量。
字符串流类没有成员函数,因此在建立字符串流对象时,通过给定参数来确定字符串流与字符数组的关联,即通过调用构造函数来解决问题。
三曲
2、思考题的解答
1)、什么是ASCII文件?
什么是二进制文件?
两者之间有什么区别?
答:
二进制文件是按二进制的编码方式来存放文件的。
信息在计算机上是用二进制表示的,这种表示法让人理解就很困难。
因此计算机上都配有输入和输出设备,这些设备的主要目的就是,以一种人类可阅读的形式将信息在这些设备上显示出来供人阅读理解。
为保证人类和ASCII码表,它的全称是“美国信息交换标准代码”。
ASCII文件就是文本文件,最后保存后的文件是可读出来的,二进制文件最后保存出来的文件是乱码的,如果你的文件不想让别人看到就可以用二进制文件去保存,可以先输出ASCII文件,自己先看,然后改为二进制文件就没错了
2)、C++通过什么方法设置输出流的格式?
答:
在输出数据时,往往不指定输出格式,由系统采取默认的格式。
但有时需要指定输出的格式,通常有两种方法:
一种是使用控制符的方法;另一种是使用流对象的有关成员函数。
2.4第四章
1、实训内容
2011年月日
课时量
实训内容
第4章基础GUI的
VC++实现
详
细
内
容
1、基于MFC的GUI样板程序演示与分析
1.FDraw简介
2.FDraw的安装步骤
2、基于MFC的应用程序框架
1.利用AppWizard为FDraw生成应用程序框架
2.FDraw项目的观察
3、生成文档-视图
4、构造基本界面
5、对话框的设计与实现
6、视图的分割与滚动
7、打印与打印预览
8、联机帮助的实现
体
会
和
收
获
2、思考题的解答
1)、分析CFDrawView类的OnLButtonUp,OnLButtonDown,和OnMouse,Move的消息处理流程,说明FDraw是如何通过鼠标进行绘图的。
答:
对于FDraw而言,用户将在成员函数中填写初始笔画绘图、种植笔画绘图、当鼠标按键按下时的绘图代码。
通过消息映射来调用OnLButtonDown成员函数。
该函数以一个新画笔开始,添加鼠标当前位置到笔画中,并将笔画加入文档的笔画列表中,然后,OnLButtonDown函数捕捉鼠标事件,知道函数左键释放时结束笔画。
初始笔画绘图是OnLButtonDown函数,终止笔画绘图是OnLButtonUp函数,当鼠标按键按下时绘图为OnLButtonUp函数。
2)、什么是设备坐标?
什么是逻辑坐标?
两者之间通过什么函数转换?
答:
在Windows中,文档坐标系列称为逻辑坐标系,试图坐标系称为设备坐标系。
逻辑坐标按照坐标设置方式(有称为映射模式)可分为8种,一般使用的映射模式是MM_TEXT,这也是默认设置,在该模式下,坐标原点在工作区左上角,而x坐标值是向右递增,y坐标值是向下递增,单位值1代表1像素。
设备上下文类CDC提供了两个成员函数LPToD和PDPToLP完成逻辑坐标和设备坐标之间的转换工作。
如其名称,LPToDP将逻辑坐标转换为设备坐标。
DPToLP将设备坐标转换为逻辑坐标。
3)、以成员函数CFDrawDoc:
:
OnPenWidths的实现为例,说明MESSAGE_MAP中ON_COMMAND(ID_PEN_WIDTHS,OnPenWidth)语句的含义是什么?
4)、什么是串行化?
FDraw如何实现绘图笔画的串行化?
答:
MFC中默认的I/O实现称为“串行化”,它是用于在工作任务和程序之间会话时保证文档数据的一致性的一种机制。
框架程序代码自动提供
5)、分析成员函数CStroke:
:
FinishStroke的流程,说明m_rectBounding的作用是什么?
UpdateAllViews的作用是什么?
该成员函数和CFDrawView:
:
OnUpdate有什么关系?
3FDraw的测试
4总结
在为期两周的VC++实训中,我发现了很多的问题,同时也学到很多的东西。
我基本把第一、二、三章的程序都演示了一遍,有时候输出的结果与预想的结果不一样,但是在不断的调试与运行中,发现问题,最终解决问题。
重点:
1、分支语句和循环语句的嵌套使用。
(FOR语句和if语句的使用)
2.C++程序的基本框架(结构程序设计框架、面向对象程序结构框架等)。
3.能够使用VisualC++6.0集成开发环境编辑、编译、运行与调试程序,并掌握了快捷键的使用(包括运行(CTRL+F7)、编译(TRL+F5))。
4.C++运算符的种类、运算优先级和结合性。
5.能熟练掌握C++表达式类型及求值规则(赋值运算,算术运算符和算术表达式,关系运算符和关系表达式,逻辑运算符和逻辑表达式,条件运算,指针运算,逗号表达式)。
6.掌握变量的定义与使用方法(变量的定义及初始化、全局变量、局部变量)
.函数的定义方法和调用方法。
2.函数的类型和返回值。
3.变量的作用域、生存周期和存储类别(自动、静态、存储器、外部)。
5.递归函数。
6.函数重载。
7.内联函数。
8.带有缺省参数值的函数。
能够使用格式控制数据的输入输出。
重难点:
1、指针与指针变量的概念,指针与地址运算符,指针与数组的结合和比较,以及基类指针与派生类指针的使用。
2、数组的定义、初始化和访问,了解多维数组的定义、初始化和访问。
3、指针的定义,引用
4、字符串与字符数组的区别于使用,并记住常用字符串函数(strlen,strcpy,strcat,strcmp,strstr等)的使用。
5、引用的基本概念,引用的定义与使用。
6、形式参数与实在参数,参数值的传递。
7、定义一个函数(有参数和无参数),实现其功能
8、继承和派生的方式
1.类的定义方式、数据成员、成员函数及访问权限(public,private,protected)。
2.对象和对象指针的定义与使用。
3.构造函数、析构函数。
4.静态数据成员与静态成员函数的定义与使用方式。
5.常数据成员与常成员函数。
6.This指针的使用。
7.友元函数和友元类。
8.对象数组与成员对象。
【回顾实训过程做了哪些工作,在这个过程中遇到了哪些问题,解决方案是什么,通过实训掌握了哪些关键技术,有哪些收获和体会,对实训有哪些意见和建议。
总结字数要求:
500以上字】
排版说明:
1.请勿修改本文档的页面属性,如页边距等,需到需要修改的格式,可找类似的格式,用格式刷刷一下即可;
2.对表格式的格式不需要修改,对需要增加的表格,可用复制粘贴去增加表格;
3.实训内容和体会与收获单元格中的文本的排版信息是:
中文用楷体,西文是ArialNarrow,字体为5号字,单倍行距,两端对齐,首行缩进2个字符,段前段后均为0。
(以上信息已经设置好,默认即可);
4.整个实训报告不少于15页,也不超过25页。
5.提交报告时删除总结以下提示内容