实验4虚函数与多态-参考程序.doc_第1页
实验4虚函数与多态-参考程序.doc_第2页
实验4虚函数与多态-参考程序.doc_第3页
实验4虚函数与多态-参考程序.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

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

文档简介

C+程序设计2实验4:虚函数与多态参考程序一 、实验目的1、学会定义和使用纯虚函数。2、在掌握继承与派生关系的基础上,进一步理解虚函数与多态性的关系,实现运行时的多态性。3、理解虚函数在类的继承层次中的作用,虚函数的引入对程序运行时的影响,能够对使用虚函数的简单程序写出程序结果。二 、实验内容及步骤1. 现有称为figure的基类,存放二维对象(三角形、矩形和圆形三个类)的各维数据,并由set_dim()设置数据,它是标准成员函数。show_area()为虚函数,因为计算三角形、矩形和圆形三个类对象的面积的方法是不同的,需重新定义。1、参考程序代码:#includeusing namespace std;class figureprotected:double x,y;public:void set_dim(double i,double j=0)x=i;y=j;virtual void show_area()coutNo area computation defined for this class.n;class triangle:public figurepublic:void show_area()coutTriangle with height x and base y has an area of x*0.5*yendl;class square:public figurepublic:void show_area()coutSquare with dimensions x and y has an area of x*yendl;class circle:public figurepublic:void show_area()coutCircle with radius x has an area of 3.14159*x*xset_dim(10.0,5.0);p-show_area();p=&s;p-set_dim(10.0,5.0);p-show_area();p=&c;p-set_dim(10.0);p-show_area();return 0;参考运行结果:2、分析以下程序的运行结果,并上机进行验证。#include class basepublic: base() fc(); virtual void fc() coutIn class baseendl; virtual base()=0 coutDestructing base objectendl; ;class A:public basepublic:A() fc(); void f() fc(); A() fd(); void fd() coutDestructing A objectendl; ;class B:public Apublic:B() void fc() coutIn class Bendl; B() fd(); void fd() coutDestructing B objectendl; ;void main() B b; b.fc();base *p=new A;delete p;、分析:建立类B的一个对象b时,先调用类base的构造函数,静态联编调用base:fc(),输出“In class base”。接着调用类A的构造函数,也使用的是静态联编。但是A内没有函数fc的定义,这时就调用类base:fc()。仍然输出“In class base”。接着才调用类B自己的构造函数,但这个函数是空的,什么输出也没有。接着执行B:fc(),显然是静态联编。接着建立一个类A的对象并用一个指向基类的指针指向它。这时先调用类base的构造函数,这是静态联编,输出“In class base”。再调用类A的构造函数,同样输出“In class base”,这也是静态联编。下面执行delete p,先调用A的析构函数,输出“Destructing A object”,这是静态联编。接着base中的纯虚析构函数被调用,输出Destructing base object,也是静态联编。程序执行到了最后,要清除对象b,依次调用B:B()(实际调用B:fd(),A:A()(实际调用A:fd()), base:base(),都是静态联编。输出依次为:Destructing B object、Destructing A object和Destructing base object。参考运行结果:3、3、分析以下程序的运行结果,并上机进行验证。#include class Basepublic:virtual void fun(int x)coutbase class, x=xendl;class Derive:public Basepublic: void fun(float x)coutderive class, x=xendl;void globefun(Base &b)int i=1;b.fun(i);float f=2.0;b.fun(f);void main()Base b;Derive d;globefun(b);globefun(d);分析:基类Base声明了虚函数func(),但在派生类中重新定义该函数时,其函数原型与基类中的函数原型不同(参数类型不同),所以不能实现多态性。参考运行结果:附:1、什么是多态性?有多少种多态?答:多态性也是面向对象程序的重要特征。它是指不同的对象收到相同的消息时产生不同的行为方式。这里所说的消息即对类的成员函数的调用。利用多态性,用户只需发送一般形式的消息,而将所有的实现留给接收消息的对象。对象根据所收到的消息而做出相应的动作。C+语言支持两种多态性,即编译时的多态性(静态多态)和运行时的多态性(动态多态)。编译时的多态性是通过重载来实现的;而运行时的多态性是通过虚函数来实现的。2、如何声明虚函数?类的构造函数可以声明为虚函数吗?答:声明虚函数的方法是在基类中的成员函数原型前加上关键字virtual;只有类的成员函数才能声明为虚函数,但类的构造函数以及全局函数和静态成员函数不能声明为虚函数。3、面向对象程序设计的3大机制是什么?答

温馨提示

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

评论

0/150

提交评论