实验3 多态性_第1页
实验3 多态性_第2页
实验3 多态性_第3页
实验3 多态性_第4页
实验3 多态性_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、西华大学实 验 报 告( 2010/ 2011 学年 第 二 学期)课程名称面向对象程序设计实验名称多态性实验时间年月日指导单位指导教师学生姓名班级学号学院(系)专 业实 验 报 告实验名称多态性实验实验类型综合实验学时22一、 实验目的和要求(1)进一步熟悉类的设计、运用继承与派生机制设计派生类,合理设置数据成员和成员函数。(2)掌握双目运算符、单目运算符的重载方法,对常用算术运算符能在自定义类中通过友元函数、成员函数进行重载,以实现静态多态性。(3)掌握通过继承、虚函数、基类的指针或引用实现动态多态性的方法。(4)理解并掌握有纯虚函数的抽象类的作用,在各派生类中重新定义各纯虚函数的方法,以

2、及此时实现的动态多态性。二、实验环境(实验设备) 硬件: 微型计算机 软件: microsoft visual c+6.0三、实验原理及内容实验题目(1): 定义一个抽象类容器类container,其中定义了若干纯虚函数,实现求表面积、体积、输出等功能。由此抽象类派生出正方体、球体和圆柱体等多个派生类,根据需要定义自己的成员变量,在各个派生类中重新定义各纯虚函数,实现各自类中相应功能,各个类成员的初始化均由本类构造函数实现。在主函数中,定义容器类的指针和各个派生类的对象,使指针指向不同对象处调用相同的函数能执行不同的函数代码,从而实现动态多态性。实验解答: 根据实验提示完成实验,完整的程序代码

3、如下:#includeusing 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 area()coutthe container

4、s area is:6*l*lendl;virtual void volume()coutthe containers volume is:l*l*lendl;virtual void print()coutit is a cube!n;class sphere:public containerprivate:double r;public:sphere(double y)r=y;virtual void area()coutthe containers area is:4*pi*r*rendl;virtual void volume()coutthe containers volume is

5、:4/3*pi*r*r*rendl;virtual void print() coutit is a sphere!n;class cylinder:public containerprivate:double r; double h;public:cylinder(double r1,double h1) r=r1;h=h1;virtual void area() coutthe containers area is:2*pi*r*r+2*pi*r*hendl;virtual void volume() coutthe containers volume is:pi*r*r*hendl; v

6、irtual void print()coutarea();p-volume();p-print(); p=&sp;p-area();p-volume();p-print();p=&cy;p-area();p-volume();p-print();实 验 报 告你在主函数中调用该函数时测试动态多态性所增加的语句是: p=&cu; p=&sp; p=&cy;由两步,请在小结中总结关于动态多态性的实现方法。 在基类与派生类中存在的同名成员函数,定义时在形式参数的个数,顺序,类型方面有所不同,在程序编译时就能根据时机参数与形式参数的匹配情况,确定该类对象究竟调用了哪一个成员函数。主函数中定义一个co

7、ntainer类对象,请在小结中记录编译时的error和warning信息,从而得出什么结论?纯虚函数不能被调用,因为它只有函数名,而无具体实现代码,无法实现具体的功能。实 验 报 告实验题目(2): 定义复数类complex,有实部、虚部两个私有成员变量,在该类中定义多个重载的构造函数、定义析构函数和输出函数print,复数的输出形如12-3i,在类中重载+、-、*、/、+(分前+和后+)。在主函数中定义复数类的对象,实现复数的各种算术运算,通过重载实现静态多态性。实验解答:根据实验提示完成实验,完整的程序代码如下:#includeusing namespace std;class comp

8、lexprivate:float real;float imag;public:complex(float r=0,float i=0)real=r;imag=i;void print()coutreal+imagendl; 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

9、,const complex &c2);friend complex operator+(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

10、);real+;imag+;return *this;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-(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.r

11、eal;+c1.imag;return 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;couta1=;a1.print();couta2=;a2.print();couta3=a1+a2=;a3.print();couta4=a1-a2=;a4.print();couta5=a1*a2=;a5.print();couta6=a1/a2=;a6.print();a3=+a1;coutafter a3=+a1;couta1=;a1.print

12、();couta3=;a3.print();a4=a2+;coutafter a4=a2+;couta2=;a2.print();couta4=;a4.print();return 0;实 验 报 告程序的运行结果是: 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将主函数中所有以隐式方式调用重载运算符的语句改写成等效

13、的显式调用重载运算符的语句为:以隐式方式调用重载运算符的语句等效的显式调用重载运算符的语句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)步中,在主函数中定义一个container类对象,请记录编译时的error和warning信息,从而得出什么结论? 纯虚

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论