《面向对象的编程技术》实验指导书.docx
- 文档编号:5571614
- 上传时间:2023-05-08
- 格式:DOCX
- 页数:25
- 大小:41.14KB
《面向对象的编程技术》实验指导书.docx
《《面向对象的编程技术》实验指导书.docx》由会员分享,可在线阅读,更多相关《《面向对象的编程技术》实验指导书.docx(25页珍藏版)》请在冰点文库上搜索。
《面向对象的编程技术》实验指导书
《面向对象编程技术》
实验指导书
安徽工业大学计算机学院
2011年3月
目录
《面向对象编程技术》实验指导书说明1
实验一、C++开发环境应用入门(2学时)(选做)5
实验二、简单程序设计(2~4学时)6
实验三、函数的应用(2学时)(选做)8
实验四、类与对象(2学时)10
实验五C++程序的结构(2学时)12
实验六数组、指针与字符串(2学时)14
实验七、继承与派生(一、二)4学时15
实验八、多态性4学时16
附录1试验报告参考格式40
《面向对象编程技术》实验指导书说明
一、实验目的:
C++是当今最流行的高级程序设计语言之一,应用十分广泛。
它也是一门复杂的语言,与C语言兼容,既支持结构化的程序设计方法,也支持面向对象的程序设计方法。
本课程的目的在于通过试验,让学生掌握用VisualC++6集成开发环境编写和调试程序。
掌握C++语言的概念、语法规则和编程方法,理解结构化的程序设计和面向对象程序设计的基本思想,会用结构化的程序设计和面向对象的程序设计方法,培养开发具有一定难度程序的编程能力。
二、适应专业:
计算机科学和技术、软件工程、网络工程专业
三、实验学时数:
16学时
四、实验内容及学时安排:
试验一:
C++开发环境应用入门
试验目的:
熟悉C++编程环境,如VisualC++6.0或C++builder5.0
学时数:
1学时
实验内容:
学习使用VisualC++的开发环境,学会编写简单C++程序并且编译、调试、运行。
要求:
熟悉基本C++编程环境,学会基本编程、调试手段。
实验二、简单程序设计
试验目的:
熟悉C++编程过程,学会用标准设备输入和输出数据。
学时数:
1学时
试验内容:
1.学会编写简单的C++程序。
2.练习使用简单的输入输出。
要求:
编写程序实现C++环境下简单的输入输出。
试验三:
函数的应用(选做)
试验目的:
通过试验理解重载函数的意义,重载函数的定义和使用,带默认参数值的函数。
学时数:
1学时
实验内容:
1.掌握函数的定义和调用方法。
2.练习重载函数使用。
3.带默认参数值函数的定义和使用。
4.练习使用系统函数。
要求:
定义并测试重载函数,使用C++系统预定义的函数,测试带默认参数值的函数。
实验四:
实验四、类与对象
试验目的:
掌握类的定义格式,类的与对象使用,构造函数的基本功能。
学时数:
2学时
实验内容:
1.掌握类的定义和使用
2.掌握类的定义和对象的声明
3.复习具有不同访问属性的成员的访问方式。
4.察构造函数和析构函数的执行过程。
5.使用DEBUG来调试程序,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。
要求:
定义类,使用该类的对象,包括构造函数和析构函数,拷贝构造函数。
实验五:
C++程序的结构
试验目的:
通过具体程序理解变量的作业域、生成期、可见性等概率,理解静态成员的定义和使用。
学时数:
2学时
实验内容:
1.观察程序运行中变量的作用域、生存期和可见性。
2.学习类的静态成员的使用。
3.学习多文件结构在C++程序中的使用。
要求:
编程使用静态数据成员和静态函数成员。
实验六:
数组、指针与字符串
试验目的:
掌握面向对象中指针的新用法。
学时数:
2学时
实验内容:
1.学习使用数组。
2.学习字符串数据的组织和处理。
3.学习标准C++库的使用。
4.掌握指针的使用方法。
5.练习通过debug观察指针的内容及其所指的对象的内容。
6.练习通过动态内存分配实现动态数组,并体会指针在其中的作用。
7.尝试使用字符数组和标准C++函数库、类库练习处理字符串的方法。
要求:
掌握指针与类、对象的用法,字符、字符串的存储与运算。
实验七:
继承与派生(一、二)
试验目的:
掌握继承的定义和使用
学时数:
4学时
实验内容:
1.学习定义和使用类的继承关系,定义派生类。
2.熟悉不同继承方式下对基类成员的访问控制。
3.学习利用虚基类解决二义性问题
要求:
建立类的继承结构,使用派生类的成员和基类的成员,通过虚基类解决二义性问题。
实验八:
多态性2学时
试验目的:
理解多态的两种表现形式:
运算符重载和虚函数。
学时数:
4学时
实验内容:
1.掌握运算符重载的方法
2.学习使用虚函数实现动态多态性。
要求:
程序实现重载某些特定的运算符,如++、--;定义虚函数实现多态。
五、教材及参考文献
1.《C++语言程序设计》郑莉等编著(第三版)清华大学出版社2003.10
2.《C++编程思想》候捷译机械工业出版社2002.10
3.《VisualC++面向对象与可视化程序设计》黄维通清华大学出版社2003.12
六、实验环境
实验要求如下环境
Windows9x,2000,XP;VisualC++6.0
七、成绩考核
上机实验考核采取实验报告和上机抽查检验相结合的方式。
每次实验结束后都写出实验报告。
八.实验报告
按《面向对象编程技术》实验报告书”格式要求,在规定时间内完成并上交。
实验一、C++开发环境应用入门(2学时)(选做)
1、实验目的
了解C++开发工具的特点
熟悉C++开发环境
学习用C++编写标准的C++程序
2、实验任务
使用C++来建立一个非图形化的标准C++程序,编译、运行下例程序:
#include
voidmain(void)
{
cout<<”Hello!
\n”;
cout<<”WelcometoC++!
\n”;
}
3、实验步骤
启动VisualC++或C++Builder开发环境
创建一个项目
单击File菜单中的New选项,显示示新建对话框
选择ConsoleWizard(C++Builder)或Win32ConsoleApplication(VC++)。
选择项目所在路径及输入项目的名称
依次按‘下一步’直至完成为止。
至此,C++Builder已经建立好工程相关的文件(请不要随意更改其自动生成的文件),在生成的main函数中写入必要的内容即可。
对于VC,请继续下面的步骤:
建立C++源程序文件
a)选选菜单命令Project|AddtoProject|New,弹出New对话框
b)在New对话框的Files选项卡中选择C++SourceFile,并填入文件名称,单击OK按钮,完成新建C++源程序文件
编辑C++源程序文件
在文件编辑窗口中输入代码
完成后,选择菜单File|Save保存这个文件
建立并运行可执行程序
选择菜单命令Build,建立可执行程序
如果你正确输入了源程序,此时便成功地生成了可执行程序。
如果程序有语法错误,则屏幕下方的状态窗口中会显示错误信息,根据这些错误信息对源程序进行修改后,重新选择菜单命令Build建立可执行程序。
选择菜单命令Run,运行程序,观察屏幕显示内容。
关闭工作空间
选择菜单命令File|ColseWorkSpace关闭工作空间。
实验二、简单程序设计(2~4学时)
1、实验目的:
学会编写简单的C++程序。
练习使用简单的输入输出。
观察关文件的作用。
学会使用DEBUG调试程序。
2、实验任务:
(1)输入并运行教材《C++语言程序设计》中的例题2-7,即:
用do-while语句编程,求自然数1~10之和。
程序正确运行之后,去掉源程序中的#include语句,重新编译,观察会有什么问题。
do-while语句用for语句代替,完成相同的功能。
程计算图形的面积。
程序可计算圆形、长方形、正方形的面积,运行时先提示用户选择图形的类型,然后,对圆形要求用户输入半径值,对长方形要求用户输入长和宽的值,对正方形要求用户输入边长的值,计算出面积后将其显示出来。
使用debug调试功能观察程序运行中变量值的变化情况。
定义一个表示时间的结构体,可以精确表示年、月、日、小时、分、秒;提示用户输入年、月、日、小时、分、秒的值,然后完整地显示出来。
3、实验步骤
建立一个控制台应用程序项目lab2_1,向其中添加一个C++源文件lab2_1.cpp,输入教材《C++语言程序设计》中例2-7的代码,检查一下确认没有输入错误,选择菜单命令编译源程序,再选择Execute运行程序,观察输出是否与教材中的答案一致。
程序正确运行之后,在源程序第一行”#include
另建立一个项目lab2_2,包含一个C++源程序lab2_2.cpp,将do-while语句用for语句代替,完成与实验任务1相同的功能。
建立项目lab2_3,计算图形面积。
圆形的面积计算公式为S=PI*r*r,长方形的面积计算公式为S=a*b,正方形的面积市场计算公式为S=a*a。
程序中定义一个整型变量iType表示图形的类型,用cout语句输出提示信息让用户选择图形的型,用cin读入iType的值,然后,使用switch语句判断图形的类型,分别提示用户输入需要的参数值,计算出面积的值后用cout语句显示出来。
最后编译运行程序。
学习简单的debug调试功能,参考程序如下:
//lab2_3.cpp
#include
constfloatPI=3.1416;
voidmain()
{
intiType;
floatradius,a,b,area;
cout<<”图形的类型?
(1为圆形,2为长方形,3为正方形):
”;
cin>>iType;
switch(iType)
{
case1:
cout<<“圆的半径为:
”;
cin>>radius;
area=PI*radius*radius;
cout<<”面积为”<
break;
case2:
cout<<”矩形的长为:
”;
cin>>a;
cout<<”矩形的宽为:
”;
cin>>b;
area=a*b;
cout<<”面积为:
”<
break;
case3:
cout<<”正方形的边长为:
”;
cin>>a;
area=a*a;
cout<<”面积为:
”<
break;
default:
cout<<”不是合法的输入值!
”< } } 选在第10行处设置调试断点。 用鼠标左键单击源程序第10行左边的空白处,出现一个菜单。 择Insert|RemoveBreakpoint选项,可看到左边的边框上出现一个褐色的圆点,这代表已经在这里设置了一个断点。 后选择菜单命令Build|StartDebug|Go,系统统进入Debug状态,程序开发运行,并停在断点处。 D)单步执行,并观察程序中相应变量的变化情况。 实验三、函数的应用(2学时)(选做) 1、实验目的: 掌握函数的定义和调用方法。 练习重载函数使用。 练习函数模板的使用 练习使用系统函数。 2、实验任务: 编写一个函数把华氏温度转换为摄氏温度,转换公式为: C=(F-32)*5/9。 编写重载函数Max1可分别求取两个整数,三个整数,两个双精度数,三个双精度数的最大值。 使用重函数模板重新实现上小题中的函数Max1。 使用系统函数pow(x,y)计算xy的值,注意包含头文件math.h。 用递归的方法编写函数求Fibonacci级数,观察递归调用的过程。 3、实验步骤 编写函数floatConvert(floatTempFer),参数的返回值都为float类型,实现算法C=(F-32)*5/9,在main()函数中实现输入、输出。 程序名为lab3_1.cpp. 分别编写四个同名函数max1,实现函数重载,在main()函数中测试函数功能。 程序名: lab3_2.cpp。 使用函数模板实现求任意类型数的最大值,针对不同的参数个数,编写两个同名函数模板max1,其参数个数不同,实现函数重载,在main()函数中测试函数的功能。 和序名: lab3_3.cpp。 在main()函数中提示输入两个整数x,y,使用cin语句得到x,y的值,调用pow(x,y)函数计算x的y次幂的结果,再显示出来。 程序名: lab3_4.cpp。 编写递归函数intfib(intn),在主程序中输入n的值,调用fib函数计算Fibonacci级数。 公式为fib(n)=fib(n-1)+fib(n-2),n>2;fib (1)=fib (2)=1。 使用if语句判断函数的出口,在程序中用cout语句输出提示信息。 程序名: lab3_5.cpp。 使用debug中的StepInfo追踪到函数的内部,观察函数的调用过程,参考程序如下: //lab3_5 #include intfib(intn); intmain() { intn,answer; cout<<”Enternumber: ”; cin>>n; cout<<”\n\n”; answer=fib(n); cout< return0; } intfib(intn) { if(n<3)return1; elsereturnfib(n-2)+fib(n-1); } 7)调试操作步骤如下: 选择菜单命令Build|StartDebug|StepIn,系统进入单步执行状态,程序开始运行,并出现一个DOS窗口,此时光标停在main()函数的入口处。 把光标移到语句answer=fib(n)前,从Debug菜单单击RunToCursor,在程序运行的DOS窗口中按提示输入数字10,这时回到可视界面中,光标停在第11行,观察一下n的值。 从Debug菜单中单击StepInto,程序进入fib函数,观察一下n的值,把光标移到语句return(fib(n-2)+fib(n-1))前,从Debug菜单单击RuntoCursor,再单击StepInto,程序递归调用fib函数,又进入fib函数,观察n的值。 继续执行程序,参照上述的方法,观察程序的执行顺序,加深对函数调用和递归调用的理解。 再试试Debug菜单栏中的别的菜单项,熟悉Debug的各种方法。 实验四、类与对象(2学时) 1、实验目的: 掌握类的定义和使用 掌握类的定义和对象的声明 复习具有不同访问属性的成员的访问方式。 察构造函数和析构函数的执行过程。 学习类的聚集使用方法。 使用DEBUG来调试程序,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。 2、实验任务 1)定义一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,有两个公有成员函数run、stop。 其中rank为枚举类型CPU_Rank,定义为enumCPU_Rank={P1=1,P2,P3,P4,P5,P6,P7},frequency为单位为MHz的整型数,voltage为浮点型的电压值。 观察构造函数和析构函数的调用顺序。 2)定义一个简单的Computer类,有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,cpu为CPU类的一个对象,ram为RAM类的一个对象,cdrom为CDROM类的一个对象,定义并实现这个类。 3)(选做)设计一个用于人事管理的People(人员)类。 考虑到通用性,这里只抽象出所有类型人员都具有的属性: number(编号)、sex(性别)、birthday(出生日期)、id(身份证号)等等。 其中“出生日期”定义为一个“日期”类内嵌子对象。 用成员函数实现对人员信息的录入和显示。 要求包括: 构造函数和析构函数、拷贝构造函数、内联成员函数。 3、实验步骤 首先定义枚举类型CPU_Rank,例如enumCPU_Rank{P1=1,P2,P3,P4,P5,P6,P7},再定义CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等私有数据成员,定义成员函数run、stop,用来输出提示信息,在构造函数和析构函数中也可以输出提示信息。 在主程序中定义一个CPU类的对象,调用其成员函数,观察类对象的构造与析构顺序,以及成员函数的调用。 程序名: lab4_1.cpp。 使用debug调试功能观察lab4_1.cpp的运行流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。 参考程序如下: //lab4_1.cpp #include enumCPU_Rank(P1=1,P2,P3,P4,P5,P6,P7); classCPU { private: CPU_Rankrank; Intfrequency; Floatvoltage; Public: CPU(CPU_Rankr,intf,floatv) { rank=r; frequency=f; voltage=v; cout<<”构造了一个CPU! ”< } ~CPU(){cout<<”析构了一个CPU! ”< CPU_RankGetRank()const{returnrank;} IntGetFrequency()const{returnfrequency;} FloatGetVoltage()const{returnvoltage;} VoidSetRank(CPU_Rankr){rank=r;} VoidSetFrequency(intf){frequency=f;} VoidSetVoltage(floatv){voltage=v;} VoidRun(){cout<<”CPU开始运行! ”< VoidStop(){cout< ”< }; voidmain() { CPUa(P6,300,2.8); Run(); Stop(); } (3)调试操作步骤如下: Build|StartDebug|StepInto命令,系统进行单步执行状态,程序开始运行,一个DOS窗口出现,此时光标停在main()函数的入口处; A)从Debug菜单栏中单击StepOver,此时,光标下移,程序准备执行CPU对象的初始化; B)单击StepInto,程序准备执行CPU类的构造函数; C)连续单击StepOver,观察构造函数的执行情况,直到执行完构造函数,程序回到主函数; D)此时程序准备执行CPU对象的run()函数,单击StepInto,程序进入run()成员函数,连续单击StepOver,直到回到main()函数; E)继续执行程序,参照上述的方法,观察程序的执行顺序,加深对类的构造函数、析构函数、成员函数的执行顺序的认识; F)再试Debug菜单栏中的别的菜单项,熟悉Debug的各种方法。 G)选定义CPU类、RAM类、CDROM类。 再定义Computer类: 定义私有数据成员cpu、ram、cdrom,定义公有成员函数run、stop,可在其中输出提标信息居主程序中定义一个Computer的对象,调用其成员函数,观察类对象及其成员变量的构造与析构顺序,以及成员函数的调用。 程序名: lab4_2.cpp。 (5)使用debug调试功能观察lab4_2.cpp程序的运行流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序,特别注意观察成员变量的构造与析构顺序。 实验五C++程序的结构(2学时) 一、实验目的 观察程序运行中变量的作用域、生存期和可见性。 学习类的静态成员的使用。 学习多文件结构在C++程序中的使用。 二、实验任务 1.运行下面的程序,观察变量x、y的值。 //lab5_1.cpp #include voidfnl(); intx=1,y=2; intmain() { count<<"Begin..."< count<<"x="< count<<"y="< count<<"Evaluatexandyinmain()..."< intx=10,y=20; count<<"x="< count<<"y="< count<<"Stepintofnl()..."< fnl(); count<<"Backinmain"< count<<"x="< count<<"y="< return0; } voidfnl() { inty=20; count<<"x="< count<<"y="< } 2.现客户机(CLIENT)类。 定义字符型静态数据成员ServerName,保存其服务器名称;整型静态数据成员ClientNum,记录已定义的客户数量;定义静态函数ChangeSeverName()改变服务器名称。 在头文件client.h中定义类,在文件client.cpp中实现,在test.cpp中测试这个类,观察相应的成员变量取值的变化情况。 三、实验步骤 1.运行程序lab5_1,观察程序输出。 全局变量的作用域为文件作用域,在整个程序运行期间有效,但如果在局部模块中定义了同名的变量,则在局部模块中,可见的是局部变量,此时,全局变量不可见;而局部变量的生存期只限于相应的程序模块中,离开相应的程序模块,局部变量x、y就不再存在,此时同名的全局变量重新可见。 2.新建一个空的项目lab5_2,添加头文件client.h,在其中定义类CLIENT,注意使用编译预处理命令;再添加原程序文件client.cpp,在其中实现CLIENT类,注意静态成员变量的使用方法,再添加文件lab5_2.cpp,在其中定义main()函数,测试CLIENT类,观察相应的成员变量取值的变化情况。 实验六数组、指针与字符串(2学时) 一、实验目的 学习使用数组。 学习字符串数据的组织和处理。 学习标准C++库的使用。 掌握指针的使用方法。 练习通过debug观察指针的内容及其所指的对象的内容。 练习通过动态内存分配实现动态数组,并体会指针在其中的作用。 分别使用字符数组和标准C++库练习处理字符串的方法。 二、实验任务 编写并测试3*3矩阵转置函数,使用数组保存3*3矩阵。 使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能。 编程实现两字符串的连接。 要求使用字符数组保存字符串,不要使用系统函数。 使用sting类定义字符串的连接。 要求使用字符数组保存字符串,不要使用系统函数。 定义一个Employee类,其中包括姓名、街道地址、城市和邮遍等
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向对象的编程技术 面向 对象 编程 技术 实验 指导书
![提示](https://static.bingdoc.com/images/bang_tan.gif)