面向对象程序设计实验指导书.docx
- 文档编号:9442675
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:17
- 大小:219.29KB
面向对象程序设计实验指导书.docx
《面向对象程序设计实验指导书.docx》由会员分享,可在线阅读,更多相关《面向对象程序设计实验指导书.docx(17页珍藏版)》请在冰豆网上搜索。
面向对象程序设计实验指导书
面向对象程序设计
实验指导书
厦门工学院电子信息工程系
2013.8
目录
实验一:
MicrosoftVisualStudio2008开发环境熟悉3
实验二:
C++的类和对象6
实验三:
C++的派生类与继承9
实验四:
C++的多态性12
实验一:
MicrosoftVisualStudio2008开发环境熟悉
一、实验目的和要求
1、熟悉MicrosoftVisualStudio2008开发环境;
2、学会使用MicrosoftVisualStudio2008开发环境编辑、编译、链接和运行C++文件;
3、初步了解C++源程序的基本结构,学会使用简单的输入输出操作;
二、实验内容和步骤
1、熟悉MicrosoftVisualStudio2008开发环境;
(1)创建新项目:
创建方法如图2.1所示:
图2.1创建新项目
(2)选择Win32控制台应用程序,如图2.2所示:
图2.2选择VisualC++程序模板
(3)在主cpp文件中编辑源程序,如图2.3所示:
图2.3源程序编辑
(4)进行C++文件的编译、链接和整个工程的运行;
2、简单C++源程序的编写
(1)输入以下程序,进行编译,如果有错误,则修改程序,直到没有错误为止,然后进行链接和运行,并分析运行结果;
/*************************experiment1-2-1.cpp*******************************/
#include"stdafx.h"
#include
usingnamespacestd;
intmain()
{
voidfun(int,int&);
intx,y;
fun(3,x);
fun(4,y);
cout<<”x+y=< return0; } voidfun(intm,int&n) { n=m*5 } /****************************************************************************/ (2)编写C++编程风格程序experiment1-2-2.cpp: 计算将100元人民币兑换成1、2、5元的人民币,有多少种换法? (3)编写C++编程风格程序experiment1-2-3.cpp: 计算并输出两个整数、三个整数、两个双精度数、三个双精度数的最大值(使用函数重载); 三、实验思考题 1、列出experiment1-2-1.cpp中出现的错误,对实验结果进行分析,讨论在函数参数中传递变量、传递引用及传递指针有何区别? 2、附录完整的源程序experiment1-2-2.cpp及其运行结果;要求源程序格式整齐,并对关键代码进行说明; 3、附录完整的源程序experiment1-2-3.cpp及其运行结果。 要求源程序格式整齐,并对关键代码进行说明; 实验二: C++的类和对象 一、实验目的和要求 1、理解类和对象的概念,掌握声明类和定义对象的方法; 2、掌握构造函数和析构函数的实现方法; 3、掌握对象数组的使用以及使用对象、对象指针和对象引用作为函数参数的方法; 4、掌握静态数据成员和静态成员函数的使用方法; 二、实验内容和步骤 1、输入以下程序,进行编译、连接和运行,并分析运行结果; /*************************experiment2-1.cpp*******************************/ #include"stdafx.h" #include #include"string.h" usingnamespacestd; classCoordinate { public: Coordinate(intx1,inty1) { x=x1; y=y1; } Coordinate(Coordinate&p); ~Coordinate() { cout<<"Destructoriscalled\n"; for(inti=0;i<200000000;i++); } intgetx() { returnx; } intgety() { returny; } private: intx; inty; }; Coordinate: : Coordinate(Coordinate&p) { x=p.x; y=p.y; cout<<"Copy-initializationConstructoriscalled! \n"; } intmain() { Coordinatep1(3,4); cout<<"p1.x="< Coordinatep2(p1); cout<<"p2.x="< Coordinatep3=p2; cout<<"p3.x="< for(inti=0;i<2000000000;i++); return0; } /****************************************************************************/ 2、编写C++风格源程序: 已有若干学生的数据,包括学号、姓名、成绩,要求输出这些学生的数据并计算出学生的人数和平均成绩(要求将学生的人数和总成绩用静态数据成员表示)。 [提示]程序的参考框架如下: /*************************experiment2-2.cpp*******************************/ #include"stdafx.h" #include #include"string.h" usingnamespacestd; classStudent { private: //普通数据成员定义: //静态数据成员定义: 学生数目、总分、平均分数 public: //声明构造函数 //声明析构函数 //普通成员函数 //声明静态成员函数(可选) }; //构造函数、析构函数、普通成员函数、静态成员函数(可选)函数体 //静态数据成员初始化 intmain() { //静态成员函数能在对象定义之前调用静态成员函数,以处理静态数据成员(可选) //定义相应的对象(3-4个); //数据输出 for(inti=0;i<2000000000;i++); return0; } /****************************************************************************/ 三、实验思考题 1、写出并分析experiment2-1.cpp运行的结果; 2、在experiment2-1.cpp中做如下修改: (1)将Coordinate类中带有两个参数的构造函数进行修改,在函数体内添加: cout<<”constructoriscalled.\n”,写出程序的运行结果,并解释输出结果。 (2)在主函数体内添加语句: Coordinatep4;Coordinatep5 (2);调试程序中会出现什么错误? 为什么? 如何进行适当的修改? 3、附录完整的源程序experiment2-2.cpp及其运行结果;要求源程序格式整齐,并对关键代码进行说明。 实验三: C++的派生类与继承 一、实验目的和要求 1、掌握派生类的声明方法和派生类构造函数的定义方法; 2、掌握不同继承方式下,基类成员在派生类中的访问属性; 3、掌握继承方式下、构造函数与析构函数的执行顺序与构造规则; 4、学习虚基类在解决二义性问题中的作用; 二、实验内容和步骤 1、输入以下程序,进行编译、链接和运行,并分析运行结果; /*************************experiment3-1.cpp*******************************/ #include"stdafx.h" #include usingnamespacestd; classBase { public: voidsetx(inti) { x=i; } intgetx() { returnx; } public: intx; }; classDerived: publicBase { public: voidsety(inti) { y=i; } intgety() { returny; } voidshow() { cout<<"Base: : x="< } public: inty; }; intmain() { Derivedbb; bb.setx(16); bb.sety(25); bb.show(); cout<<"Base: : x="< cout<<"Derived: : y="< cout<<"Base: : x="< cout<<"Derived: : y="< for(inti=0;i<2000000000;i++); return0; } /****************************************************************************/ 2、编写C++编程风格源程序: 实现学生和教师的数据输入和显示程序。 学生数据有编号、姓名、性别、年龄、系别和成绩,教师数据有编号、姓名、性别、年龄、职称和部门。 要求将编号、姓名、性别、年龄的输入和显示设计成一个类Person,并作为学生了Student和教师类Teacher的基类。 [提示]程序的参考框架如下: /*************************experiment3-2.cpp*******************************/ classPerson { //定义基类的数据成员及成员函数 }; classStudent: publicPerson { //定义学生派生类的数据成员及成员函数 } classTeacher: publicPerson { //定义教师派生类的数据成员及成员函数 } intmain() { //相应对象创建及调用 } /****************************************************************************/ 三、实验思考题 1、写出并分析experiment3-1.cpp运行的结果; 2、在experiment3-1.cpp中做如下修改: (1)将基类Base中数据成员x的访问权限改为private时,会出现哪些错误? 为什么? (2)将基类Base中数据成员x的访问权限改为protected时,会出现哪些错误? 为什么? (3)在源程序的基础上,将派生类Derived的继承方式改为private时,会出现哪些错误? 为什么? (4)在源程序的基础上,将派生类Derived的继承方式改为protected时,会出现哪些错误? 为什么? 3、附录完整的源程序experiment3-2.cpp及其运行结果,要求源程序格式整齐,并对关键代码进行说明。 实验四: C++的多态性 一、实验目的和要求 1、了解多态性的概念; 2、掌握运算符重载的基本方法; 3、掌握虚函数的定义和使用方法; 4、了解纯虚函数和抽象类的概念和用法; 二、实验内容和步骤 1、输入以下程序,进行编译、链接和运行,并分析运行结果; /*************************experiment4-1.cpp*******************************/ #include"stdafx.h" #include usingnamespacestd; classB { public: virtualvoidf1(doublex) { cout<<"B: : f1(double)"< } voidf2(doublex) { cout<<"B: : f2(double)"<<2*x< } voidf3(doublex) { cout<<"B: : f3(double)"<<3*x< } }; classD: publicB { public: virtualvoidf1(doublex) { cout<<"D: : f1(double)"< } voidf2(intx) { cout<<"D: : f2(int)"<<2*x< } voidf3(doublex) { cout<<"D: : f3(double)"<<3*x< } }; intmain() { Dd; B*pb=&d; D*pd=&d; pb->f1(1.23);//语句1 pb->f1(1.23);//语句2 pb->f2(1.23);//语句3 pb->f3(1.23);//语句4 pb->f3(3.14);//语句5 for(inti=0;i<2000000000;i++); return0; } /****************************************************************************/ 2、编写C++风格源程序experiment4-2.cpp: 设计一个时间类Timer,用来保存时、分、秒等私有数据成员,通过重载操作符“+”实现两个时间的相加。 要求将小时范围限制在大于等于0,分钟范围限制在0-59分,秒钟限制在0-59秒。 [提示]时间类的参考框架如下: /*************************experiment4-2.cpp*******************************/ classTime { public: Time(inth=0,intm=0,ints=0); Timeroperator+(Time&);//运算符重载 voiddisptime(string); private: inthours; intminutes; intseconds; }; //补充完整程序的其它部分; /****************************************************************************/ 3、给出下列的抽象基类container: /*************************experiment4-3.cpp*******************************/ classcontainer { protected: doubleradius; public: container(doubleradius); virtualdoublesurface_area()=0; virtualdoublevolume()=0; }; //补充完整程序的其它部分; /****************************************************************************/ 要求建立3个继承container的派生类cube、sphere与cyline,让每个派生类都包含虚函数surface_area()和volume(),分别用来计算正方体、球体和圆柱体的表面积及体积。 要求写出主程序,应用C++的多态性,分别计算边长为6.0的正方体、半径为5.0的球体,以及半径为5.0和高为6.0的圆柱体的表面积和体积。 三、实验思考题 1、写出并分析experiment4-1.cpp运行的结果; 2、附录完整的源程序experiment4-2.cpp及其运行结果,要求源程序格式整齐,并对关键代码进行说明。 3、附录完整的源程序experiment4-3.cpp及其运行结果,要求源程序格式整齐,并对关键代码进行说明。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 面向 对象 程序设计 实验 指导书
![提示](https://static.bdocx.com/images/bang_tan.gif)