




已阅读5页,还剩19页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象程序设计(C+版)实验指导书西南交通大学信息科学与技术学院2009年第20页面向对象程序设计实验指导书前 言为了进一步加强和规范信息科学与技术学院本科学生面向对象程序设计的实践环节,特编写该实验指导书。该指导书配合面向对象理论与实践(文登敏,西南交通大学出版社,2005年6月第一版)教材使用,以C+语言作为背景,以VC+6.0作为实践环境。实验共分10次,约需实践(上机)时间20-24小时。前9次平均时间2小时,实验10需要4-6小时。在10个实验中,实验1为环境熟悉结合环境编写和改写基于控制台的程序,并实现一个windows基于对话框的示例。实验2为C+基础,主要涉及到new/delete、函数重载和引用数据类型方面。实验3到实验7是面向对象的核心部分,关系到封装、继承和多态三大机制和组合机制。实验8与运算符重载相关,通过该实验能够使学生深入领会C+中运算符重载的精髓,以及通过结果分析进一步理解函数调用过程、对象运算过程以及临时对象的创建和撤销的内部实现机制。实验9是一个DLL组件封装的例子,可以为今后实现类封装奠定基础。实验10是一个综合性实验,结合一个人事管理系统的逐步设计和实现,使学生能够认识到如何采用面向对象程序设计方法编写一个能够快速适应需求变化的软件。为了使学生能够充分理解面向对象的精髓,本指导书并未要求编写的程序是基于控制台的还是基于windows的,甚至是建议采用控制台程序设计,以避免过多地引入其它环境方面的内容从而影响实验的效果。每个实验都给出了实验报告的大致需求,通常都要求给出相应的源代码、运行结果及其对应关系。如果可能的话,建议在实验报告中给出实现的过程以及实验的感受。本指导书是在往届课内实验的基础上总结而成。随着时间的推移和技术的进步,相信还会在此基础上增减内容。目 录前 言I实验1熟悉环境11.1 目的和要求11.2 实验内容及参考过程11.2.1 创建控制台工程11.2.2 修改控制台程序11.2.3 创建windows工程11.3 实验报告2实验2C+基础32.1 目的和要求32.2 实验内容及参考过程32.2.1 函数32.2.2 new/delete32.2.3 引用42.3 实验报告4实验3类封装53.1 目的和要求53.2 实验内容53.2.1 基础定义及函数53.2.2 定义要求53.2.3 主函数53.2.4 运行程序分析结果63.3 实验报告6实验4单继承74.1 目的和要求74.2 实验内容74.2.1 创建子类74.2.2 定义要求74.2.3 主函数74.2.4 运行程序分析结果74.3 实验报告7实验5多继承85.1 目的和要求85.2 实验内容85.2.1 创建子类85.2.2 定义要求85.2.3 主函数85.2.4 运行程序分析结果85.2.5 虚继承85.3 实验报告9实验6组合106.1 目的和要求106.2 实验内容106.2.1 创建部分类和整体类106.2.2 主函数106.3 实验报告10实验7多态与虚函数117.1 目的和要求117.2 实验内容117.2.1 定义父类和子类117.2.2 主函数117.3 实验报告11实验8运算符重载128.1 目的和要求128.2 实验内容128.3 实验报告12实验9DLL组件139.1 目的和要求139.2 实验内容139.2.1 创建DLL工程139.2.2 创建界面139.2.3 创建调用DLL的程序139.3 实验报告13实验10综合应用1410.1 目的和要求1410.2 实验内容1410.3 实验过程1410.3.1 创建工程1410.3.2 设计思路1410.3.3 代码封装及移植1510.3.4 需求第一步1610.3.5 需求第二步1610.3.6 需求第三步1610.3.7 需求第四步1610.4 实验报告16面向对象程序设计实验指导书实验1 熟悉环境1.1 目的和要求l 熟悉VC+6.0集成开发环境l 能够编写简单控制台程序并运行产生相应结果l 能够编写基于对话框的简单windows程序并运行产生结果1.2 实验内容及参考过程1.2.1 创建控制台工程l 运行VC+6.0运行环境l 创建基于控制台的应用程序工程l 选择“Hello World!”程序l 直接运行,产生结果l 退出运行环境。1.2.2 修改控制台程序l 打开运行环境l 打开上次创建的工程l 找出源文件l 加入头文件iostream.hl 将程序中的printf(Hello World!n);修改成cout”Hello 你自己的名字!”endl;l 运行并产生结果。l 关闭当前工作空间1.2.3 创建windows工程l 新建一个MFC AppWizard(EXE)工程。l 创建的应用程序类型选择基本对话框(Base Dialog)l 完成之后,双击窗口上的“确定”(OK)按钮,进入源程序l 将OnOK函数修改成以下代码段(屏蔽CDialog:OnOK();语句):MessageBox(”Hello 你的名字!”, “实验1”);l 运行,单击确定(OK)按钮,观察结果。l 单击取消按钮(Cancel),退出运行。l 在界面上增加感兴趣的控件,并编程实现之(选)。1.3 实验报告l Hello World程序的源代码和运行结果l 修改后的控制台程序源代码和运行结果l Windows程序OnOK函数源代码及运行结果界面截图l 其它的程序修改和运行结果(选)l 结果分析及实验感受实验2 C+基础2.1 目的和要求l 掌握C+函数重载及缺省参数的使用l 掌握new和delete的用法l 掌握引用数据类型及其用法2.2 实验内容及参考过程2.2.1 函数l 打开控制台工程(或创建新的控制台工程)l 确保头文件中包含了iostream.hl 编写以下四个函数:void MyFunc( ) cout”无参数函数调用”endl;void MyFunc( int a) cout”1个整型参数函数调用”aendl;void MyFunc( int a, int b) cout”2个整型参数函数调用”a”,”bendl;long MyCaculate(long a=10,long b=20)couta”,”bendl; return a*a+b*b;l 在主函数main中加入以下调用语句:MyFunc( );MyFunc( 10 );MyFunc( 10, 20 );coutMyCaculate( )endl;coutMyCaculate( 1 )endl;coutMyCaculate( 1, 2 )endl;l 运行并产生结果。分析结果。2.2.2 new/deletel 再增加一个函数:void TestNew( )int *p;p=new int2000;if(p) for(int i=0;i1000;+i) pi=i;delete p;l 在主函数的最后增加以下循环语句:for (int i=0;i100000;+i) TestNew();l 运行,观察机器内存和CPU占用率变化情况(在任务管理器中查看)。l 退出运行,屏蔽TestNew函数中的delete p;语句。l 再次运行程序,观察机器内存和CPU占用率变化情况。l 退出运行。l 对比有无delete p语句的机器资源占用情况,分析。2.2.3 引用l 再增加一个结构和函数定义:struct S_Bigint a20000;char c80000;void TestRef(S_Big x)l 将主函数修改成以下内容(原有内容屏蔽,但不要删除):S_Big a;for (int i=0;i200000;+i) TestRef(a);l 运行(注意记录大致运行时间)。l 将TestRef函数的形式参数x修改成&xl 再次运行程序,记录运行时间。l 退出程序,分析两者时间差。2.3 实验报告l 函数实验的源代码和运行结果分析l new/delete实验的源代码和运行结果对比分析l 引用实验的源代码和运行结果对比分析实验3 类封装3.1 目的和要求l 掌握类定义方法,包括数据成员和函数成员的定义方法l 掌握对象的创建及其使用l 掌握构造函数和析构函数的定义与使用l 掌握this指针、static成员和友元的定义与使用l 简单的运算符重载函数定义与使用3.2 实验内容3.2.1 基础定义及函数定义一个PERSON类,包括:私有数据成员:姓名指针,年龄,身高,性别,人数(static),外部函数友元一般函数成员:修改与获取数据成员的函数赋值运算符重载成员函数:实现对象赋值构造函数与析构函数:缺省构造函数、一般构造函数、拷贝构造函数、析构函数外部函数:PERSON对象加法运算符重载函数3.2.2 定义要求姓名成员为指针类型。在构造函数中分配相应的空间,在析构函数中释放该空间。采用两种方式定义成员函数(内联方式和非内联方式)加法运算符重载函数为对象和整数相加,更新年龄。赋值运算符成员函数返回当前对象。每个成员函数和加法运算符重载函数均需要输出相应的信息,以确定其调用情况。3.2.3 主函数确保每个函数(包括构造函数、析构函数和外部函数)都至少被调用一次。采用不同方式创建对象(静态有名对象和动态无名对象)。每次创建或释放对象之后都应及时输出当前已创建的PERSON对象的个数。3.2.4 运行程序分析结果给出完整的程序代码、运行结果。每个输出结果产生的原因(代码段)。3.3 实验报告l 检查以下要求完整性:n 类定义n 私有成员的数量和要求n 函数成员的数量和要求n 类内定义成员函数(内联)n 类外定义成员函数(非内联)n static成员n 友元n this指针n 外部加法运算符重载函数n 创建静态有名对象(调用不同的构造函数)n 创建动态无名对象(调用不同的构造函数)n 释放动态无名对象n 每个函数的输出n 构造函数中的动态存储分配和static成员的处理n 析构函数中的动态存储释放和static成员的处理l 完整的源程序代码和运行结果l 每个运行结果与源程序代码的对应关系l 访问对象私有成员所产生的错误信息l 创建对象时提供的参数与构造函数不匹配时所产生的错误信息l 实验结果分析报告3.4 代码样例l 下面给出实验3的代码样例,以供参考。#include stdafx.h#include iostream.h#include string.hclass PERSONchar *name;int age;int height;bool gender;static int counter;public:friend PERSON operator+(const PERSON &a,int b);PERSON()name=0;age=0;height=0;counter+; coutPERSON()endl;PERSON(char *n,int a,int h,bool g);PERSON(const PERSON &p);PERSON operator=(const PERSON &p);PERSON()coutPERSONendl;if(name) delete name;if(counter) counter-;void setname(char *n)coutsetnameendl;if(name) delete name;name=new charstrlen(n)+1;if(name)strcpy(name,n);namestrlen(n)=0;void setage(int a)coutsetageendl;age=a;void setgender(bool g)coutsetgenderendl;gender=g;void setheight(int h)coutsetheightendl;height=h;char *getname()coutgetnameendl;if(name)return name;elsereturn NONAME;int getage()coutgetageendl;return age;int getheight()coutgetheightendl;return height;bool getgender()coutgetgenderendl;return gender;static int getcounter()coutgetcounterendl;return counter;PERSON:PERSON(char *n,int a,int h,bool g)coutPERSON(char *n,int a,int h,bool g)endl;name=new charstrlen(n)+1;if(name)strcpy(name,n);namestrlen(n)=0;age=a;height=h;gender=g;counter+;PERSON:PERSON(const PERSON &p)coutPERSON(const PERSON &p)endl;if()name=new charstrlen()+1;if(name)strcpy(name,);namestrlen()=0; else name=0;age=p.age;height=p.height;gender=p.gender;counter+;PERSON PERSON:operator=(const PERSON &p)coutoperator=endl;if(name) delete name;if()name=new charstrlen()+1;if(name)strcpy(name,);namestrlen()=0;else name=0;age=p.age;height=p.height;gender=p.gender;return *this;PERSON operator+(const PERSON &a,int b)coutoperator+endl;PERSON result;result.age=a.age+b;return result;int PERSON:counter=0;void main()coutcounter:PERSON:getcounter()endl;PERSON a1;coutcounter:PERSON:getcounter()endl;PERSON a2(zhangsan,18,175,true);coutcounter:PERSON:getcounter()endl;PERSON a3=a2;coutcounter:PERSON:getcounter()endl;PERSON a4(a2);coutcounter:PERSON:getcounter()endl;PERSON *p1,*p2,*p3;a1=a2;a1.setname(zhangsi);a1.setage(19);a3.setgender(false);a4.setheight(182);p1=new PERSON;coutcounter:PERSON:getcounter()endl;p2=new PERSON(Lisi,20,150,false);coutcounter:PERSON:getcounter()endl;p3=new PERSON(*p2);coutcounter:PERSON:getcounter()endl;*p3=*p3+2;*p2=*p1+1;couta1.getname()endl;couta2.getage()endl;couta3.getheight()getgender()coutMaleendl;elsecoutFemaleendl;delete p1;coutcounter:PERSON:getcounter()endl;delete p2;coutcounter:PERSON:getcounter()endl;delete p3;coutcounter:PERSON:getcounter()run( );CmyApp( ) delete p; ;l 主函数定义如下例。需要注意到,无论需求如何变化,主函数无需变化。int main(int argc, char* argv)CmyApp Myc;Myc.run( );return 0;l 作为例子,首先定义一个基本信息类CBase1,只包括姓名信息和年龄信息:class CBase1:public CBasechar name20;int age;public:CBase1(char *n,int a)strcpy(name,n);age=a;void run( ) coutname”,”ageendl; char *getname()return name;int getage()return age;l 将应用类中的XXX修改成CBase1(“zhangsan”,18),运行程序观察结果。l 随着需求的不断变化,人事管理系统中所需要的个人信息不断增多,此时,不需要修改CBase1类的结构,而只需要从CBase1类再派生一个新类如下:class CBase2:public CBase1int height;public:CBase2(char *n,int a,int h):CBase1(n,a)height=h;void run() coutgetname()”,”getage()”,”heightendl; int getheight()return height;l 再将应用类中的XXX修改成CBase2(“zhangsan”,18,175),而后运行观察结果。l 以此类推,该系统适应需求的变化,只需要在原来已有类的基础上派生出一个新类,重写相应的run( )方法,之后再将应用类中的
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 高三试卷:江浙皖高中(县中)发展共同体2024-2025学年高三上学期10月联考数学试题
- 二零二五年度物联网设备购销合同物联网应用
- 二零二五年度房屋买卖垫资借款及贷款利率调整合同
- 二零二五年度工人工资支付与环境保护合同
- 2025版离婚后共同财产分割及债务处理三方协议书
- 二零二五年度电动四轮车总代理服务合同样本
- 二零二五年度稻谷种植保险代理服务合同
- 二零二五年度创新型科技公司股权投资合同范本
- 二零二五年度鲜活海鲜冷链物流运输合同
- 2025版农业产业链无息贷款合作协议范本
- 办公室文秘岗试题带答案
- 2025年河南疾控中心考试题库
- 2025年【高压电工】模拟试题及答案
- 养老护理员竞赛理论试卷答案(含答案)
- 2025年四川省能源投资集团有限责任公司人员招聘笔试备考题库及答案详解(新)
- 2025年国家工业信息安全发展研究中心招聘考试笔试试题
- 广东省公路服务区管理系统升级及运维项目
- 2024年泰山文化旅游集团有限公司权属企业招聘真题
- 学术刊物管理办法
- 造林后续管理办法
- 《房地产估价》课件
评论
0/150
提交评论