面向对象程序设计C++ 实验大纲.docx

上传人:飞****2 文档编号:60197298 上传时间:2022-11-15 格式:DOCX 页数:45 大小:324.06KB
返回 下载 相关 举报
面向对象程序设计C++ 实验大纲.docx_第1页
第1页 / 共45页
面向对象程序设计C++ 实验大纲.docx_第2页
第2页 / 共45页
点击查看更多>>
资源描述

《面向对象程序设计C++ 实验大纲.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计C++ 实验大纲.docx(45页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、面向对象程序设计C+实验大纲实验课程名称:面向对象程序设计C+实验英语译名:Experiments of Object-OrientedProgramming C+课程性质:专业基础课适用学生层次:本科适用专业:计算机科学与技术、物联网工程实验项目数:8实验总学时数:18教材及参考书:1.C+面向对象程序设计教程(第3版)陈维兴,林小茶编著清华大学出版社 2009.62.实用C+教程高教出版社3.实用C+实验教程高教出版社考核方式:实验报告和实验程序操作考查面向对象程序设计C+实验大纲1第一部分实验教学的指导思想和要求31、教学目标:32、基本要求:33、实验前的准备工作。34、撰写实验报告4

2、5、实验报告提交注意事项:4第二部分、实验学时分配5第三部分、实验内容5实验1 熟悉VC+6.0的编程环境(2学时)5实验2 数组(2学时)15实验3函数(2学时)16实验4 指针和引用(4学时)18实验5 类与对象的应用(4学时)23实验6 继承与派生类(2学时)34实验7 虚函数和多态性(2学时)37实验8 文件(2学时)40第一部分实验教学的指导思想和要求1、教学目标:C+是一门高效的程序设计语言,即可进行过程化设计,也可进行面向对象程序设计,是目前面向对象程序设计语言中具有最广泛基础的一门语言,也是作为应用软件和系统软件的最佳开发工具之一。通过该课程的学习,学生能掌握C+程序设计基础知

3、识,程序设计方法与基本数据结构。通过上机实践,培养学生分析具体问题、建立数学模型、用C+解决实际问题的能力,培养学生创新意识和提高学生实践能力。在课程教学的整个过程中要帮助学生抛弃原来的编程习惯和思考方法,建立面向对象的编程思想。2、基本要求:l 了解计算机处理信息的过程以及描述用计算机解决问题的表示方法;l 熟悉和使用C+程序设计的开发环境;l 理解面向对象程序设计的基本概念;l 掌握面向对象程序设计的基本方法与基本思路;l 掌握可视化编程的方法。3、实验前的准备工作。l 了解所用的计算机系统(包括Visual C+6.0)的性能和使用方法。l 复习和掌握与本实验有关的教学内容,设计好上机操

4、作步骤。l 准备好上机所需的程序,切忌不编程序或抄别人的程序去上机。l 对实验中出现的问题应事先估计,对程序中自己有疑问的地方应先作上记号,以便上机时给予注意。4、撰写实验报告l 实验报告格式实验报告必须是word文档,其他格式一律不接受。上机实验报告格式实验题目:_学院及班级:学号:姓名:一、实验目的:1. 2. 二、实验内容:要求有算法设计、代码编写,程序代码含有一定的注释,运行结果图示。三、实验总结通过上机实践,对所学内容的某个知识点有了更深入的理解,写出一些体会、学习心得。也可以写算法设计、代码编写、程序调试、程序改进等相关的收获、感悟。5、实验报告提交注意事项:l 邮箱地址:wl_m

5、aryl 邮件标题格式:学号+姓名+班级+实验名称l 附件标题格式:学号+姓名+班级+实验名称按上述要求提交实验报告,实验报告必须在本学期19周周日之前提交,过后不再受理,后果自负。注:实验报告一定要以附件(word格式,其他格式一律不接受!)的形式发送,邮件标题、附件标题、邮箱一定不要写错啊!第二部分、实验学时分配序号试验项目名称类型学时1实验1熟悉VC+6.0的编程环境(2学时)验证22实验2数组(2学时)验证23实验3函数(2学时)验证24实验4指针和引用(4学时)综合性45实验5类与对象的应用(4学时)验证46实验6继承与派生类(2学时)验证27实验7虚函数和多态性(2学时)验证2第三

6、部分、实验内容实验1 熟悉VC+6.0的编程环境(2学时)一、实验目的:1熟悉 VC+6.0 集成开发环境;掌握简单C+ 程序的编辑、编译、连接和运行;2理解 C语言中的数据类型、表达式;掌握简单C+程序的编写及调试方法;3悉C+程序的顺序、分支和循环控制结构及其实现方法;掌握结构化程序设计的基本方法和步骤,进一步学习程序的调试过程;二、实验内容:1从键盘输入两个整数,求其最大值。提示参考程序如下:#include int max(intx,int y) /定义求最大值函数if(xy)return x;else return y;void main()intm,n,s;cout输入两个整数:m

7、n;s=max(m,n);cout两个数中的最大值为:sendl;要求l 输入24 6,观察程序运行结果;l 输入24,6,观察程序运行结果;l 输入非整数时,观察程序运行结果;/大家想一想为什么?写实验报告2编程将一个已知的三位整数按倒序形式输出。如已知一个三位整数123,其倒序形式为321。提示输入的三位数为整数,变量类型按整型进行处理。可采用求余数的方法计算各位上的数,并输出,再用除10所得的商作为输出低位后剩余的数。参考程序如下:#include void main()intx,k;cout请输入一个整数:x;cout按倒序输出整数:endl;while(x!=0)k=x%10;cou

8、tk;x=x/10;coutendl;要求l 修改程序,将三位数倒序后存入整型变量中,并输出倒序后的整数。写实验报告3. 求两个整数的和。程序如下:提示参考程序如下:#include int add(intx,int y) /求和int s;s=x+y;return s;void main()intx,y,sum;cout输入两个实数:xy;sum=add(x,y); /调用函数,求和coutx+y=sumn),当余数不为零时,m取n的值,n取r的值,再求两个数相除的余数,反复进行直到余数为零,除数n是最大公约数。最小公倍数=mn最大公约数。要求l 按照上面思想,编程实现从键盘上输入的两个自然

9、数的最大公约数和最小公倍数;l 输入两个数m=56,n=12观察程序运行结果;l 用递归调用的方法实现求最大公约数,参考程序如下:int fun1(int c,int d)int r;r=c%d;if(r!=0)c=d;d=r;fun1(c,d); return d;l 编程实现求三个数的最大公约数和最小公倍数;写实验报告2编程求下式的值:n1+n2+n3+n4+n8 其中n=1, 2, 3,编写函数时,设置参数n的默认值为2。提示上述表达式可以写为:f(n)= n1+n2+n3+n4+n10 (n=1, 2, 3) ,注意表达式值的溢出问题。要求l 定义f(n)函数,实现求上述表达式的值,并

10、设置函数的参数n的默认值为2;l 在主函数中调用f(n)函数,实现输入n值时,求出表达式的值;写实验报告3使用函数重载的方法定义四个同名函数max,分别求取两个整数、三个整数,两个双精度数、三个双精度数的最大值。提示 C编译器根据函数参数表中参数类型和个数进行匹配,调用相应的重载函数,函数返回值不能用来识别重载函数。注意重载函数中使用默认参数时可能产生的二义性。要求l 在每个重载函数中输出该函数的参数值和求出的最大值;l 在main函数中,当输入不同类型、个数的数据时,调用不同的重载函数,求其最大值;写出实验报告。实验4指针和引用(4学时)一、实验目的:1、熟练掌握各种类型指针的定义、引用和运

11、算;2、掌握数组指针和指向数组的指针变量,以及字符串的指针和指向字符串的指针变量;3、了解指针与链表关系。二、实验内容:1 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。提示把输入的10个整数存入数组中,10个中最小的放与数组的第一个元素对换,最大的数与数组的第10个元素对换。其他的保持不变。要求定义3个函数:void input(int *p); /*此函数向数组输入10个元素*/void max_min_value(int *p);/*此函数交换数组的对应元素*/void output(int*p);/*此函数输出数组的10个元素*/在main函数中调用上述3个

12、函数,实现题目要求的功能;撰写实验报告2建立一个学生信息链表,每个结点包括:学号、姓名、成绩。实现链表的建立、显示和查询。查询是指输入一个学号,如果链表中存在该学号的的结点,则显示此结点的数据。提示采用动态分配内存,用new分配内存空间,不需要时用delete释放空间。由于结点结构中包含两三个域,可以采用C+语言中的结构体类型实现。structstructNode /定义一个结点结构类型 intnum;char name10;float score;structNode *next; stNode;要求在程序中定义了三个函数:void initStLink();/初始化链表void creat

13、eStLink(); /创建学生成绩信息链表void dispStLink();/输出链表信息定义一个查询函数stNode * search(stNode *head,int number),其中,第一参数是链表的头结点,第二个参数是学生的学号。实现当输入一个学生学号,如果链表中存在该学号的的结点,则显示此结点的数据,否则输出没有该学号的结点。定义一个删除函数bool delete(int number),用于删除指定学号的结点。实现当输入一个学生学号,如果链表中存在该学号的的结点,则删除该结点,否则显示链表中没有该学号的结点。撰写实验报告以下选作题目:3. n个人围成一圈,从第一个人开始报数

14、,报到5的人就退出圈(图中白色的表示退出圈),再从下个人开始报数,问最后剩下的那个人是第几个人。(1)提示:1)建立一个结构体:struct Node /定义一个结点结构类型 intnum; /序号 char name10; /姓名struct Node *next; stNode;并将头指针设为全局变量stNode *head;2)要求在程序建立几个函数:void initStLink()/初始化链表void CreateStLink( ) /创建循环链表,void dispStLink( )/输出链表信息stNode *find( ) /报数为5的人出队列在主函数中调用以上函数,实现程序的

15、要求。(3)撰写实验报告实验5类与对象的应用(4学时)一、实验目的:1掌握类和对象的概念、定义和使用方法。2掌握不同特性对象成员的访问方法,以及this指针的概念和使用方法。3掌握构造函数和析构函数的使用方法。二、实验内容:1写出下列程序的执行结果,然后上机进行验证。#include #include class X int n;public:X( );X(int a); X( );X:X( ):n(3) cout调用构造函数 X()setw(8)nendl;X:X(int a ):n(6) n=n+a;cout调用构造函数 X(int a)setw(5)nendl; X:X() cout调用

16、析构函数 nendl; void main() X a;cout-a-endl;X b(7);cout-b-endl;cout析构函数执行情况:endl;提示通过设置断点,以单步执行的方式跟踪构造函数、析够函数的执行顺序。所谓断点就是程序运行时需要暂时停止执行的语句。程序员可以为程序需要观察的语句设置断点,以“单步执行”的方式跟踪和检查程序当前的各种状态值。在C程序文件中设置断点,并以“单步执行”的方式跟踪程序执行的过程和检查变量的值的操作步骤是:l 在主窗口中打开源文件“ex10_8”,并对该文件进行编译和链接;l 把光标移动到需要设置断点的语句,单击鼠标右键,弹出如图10-8所示的快捷菜单

17、,单击“Insert/Remove Breakpoint”菜单项,在语句左边空白处出现一个红色的圆点,再选择一次为为取消断点。也可以选择工具栏上的按钮,单击一次设置断点,再单击一次为取消断点。注意,断点语句应该是有变量的语句。可以在程序中设置多个断点,但断点不能太多。图10-8 添加断点的快捷菜单l 单击“组建/开始调试/Go”菜单项或按F5功能键,如图10-9所示,或按工具栏上的按钮,系统开始执行程序。进入调试状态后,菜单栏上的“组建”菜单项变为“调试”菜单项,主窗口中出现调试工具栏(如果没有出现的化,将鼠标位于工具栏上单击右键,在下拉菜单项中选择“调试”,调试工具栏就会出现)。执行到断点语

18、句“cout调用构造函数 X()setw(8)nendl;”时,程序的执行进入调试状态,在主窗口底部自动弹出变量窗口,显示断点出现的变量的值。如图10-10所示。通过主窗口的菜单“查看/调试窗口”或通过组合键Alt3Alt8打开各个调试窗口,以查看当前程序的执行情况。l 若要停止调试程序,可以单击“调试/Stop Debugging”菜单项,或单击工具栏上的按钮,系统停止调试程序。图10-9 单步调试图10-10 单步调试状态下的主窗口要求l 在上述程序中设置断点,观察构造函数、析构函数的执行顺序及变量n值的变化;l 对象作为类的数据成员,测试构造函数和析构函数的调用顺序;定义类CTs类,有两

19、个数据成员,分别是类CStudent、类CTeacher的对象。定义如下:classCStudent public:CStudent() /学生类构造函数 coutconstructing studentendl; CStudent() /学生类析构函数 coutdenstructing studentendl;classCTeacher public:CTeacher() /教师类构造函数 coutconstructing teacherendl;CTeacher() /教师类析构函数 coutdestructing teacherendl; ;class CTsCStudent stude

20、nt; /学生对象数据成员CTeacher teacher; /教师对象数据成员public: CTs() /教师学生类构造函数 coutcostructingtsendl;CTs() /教师学生类析构函数 coutdestructing tsendl;写实验报告2定义一个学生通讯录类,数据成员包括:学号、姓名、院系、通讯地址、电话;成员函数包括:输出各个数据成员的值,分别设置和获取各个数据成员的值。提示由于姓名、院系和通讯地址的数据长度是可变的,可使用动态的数据结构。电话可以用一个字符数组存放。将数据成员均定义为私有的。用一个成员函数输出所有的成员数据,用五个成员函数分别设置学号、姓名、院系

21、、通讯地址和电话,另用五个成员函数分别获取学号、姓名、院系、通讯地址和电话。class CStudentint number; /学号char *p_name;/姓名 char *p_school;/院系 char *p_address;/通讯地址char tel15;/电话public:void show();/输出数据成员CStrudent(intun,char *pn,char *ps,char *pa,char t);/构造函数void setname(char *name) /设置姓名if(p_name ) delete p_name;/释放存储空间p_name = new char

22、strlen(name)+1;/申请存储空间strcpy(p_name,name);void setnumber(int number);/设置学号void setschool(char *school);/设置院系void setaddress(char *address);/设置通讯地址void settel(char *mailnum);/设置电话intgetnumber();/获取学号char *getname();/取姓名char *getscool();/取学校char *getaddress();/取电话号码char *gettel();/取邮编;要求l 完成上述成员函数的定义;

23、l 用以下数据测试程序的正确性:定义类对象CStudents(张三工学院算机系四川雅安雨城区新康路49号邮编 );l 输出对象s的数据成员的值;l 调用成员函数,修改对象s中的数据成员值;写出实验报告。3对象作为函数参数提示由于类是一个数据类型,也可以将类作为参数传递给函数,参数传递遵循传值(或传地址)的方式,这同所有其他的数据类型是相同的。类对象作形参有3种方式:对象本身做参数(传值),传对象副本对象引用做参数(传地址),传对象本身对象指针做参数(传地址),传对象本身注意:当函数参数是类类型时,调用函数时用实参初始化形参,要调用拷贝构造函数。通常默认的拷贝构造函数就可以实现实参到形参的复制,

24、若类中有指针类型时,用户必须定义拷贝构造函数,实现实参到形参的复制。参考程序如下:#include #include #include classCStrSub char *str;public:CStrSub(char *s);CStrSub(CStrSub&); CStrSub(); void set(char *s);void show() coutstrendl;CStrSub:CStrSub(char *s) str=new charstrlen(s)+1;if(!str)cout申请空间失败!endl; exit(-1);strcpy(str,s);CStrSub:CStrSub(

25、CStrSub&temp) str=new charstrlen(temp.str)+1;if(!str)cerr申请空间失败!endl; exit(-1);strcpy(str,temp.str);CStrSub: CStrSub( ) if(str!=NULL) delete str; voidCStrSub:set(char *s) delete str;str=new charstrlen(s)+1;if(!str)cout申请空间失败!endl; exit(-1);strcpy(str,s);CStrSubinput(CStrSub temp) char s20;cout输入字符串:

26、s;temp.set(s);return temp;void main() CStrSuba(“hello”);a.show( );CStrSub b=input(a);a.show( );b.show( );要求l 修改input(CStrSub temp)函数,对象引用、对象指针作为函数参数时,程序执行结果与对象作为函数参数有什么不同。(3)撰写实验报告实验6继承与派生类(2学时)一、实验目的:1理解继承与派生的概念;2掌握派生类构造函数的定义和初始化;3掌握派生类析构函数的定义;4理解多重继承的概念;5掌握派生类构造函数、析构函数的执行顺序;二、实验内容:1定义一个日期类和一个时间类,并

27、由这两个类派生出日期时间类。主函数完成基类和派生类的测试工作。分析定义一个日期类,有私有数据成员年、月、日,构造函数完成年、月、日的初始化,两个成员函数分别实现设置日期和获取日期。该类可定义为:class CDateint year,month,day; /分别存放年、月、日public:CDate(int y=0, int m=0,int d=0);void setDate(int ,int ,int );char * getDate();函数setDate完成数据成员的赋初值。函数getDate要将整数年、月、日变换成字符串后,存放到字符串中。把一个整数变换成字符串可通过如下库函数来实现。

28、char * _itoa(int a , char *s, int b);参数a为要变换的整数,b为数制的基数(如10,表示将a转换为对应的十进制的字符串),转换的结果存放到s所指向的字符串中。函数返回变换后字符串的首指针。getDate()成员函数可以定义为:char* Date:GetDate() char str20;char t20;_itoa(Year,str,10);/将年变换为字符串表示strcat(str,/);/年、月、日之间用/隔开_itoa(Month,t,10); /将月变换为字符串表示strcat(str,t);/将年、月字符串拼接strcat(str,/);_ito

29、a(Day,t,10);strcat(str,t);/将年、月、日拼接成一个字符串return str;定义描述时间的类与描述日期的类类似。class CTimeint hour,minute,second;/时、分、秒public:CTime(int h=0,int m=0, int s=0);void setTime(int h,int m, int s);char* getTime();然后用这二个类作为基类,公有派生出描述日期时间的类: class CDateTime:public Date,public Time/公有派生public:CDateTime():CDate(),CTim

30、e() CDateTime(int y,int m,int d,int h,int min,int s):CDate(y,m,d),CTime(h,min,s)void getDateTime(char *);void getDateTime(int y,int m,int d,int h,int min,int s);上机要求完成上述基类、派生类的定义在主函数中完成基类、派生类的测试总结派生类构造函数、析构函数的执行顺序2、按照下图的类层次要求编写程序。定义属于类score的对象c1及类teacher的对象t1,分别输入各数据成员的值后显示出这些数据。engmathsnoolddepdegr

31、eeteladdrnamestudteacherpersonstudentscoreid实验7虚函数和多态性(2学时)一、实验目的:1掌握动态联编的概念;2掌握虚函数和纯虚函数的使用方法;3掌握抽象类的使用。二、实验内容:1. 定义一个二维数组CTwoArray类:(1)提示:下面是类的定义classCTwoArrayint *ptr; /数组指针,指向二维数组的第一行第一列的元素int row; /数组行数int col; /数组列数public:CTwoArray(intm,int n);/构造函数CTwoArray();/析构函数CTwoArray(CTwoArray&a); /拷贝构造

32、函数void set(); /从键盘输入数据,给二维数组元素赋值CTwoArray& operator+(CTwoArray&b); /重载为类的成员函数void print(); /输出二维数组元素;注:大家可以根据程序的需要,在类中再增加成员函数。(2)要求:l 构造函数用于动态建立有mn个元素的一维数组(要将二维数组转换为内存中存放的形式)来存放m行n列的二维数组的元素,并对该数组的元素初始化为0,ptr指向数组的首地址;提示:要求用new运算符动态建立一维数组来存放二维数组元素。所以在访问二维数组元素时需经过转换,即二维数组中第i行第j列元素在一维数组中的位置是:ptricolj,等同

33、于*(ptr+i)+j 都表示第i行第j列元素的地址l 析构函数用于释放动态数组所占用的存储空间;l 拷贝构造函数,要求必须定义l 定义set()函数,从键盘上接收数据给二维数组元素赋值。l 定义print()函数输出二维数组元素的值。l 重载“”运算符,实现两个同维数的二维数组的相加;要求重载为二维数组类的成员函数,在主函数中实例化二维数组,实现两个二维数组的相加,并把相加结果显示出来;写实验报告2下列CShape类是一个表示形状的抽象类,从 CShape类共有派生矩形CRectangle类 和圆CCircle类,重载基类中的虚函数。提示抽象类的定义如下:classCShapeprotected:doublex,y;public: CShape(double x=0,double y=0);virtual float area( )=0; doublegetx();doublegety();在CCircle类派生时,把基类中的x数据成员作为圆的半径;要求l 实现上述派生类的定义l 在主函数中用下列语句测试,观察输出的结果。CRect

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com