面向对象程序设计——实验指导书

面向对象程序设计——实验指导书

ID:34055231

大小:983.37 KB

页数:29页

时间:2019-03-03

面向对象程序设计——实验指导书_第1页
面向对象程序设计——实验指导书_第2页
面向对象程序设计——实验指导书_第3页
面向对象程序设计——实验指导书_第4页
面向对象程序设计——实验指导书_第5页
资源描述:

《面向对象程序设计——实验指导书》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、实验编号▁▁▁▁▁▁▁▁▁华中科技大学实验指导书所属课程:面向对象程序设计实验名称:图形编辑器面向专业:自动化学院各专业实验室名称及地点:自动化学院实验教学中心院系:自动化学院编写者:王卓黎云2014年7月18日一.实验目的:1.针对课堂上所学到的C++的重要性质,利用封装、继承、虚函数和多态性等特性,对各类图元的属性和方法进行封装;2.学习Microsoft的VisualC++编程工具,了解编译、链接等过程,以及相关的工作区、工程设置等参数设置问题;3.掌握MFC的基本编程框架,熟悉MFC的类层次结构、MFC程序的初始化过程、RTTI技

2、术、DynamicCreation(动态创建)技术、MessageMapping(消息映射)机制、CommandRouting(命令传递)原理;4.掌握基本的文件保存、文件读取以及文件操作封装技术;二.实验所含内容:1.对象封装实验2.对象继承实验3.this指针实验4.虚函数与多态性实验5.MFC类层次结构6.MFC程序的初始化过程7.RTTI(运行时类型识别)8.DynamicCreation(动态创建)9.MessageMapping(消息映射)机制10.CommandRouting(命令传递)原理11.文件保存、文件读取以及文件操

3、作封装技术12.图形编辑器设计三.实验所用仪器、设备:名称规格备注PentiumIII800以上1计算机256M内存2操作系统Windows2000/XP3开发集成环境VisualC++6.0四.实验原理图及说明1(1)对象封装实验Date类Private:Public:Year;SetDate()Month;IsLeapYear()Day;Protected:Print()图1Date类的对象封装示意图(2)对象继承实验图2公有继承与私有继承的访问权限(3)this指针实验this指针指向调用对象本身。(4)虚函数与多态性实验为了达到动

4、态绑定的目的(后期绑定)的目的,C++编译器通过某个表格,在执行期“间接”调用实际上欲绑定的函数(注意“间接”这个字眼)。这样的表格成为虚函数表(常被称为vtable)。每一个“内含虚函数的类”,编译器都会为它做出一个虚函数表,表中的每一个元素都指向一个虚函数的地址。此外,编译器当然也会为类加上一项成员变量,是一个指向该虚函数表的指针(常被称为vptr)。举个例子:classClass1{public:2data1;data2;memfunc();virtualvfunc1();virtualvfunc2();virtualvfunc3(

5、);};Class1对象实例在内存中占据这样的空间:Class1对象实例vtablevptr(*vfunc1)()Class1::vfunc1()classClass1{m_data1(*vfunc2)()Class1::vfunc2()public:data1;m_data2(*vfunc3)()Class1::vfunc3()data2;memfunc();virtualvfunc1();virtualvfunc2();virtualvfunc3();};图3基类的虚函数表C++类的成员函数,你可以想象就是C语言中的函数。他只是被编译

6、器改过名称,并增加一个参数(this)指针,因而可以处理调用者(C++对象)中的成员变量。所以,你并没有在Class1对象的内存块中看到与成员函数有关的任何东西。每一个由此类派生出来的对象,都有这么一个vptr。当我们通过这个对象调用虚函数时,事实上通过vptr找到虚函数表,再找出虚函数的真正地址。奥妙在于这个虚函数表以及这种间接调用方式。虚函数表的内容是依据类中的虚函数声明次序,一一填入函数指针。派生类会继承基类的虚函数表(以及所有其它可以继承的成员),当我们在派生类中改写虚函数时,虚函数表就受到了影响:表中元素所指的函数地址将不再是基

7、类的函数地址,而是派生类的函数地址。看看这个例子:classClass2:publicClass1{public:data3;memfunc();virtualvfunc2();};3classClass1{public:data3;memfunc();virtualvfunc2();};vtablevptr(*vfunc1)()Class1::vfunc1()m_data1(*vfunc2)()Class2::vfunc2()m_data2(*vfunc3)()Class1::vfunc3()Class2对象实例Class2::memf

8、unc()图4派生类的虚函数表于是,一个“指向类Class1对象”的指针,所调用的vfunc2就是Class1::vfunc2,而一个“指向类Class2对象”的指针,所调用的vfunc2就是

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。