版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、西华大学实 验 报 告( 2010/ 2011 学年 第 二 学期)课程名称面向对象程序设计实验名称多态性实验时间年月日指导单位指导教师学生姓名班级学号学院(系)专 业实 验 报 告实验名称多态性实验实验类型综合实验学时2×2一、 实验目的和要求(1)进一步熟悉类的设计、运用继承与派生机制设计派生类,合理设置数据成员和成员函数。(2)掌握双目运算符、单目运算符的重载方法,对常用算术运算符能在自定义类中通过友元函数、成员函数进行重载,以实现静态多态性。(3)掌握通过继承、虚函数、基类的指针或引用实现动态多态性的方法。(4)理解并掌握有纯虚函数的抽象类的作用,在各派生类中重新定义各纯虚函
2、数的方法,以及此时实现的动态多态性。二、实验环境(实验设备) 硬件: 微型计算机 软件: Microsoft Visual C+6.0三、实验原理及内容实验题目(1): 定义一个抽象类容器类Container,其中定义了若干纯虚函数,实现求表面积、体积、输出等功能。由此抽象类派生出正方体、球体和圆柱体等多个派生类,根据需要定义自己的成员变量,在各个派生类中重新定义各纯虚函数,实现各自类中相应功能,各个类成员的初始化均由本类构造函数实现。在主函数中,定义容器类的指针和各个派生类的对象,使指针指向不同对象处调用相同的函数能执行不同的函数代码,从而实现动态多态性。实验解答: 根据实验提示完成实验,完
3、整的程序代码如下:#include<iostream>using namespace std;#define PI 3.14159class Containerprotected:double radius;public:Container(double r=0)radius=r;virtual void area()=0;virtual void volume()=0;virtual void print()=0;class Cube:public Containerprivate:double l;public:Cube(double x)l=x; virtual void a
4、rea()cout<<"The container's area is:"<<6*l*l<<endl;virtual void volume()cout<<"The container's volume is:"<<l*l*l<<endl;virtual void print()cout<<"It is a cube!n"class Sphere:public Containerprivate:double r;public:Spher
5、e(double y)r=y;virtual void area()cout<<"The container's area is:"<<4*PI*r*r<<endl;virtual void volume()cout<<"The container's volume is:"<<4/3*PI*r*r*r<<endl;virtual void print() cout<<"It is a sphere!n"class Cylinder:p
6、ublic Containerprivate:double r; double h;public:Cylinder(double r1,double h1) r=r1;h=h1;virtual void area() cout<<"The container's area is:"<<2*PI*r*r+2*PI*r*h<<endl;virtual void volume() cout<<"The container's volume is:"<<PI*r*r*h<<e
7、ndl; virtual void print()cout<<"It is a cylinder!n" ;void main() Container *p;Cube Cu(4);Sphere Sp(4);Cylinder Cy(4,5);p=&Cu;p->area();p->volume();p->print(); p=&Sp;p->area();p->volume();p->print();p=&Cy;p->area();p->volume();p->print();实 验 报 告你
8、在主函数中调用该函数时测试动态多态性所增加的语句是: P=&Cu; P=&Sp; P=&Cy;由两步,请在小结中总结关于动态多态性的实现方法。 在基类与派生类中存在的同名成员函数,定义时在形式参数的个数,顺序,类型方面有所不同,在程序编译时就能根据时机参数与形式参数的匹配情况,确定该类对象究竟调用了哪一个成员函数。主函数中定义一个Container类对象,请在小结中记录编译时的error和warning信息,从而得出什么结论?纯虚函数不能被调用,因为它只有函数名,而无具体实现代码,无法实现具体的功能。实 验 报 告实验题目(2): 定义复数类Complex,有实部、虚部
9、两个私有成员变量,在该类中定义多个重载的构造函数、定义析构函数和输出函数print,复数的输出形如12-3i,在类中重载+、-、*、/、+(分前+和后+)。在主函数中定义复数类的对象,实现复数的各种算术运算,通过重载实现静态多态性。实验解答:根据实验提示完成实验,完整的程序代码如下:#include<iostream>using namespace std;class Complexprivate:float real;float imag;public:Complex(float r=0,float i=0)real=r;imag=i;void print()cout<&l
10、t;real<<"+"<<imag<<endl; Complex operator*(Complex c1);Complex operator/(Complex c1);Complex operator+(int);friend Complex operator+(const Complex &c1,const Complex &c2);friend Complex operator-(const Complex &c1,const Complex &c2);friend Complex operator+
11、(Complex &c1);Complex Complex:operator*(Complex c1)/Complex c;real=real*c1.real;imag=imag*c1.imag;return *this;Complex Complex:operator/(Complex c1)/Complex c;real=real/c1.real;imag=imag/c1.imag;return *this;Complex Complex:operator+(int) / Complex c(*this);real+;imag+;return *this;Complex opera
12、tor+(const Complex &c1,const Complex &c2)Complex c;c.real=c1.real+c2.real;c.imag=c1.imag+c2.imag;return c;Complex operator-(const Complex &c1,const Complex &c2)Complex c;c.real=c1.real-c2.real;c.imag=c1.imag-c2.imag;return c;Complex operator+(Complex &c1)+c1.real;+c1.imag;return
13、c1;int main()Complex a1(2.3,4.6),a2(3.6,2.8); Complex a3,a4,a5,a6;a3=a1+a2;a4=a1-a2;a5=a1*a2;a6=a1/a2;cout<<"a1="a1.print();cout<<"a2="a2.print();cout<<"a3=a1+a2="a3.print();cout<<"a4=a1-a2="a4.print();cout<<"a5=a1*a2="a
14、5.print();cout<<"a6=a1/a2="a6.print();a3=+a1;cout<<"after a3=+a1"cout<<"a1="a1.print();cout<<"a3="a3.print();a4=a2+;cout<<"after a4=a2+"cout<<"a2="a2.print();cout<<"a4="a4.print();return 0
15、;实 验 报 告程序的运行结果是: A1=2.3+4.6 A2=3.6+2.8 A3=a1+a2=5.9+7.4 A4=a1-a2=-1.3+1.8 A5=a1*a2=8.28+12.88 A6=a1/a2=2.3+4.6 After a3=+a1 a1=3.3+5.6 A3=3.3+4.6 After a4=a2+ a2=4.6+3.8 A4=4.6+3.8将主函数中所有以隐式方式调用重载运算符的语句改写成等效的显式调用重载运算符的语句为:以隐式方式调用重载运算符的语句等效的显式调用重载运算符的语句A3=A1+A2;A3=operator+(a1,a2)A4=A1-A2;A4=operator-(a1,a2)A5=A1*A2;A5=a1.operator*(a2)A6=A1/A2;A6=a1.perator/(a2)A3=+A1;A3=operator+(a1)A4=A2+;A4=a2.operator+ 实 验 报 告四、实验小结(包括问题和解决方法、心得体会、意见与建议等)1.在题目(1)中由两步,请总结关于动态多态性的实现方法。 在基类与派生类中存在的同名成员函数,定义时在形式参数的个数,顺序,类型方面有所不同,在程序编译时就能根据实际参数与形式参数的匹配情况,确定该类对象究竟调用了哪个成员函数。2.在题目(1)步中,在主函数中定义一个Containe
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 南京信息工程大学《仪器分析实训》2023-2024学年第一学期期末试卷
- 《《养性延命录》中养生理论研究》
- 摩托车的制造工具与设备考核试卷
- 中学生心理健康教育活动方案
- 《改性锰系锂离子筛的制备及提锂性能研究》
- 《功能二维膜的制备及其分离性能研究》
- 2024年水溶性肥项目立项申请报告
- 2024-2030年中国电子纸行业运营模式投资前景预测报告
- 2024-2030年中国现代物流行业竞争现状发展规划分析报告
- 2024-2030年中国环戊二烯基钠(NaCp)行业产销现状与需求趋势预测报告
- 快乐读书吧-读后分享课:《十万个为什么》教学案列
- 2024年 贵州茅台酒股份有限公司招聘笔试参考题库含答案解析
- 2024年华融实业投资管理有限公司招聘笔试参考题库含答案解析
- 2024年1月普通高等学校招生全国统一考试适应性测试(九省联考)历史试题(适用地区:贵州)含解析
- 儿童心理健康问题的评估与干预方案
- NB-T 47013.7-2012(JB-T 4730.7) 4730.7 承压设备无损检测 第7部分:目视检测
- 空气化工高精度气体分装及储运中心一期项目环评报告书
- 肝吸虫护理查房课件
- 社区工作者案件调解流程
- 学校监控使用安全应急预案
- 汽车构造复习
评论
0/150
提交评论