ImageVerifierCode 换一换
格式:DOCX , 页数:12 ,大小:17.72KB ,
资源ID:4917095      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4917095.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(实验3多态性.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

实验3多态性.docx

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

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

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()

4、coutThe containers 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(

5、) coutThe containers volume is: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() coutTh

6、e containers volume is:PI*r*r*hendl; virtual 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;由两步,请在小结中总结关于动态多态性的实现方法。 在基类与派生类中存在的同名成员函数,定义时在形式参数的个数,顺序,类型方面有所不同,在程序编译时

7、就能根据时机参数与形式参数的匹配情况,确定该类对象究竟调用了哪一个成员函数。主函数中定义一个Container类对象,请在小结中记录编译时的error和warning信息,从而得出什么结论?纯虚函数不能被调用,因为它只有函数名,而无具体实现代码,无法实现具体的功能。实 验 报 告实验题目(2): 定义复数类Complex,有实部、虚部两个私有成员变量,在该类中定义多个重载的构造函数、定义析构函数和输出函数print,复数的输出形如12-3i,在类中重载+、-、*、/、+(分前+和后+)。在主函数中定义复数类的对象,实现复数的各种算术运算,通过重载实现静态多态性。实验解答:根据实验提示完成实验,

8、完整的程序代码如下:#includeusing namespace std;class Complexprivate: 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,con

9、st Complex &c2); friend Complex operator-(const Complex &c1,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

10、.imag; return *this;Complex Complex:operator+(int) / Complex c(*this); 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.rea

11、l-c2.real; c.imag=c1.imag-c2.imag; return c;Complex operator+(Complex &c1) +c1.real; +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.pri

12、nt(); couta5=a1*a2=; a5.print(); couta6=a1/a2=; a6.print(); a3=+a1; coutafter a3=+a1; couta1=; a1.print(); 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 A

13、6=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

14、=a2.operator+ 实 验 报 告四、实验小结(包括问题和解决方法、心得体会、意见与建议等)1.在题目(1)中由两步,请总结关于动态多态性的实现方法。 在基类与派生类中存在的同名成员函数,定义时在形式参数的个数,顺序,类型方面有所不同,在程序编译时就能根据实际参数与形式参数的匹配情况,确定该类对象究竟调用了哪个成员函数。2.在题目(1)步中,在主函数中定义一个Container类对象,请记录编译时的error和warning信息,从而得出什么结论? 纯虚函数不能被调用,因为它只有函数名,而无具体实现代码,无法实现具体的功能。 3.其它问题和解决方法: 在做第二个题时,把成员函数当作友元函数那样去重载运算符了,编译时报错说参数过多,还没搞明白为什么,最后被老师指出来才发现, 4.心得体会: 看着教材上的例题照猫画虎竟然还出错了,有时针对不同的情况要有相应的处理方法,不能再照着“我认为应该。”那样做了,看来,无论算法还是语法,理解是关键。五、指导教师评语成 绩批阅人日 期

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1