版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象实验指导书编制人:江南适用:09网络编制时间:2023-1-30实验一VC++6.0开发环境及简朴程序设计(4学时)一、实验目的1.熟悉VisualC++6.0的开发环境,学习用VisualC++6.0编写标准的C++控制台程序。2.学会编写简朴的C++程序,涉及基本数据类型,运算符与表达式,基本控制结构,简朴输出。3.观测头文献的作用。<.h>以及usingnamespacestd;4.学会使用VC++6.0开发环境中的debug调试功能:单步执行、设立断点、观测变量值。掌握函数的定义和调用方法。5.练习重载函数的使用。6.练习通过动态内存分派实现动态数组,并体会指针在其中的作用;二、实验任务1.使用VisualC++建立一个非图形化的标准C++程序,编译、运营以下程序,比较两个程序的差别:#include<iostream>usingnamespacestd;voidmain(){cout<<"Hello!\n";cout<<"Welcometoc++!\n";}#include<iostream.h>voidmain(){cout<<"Hello!\n";cout<<"Welcometoc++!\n";}2.用do-while语句编程,求自然数1~10之和。程序对的运营之后,去掉源程序中#include语句,重新编译,观测会有什么问题。3.使用debug调试功能观测任务3程序运营中变量值的变化情况4.编写重载函数max可分别求取两个整数,三个整数,两个双精度数,三个双精度数的最大值。5.编写具有如下原型的函maxArr(),功能是在数组a的n个元素中找出最大值,返回该最大值数组元素的内存地址,并且再通过引用idx返回具有最大值元素在数组中的下标。int*maxArr(int*arr,intn,int&idx);编写主函数,调用maxArr(),以验证其对的性:voidmain(){inttestArr[10]={3,4,56,7,8,98,67,4,8,94}
;int*maxAddr,maxIdx
;maxAddr=maxArr(testArr,10,maxIdx)
;6.编写程序,通过指针配合new运算符动态生成一个二维数组,数组元素的值为该元素的行值和列值的和,最后输出该二维数组的每个元素。7.定义如下结构体:structitem{ intnum; item*next;}输入k个整数(k值也由键盘输入),将它们依次放入由结构体形成的链表(用new运算符生成链表项)中。再输入一个整数x,查找x在链表中第一次出现的位置(序号),若不存在,输出“不存在”。三、实验环节1.启动VisualC++6.0开发环境2.创建一个项目单击File菜单中的New选项显示New(新建)对话框。单击Projects标签,在Projects(项目)选项卡中,选择Win32ConsoleApplication(Win32控制台应用程序)。在Location(位置)文本框中指定一个途径,在PrejectName(项目名称)文本框中为项目输入一个名字,单击OK(拟定)按钮。在弹出的Win32ConsoleApplication-Step1of1对话框中选择AnEmptyProject单选项,然后单击Finish(完毕)按钮。最后在NewProjectInformation对话框中单击OK按钮,完毕项目的建立。3.建立C++源程序文献选择菜单命令Project|AddtoProject|New,弹出New对话框。在new对话框的Files选项卡中选择C++SourceFile,并填入文献名称,单击OK按钮,完毕新建C++源程序文献。4.编辑C++源程序文献内容,在文献编辑窗口中输入代码,并使用菜单命令File|Save保存这个文献。5.建立并运营可执行程序,选择菜单命令Build建立可执行程序。假如你对的输入了源程序,此时便成功地生成了可执行程序。假如程序有语法错误,则屏幕下方的状态窗口中会显示错误信息。根据这些错误信息对源程序进行修改后,重新选择菜单命令Build,建立可执行程序。选择菜单命令运营程序,观测屏幕的显示内容。6.关闭工作空间,选择菜单命令File|CloseWorkspace关闭工作空间。以上菜单命令功能也可以在工具栏中选择相应的工具实现。7.按照以上环节编2-6题,编译并运营。8.设立断点:用鼠标右键单击源程序中需要设立断点行左边的空白处,出现一个菜单,选择Insert/RemoveBreakpoint一项,可看到左边的边框上出现了一个褐色的圆点,这代表已经在这里设立了一个断点。所谓断点就是程序运营时的暂停点,程序运营到断点处便暂停,这样我们就可以观测程序的执行流程,以及执行到断点处时有关变量的值。进入Debug(调试)状态:选择菜单命令Build|StartDebug|Go,或按下快捷键F5,系统进入Debug(调试)状态,程序开始运营,并暂停在断点处。单步执行:从Debug菜单或Debug工具栏中单击StepOver选项或按钮两次。将把鼠标放在某变量名上半晌,可看到出现了一个提醒变量的值;此时,在Variables窗口中也可看该变量以及其他变量的值。单步执行时每次执行一行语句,便于跟踪程序的执行流程。因此为了调试方便,需要单步执行的语句不要与其它语句写在一行中。监视:在watch窗口中,在Name栏中输入需要监视的变量名,按回车键,可看到Value栏中出现相应的值(假如没看到Variables窗口或Watch窗口,可通过View菜单的DebugWindows|Variables或DebugWindows|Watch选项打开它们)。参照上述的方法,再试试Debug菜单栏中别的菜单项,熟悉Debug的各种方法。9.动态内存分派实现动态数组的实现:在int*maxArr(int*arr,intn,int&idx)中的参数中:第一个参数为int型指针arr,调用此函数时,相应实参为一维整型数组名;第三个参数为int型引用idx,调用时的相应实参为int型变量maxIdx,结果将放入该变量中带回到调用函数。其解决框架如下:idx=0;for(inti=1;i<n;i++) if(*(arr+i)>*(arr+idx)) …return…;10.运用cin>>row>>col;获得键盘输入,取得拟定的行、列值。通过“a=newint*[row];”,动态生成一组共row个“int*”指针空间,然后通过“a[i]=newint[col]”为每行动态生成col个“int”型数据的存储空间。访问上述动态生成的第i行第j列的int型存储空间时,可使用“*(*(a+i)+j)”、“*(a[i]+j)”或“a[i][j]”。11.通过使用结构体来“串联”起一个可以存放数据的动态链表,且该结构体的其中某一分量,即next必须为指向本结构体的指针。通过使用new运算符依次生成各动态链表项,并通过next指针将它们“串联”成为链表。然后遍历链表进行查询。四、实验分析 记录出现的问题以及解决方法,贴出最后运营结果。实验二类与对象(4学时)一、实验目的1.掌握类的定义和使用。2.掌握类的定义和对象的声明。3.复习具有不同访问属性的成员的访问方式。4.学习类的聚集使用方法。5.拷贝构造函数的使用6.运算符重载二、实验任务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)等等,有两个公有成员函数run、stop。cpu为CPU类的一个对象,ram为RAM类的一个对象,cdrom为CDROM类的一个对象,定义并实现这个类。将头文献和类实现文献分开。在主程序中定义一个Computer的对象,调用其成员函数,观测类对象及其成员变量的构造与析构顺序,以及成员函数的调用。3.运营下面程序,观测结果:#include<iostream.h>#include<string.h>classPerson{private: char*_name;public: Person(){_name=newchar[256];} voidSetName(constchar*name){ if(strlen(name)+1<256) strcpy(_name,name);} voidPrintName(){ cout<<_name<<endl;}};intmain(){ Personp1; p1.SetName("John"); p1.PrintName(); Personp2(p1); p2.PrintName(); p2.SetName("Alice"); p2.PrintName(); p1.PrintName(); return0;}然后为Person类添加一个析构函数,用于释放_name所占空间,再运营程序,分析错误因素,并修改程序使之正常运营。4.定义一个point类,其对象表达平面坐标上的一个点(x,y),并通过该类成员方式对该类重载二目运算符“+”和“^”,用来求出两个对象的和以及两个对象的距离。和定义如下:(1.2,-3.5)+(-1.5,6)=(-0.3,2.5)(1.2,-3.5)^(-1.5,6)=9.87623三、实验环节1.一方面定义枚举类型CPU_Rank,例如enumCPU_Rank{P1=1,P2,P3,P4,P5,P6,P7},再定义CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等私有数据成员,定义成员函数run、stop,用来输出提醒信息,在构造函数和析构函数中也可以输出提醒信息。在主程序中定义一个CPU的对象,调用其成员函数,观测类对象的构造与析构顺序,以及成员函数的调用。注意类定义完后的大括号之号有一个“;”分号。2.使用debug调试功能观测程序的运营流程,跟踪观测类的构造函数、析构函数、成员函数的执行顺序。参考程序如下:#include<iostream.h>enumCPU_Rank{P1=1,P2,P3,P4,P5,P6,P7};classCPU{private: CPU_Rankrank; intfrequency; floatvoltage;public:voidCPU::init(CPU_Rankr,intf,floatv) { rank=r; frequency=f; voltage=v; cout<<"构造了一个CPU!"<<endl; }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开始运营!"<<endl;} voidStop(){cout<<"CPU停止运营!"<<endl;}};voidmain(){ CPUa;a.init(P6,300,2.8); a.Run(); a.Stop();}3.一方面定义CPU类(可使用第二题中的CPU类)、RAM类、CDROM类。再定义Computer类:定义私有数据成员cpu、ram、cdrom,定义公有成员函数run、stop,可在其中输出提醒信息。使用debug调试功能观测程序的运营流程,跟踪观测类的构造函数、析构函数、成员函数的执行顺序,特别注意观测成员变量的构造与析构顺序。4.类Person有一个指向在堆上分派的字符数组的指针。当构造Person对象时,它创建该字符数组并把它的位置存放到变量_name中。当由p1创建Person对象p2时,p1的_name与p2的_name指向相同的堆对象。于是调用p2.SetName将改变由这两个类共享的值。所以,当第二次调用p1.PrintName,打印结果是"Alice"。这不是我们复制对象所盼望的结果,并且还会导致堆崩溃的问题(当加入析构函数时,程序运算异常),为什么要加入析构函数?C++允许我们通过定义拷贝构造函数来克服这类问题,可以在拷贝构造函数中重新分派空间,并予以复制。使用debug跟踪程序运算过程,观测内存空间的分派。5.在重载的“operator+”以及“operator^”成员函数体内,要对调用者对象(*this)与实参对象进行具体的加法以及求距离运算。可参考课本对“complex”复数类重载数学“+”等运算符的例子。注意此题规定的是用成员函数的形式进行重载,而不是用友元的方式。四、实验分析 记录出现的问题以及解决方法,贴出最后运营结果。实验三继承(4学时)一、实验目的1.学习定义和使用类的继承关系,定义派生类;2.熟悉不同继承方式下对基类成员的访问控制;3.重定义4.学习运用虚基类解决二义性问题。二、实验任务1.定义一个基类Animal,有私有整型成员变量age,构造其派生类dog,在其成员函数SetAge(intn)中直接给age赋值,看看会有什么问题,把age改为公有成员变量,还会有问题吗?编程试试看。2.定义一个基类BaseClass,有整型成员变量Number,构造其派生类DerivedClass,观测构造函数和析构函数的执行情况。3.定义一个车(vehicle)基类,具有MaxSpeed、Weight等成员变量,Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类。自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(SeatNum)等属性。从bicycle和motorcar派生出摩托车(motorcycle)类,在继承过程中,注意把vehicle设立为虚基类。假如不把vehicle设立为虚基类,会有什么问题?编程试试看。4.假设商店有如下几种商品:衬衣、帽子和立柜:衬衣:单价,产地,库存量,布料帽子:单价,产地,库存量,样式立柜:单价,产地,库存量,颜色对这些商品的操作有:入库,出库,该类商品的总价格计算。规定用类的继承与派生关系将上述各种货品表达出来,规定有构造函数初始化成员变量,并完毕所规定的功能三、实验环节1.编写程序定义基类Animal,成员变量age定义为私有的。构造派生类dog,在其成员函数SetAge(intn)中直接对age赋值时,会出现类似以下的错误提醒:errorC2248:'age':cannotaccessprivatememberdeclaredinclass'Animal'errorC2248:'age':cannotaccessprivatememberdeclaredinclass'Animal'把age改为公有成员变量后重新编译。并验证其他访问权根的作用结果。2.编写程序定义一个基类BaseClass,构造其派生类DerivedClass,在构造函数和析构函数中用cout输出提醒信息,观测构造函数和析构函数的执行情况。用debug功能跟踪程序执行过程,观测基类和派生类的构造函数和析构函数的执行情况。3.如未定义为虚基类,反复继承的基类在派生类对象实例中将存储了多个副本。观测构造和析构函数的调用情况。4.这三种商品数据之间的联系,它们有哪些共有的数据,构造一个“基类”,然后由此基类再构造三个类。共有的操作有:出库,入库,显示,总价计算,可定义为:voidin(intadd_cnt);voidout(intdel_cnt);voiddisplay();doubletotal_price();四、实验分析 记录出现的问题以及解决方法,贴出最后运营结果。实验四Windows程序框架以及MFC编程(4学时)一、实验目的1.学习windows基于消息事件驱动方式的程序设计2.学习一个完整的窗口编制的四个操作环节3.了解Windows提供的窗口类4.了解回调函数5.学习MFC对话框和单文档编程的一般方法5.学习使用MSDN帮助解决问题二、实验任务1.写一个Win32Application应用程序,规定当点击关闭时,弹出对话框拟定关闭,否则不关闭。运营初始时,在文档窗口显示“Hello”。2.练习使用VC++的AppWizard(应用程序向导)生成一个最简朴的基于MFC单文档或者基于对话框的应用程序。三、实验环节1.单击File菜单中的New选项,显示New(新建)对话框。在Project(项目)选项卡中,选择“Win32Application”。在Location(位置)文本框中指定一个途径,在PrejectName(项目名称)文本框中为项目输入一个名字,单击OK(拟定)。选择菜单命令Project|AddtoProject|New,弹出New对话框。在new对话框的Files选项卡中选择C++SourceFile,并填入文献名称,单击OK按钮,完毕新建C++源程序文献。2.创建一个项目,单击File菜单中的New选项,显示New(新建)对话框。在Project(项目)选项卡中,选择“MFCAppWizard(exe)”。在Location(位置)文本框中指定一个途径,在PrejectName(项目名称)文本框中为项目输入一个名字,单击OK(拟定)。.3.在出现的对话框中选择SingleDocument或者dialogbased,单击Next(下一步)按钮。以后每步接受缺省,单击Finish(完毕)按钮,AppWizard)显示一个摘要表,其中列出了所选的项目特性。单击OK(拟定)创建项目。4.编译、运营。查看各个生成的cpp文献,分析生成的,了解代码的执行过程。第1题参考程序如下:#include<windows.h>#include<stdio.h>LRESULTCALLBACKWinMyProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam );intWINAPIWinMain( HINSTANCEhInstance, HINSTANCEhPrevInstance, LPSTR lpCmdLine, intnCmdShow ){ WNDCLASSwndcls; wndcls.cbClsExtra=0; wndcls.cbWndExtra=0; wndcls.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH); wndcls.hIcon=LoadIcon(NULL,IDI_ERROR); wndcls.hCursor=LoadCursor(NULL,IDC_CROSS); wndcls.hInstance=hInstance; wndcls.lpfnWndProc=WinMyProc; wndcls.lpszClassName="Lab"; wndcl
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学期班级工作计划总结与展望
- 2024年度农业企业短期农业技术人员派遣协议2篇
- 2024企业个人借款合同风险评估与信用评级协议3篇
- 三年级数学计算题专项练习汇编及答案集锦
- Unit 4 分课时教学实录 -2024-2025学年沪教版(2024)英语七年级上册
- 6 植物种植展示会 教学实录-2023-2024学年科学三年级下册大象版
- 《8、7、6加几》(教学实录设计)-2024-2025学年一年级上册数学人教版
- 临沂职业学院《材料表面处理实验》2023-2024学年第一学期期末试卷
- 2024年产品测试兼职协议3篇
- 2024年体育训练基地租赁合同与赛事宣传推广服务协议3篇
- 2024八年级数学上册第十五章分式检测题含解析新版新人教版
- 中西文化鉴赏智慧树知到答案2024年郑州大学
- 国家开放大学本科《人文英语4》一平台机考真题及答案(第四套)
- 14《答谢中书书》对比阅读-2024-2025中考语文文言文阅读专项训练(含答案)
- 《汽车机械基础》形考任务(1-12章)试题与答案解析
- 大型储罐制作安装施工方案
- 民事赔偿和解协议书及撤诉申请书
- 冬季季节性安全事故预防
- 2024版《供电营业规则》学习考试题库500题(含答案)
- 环境工程原理智慧树知到期末考试答案章节答案2024年西华大学
- 小学教师期末学生评语
评论
0/150
提交评论