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

下载本文档

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

文档简介

1、C+面向对象程序设计实验报告序号:实验6 多态性与虚函数 实验目的1、了解多态性的概念; 2、了解虚函数的用途及使用方法;3、了解纯虚函数和抽象类的概念和用法。实验要求给出以下各实验内容的源程序代码,并把编译、运行过程中出现的问题以及解决方法填入实验报告中,按时上交。实验学时 2学时。实验内容1、写一个程序,定义抽象基类Shape,由它派生出3个派生类:Circle(圆形)、Square(正方形)、Rectangle(矩形)。利用指针、虚函数printArea()分别输出以上三者的面积,3个图形的数据在定义对象时给定。源程序#include<iostream> using name

2、space std; class Shape public: virtual float area()const=0; virtual void display()const=0; ; class Circle:public Shape public: Circle(double a):r(a) virtual float area()constreturn 3.14*r*r; virtual void display()const cout<<"圆面积"<<area()<<endl; private: double r; ; class

3、 Rectangle:public Shape public: Rectangle(double a,double b):l(a),w(b) virtual float area()constreturn l*w; virtual void display()const cout<<"矩形面积"<<area()<<endl; private: double l; double w; ; class Square:public Shape public: Square(double a):a1(a) virtual float area()

4、constreturn a1*a1; virtual void display()const cout<<"正方形面积"<<area()<<endl; private: double a1; ; int main() Circle c1(5); Rectangle r1(5,8); Square s1(2.5); Shape *p3=&c1,&r1,&s1; int i; double m=0.0; for (i=0;i<3;i+) pi->display(); m=m+pi->area(); c

5、out<<"总面积:"<<m<<endl; 2、定义Point(点)类,由Point类派生出Circle(圆)类,再由Circle类派生出Cylinder(圆柱体)类。将类的定义部分分别作为3个头文件(.h文件),对它们的成员函数的声明部分分别作为3个源文件(.cpp文件),在主函数(.cpp文件)中用#include命令把它们包含进来,形成一个完整的程序,并上机运行。源程序/Point.hclass Pointpublic:Point(float a=0,float b=0);void display();protected:float

6、 x,y;/Point.cpp#include<iostream.h>#include"Point.h"Point:Point(float a,float b)x=a;y=b;void Point:display()cout<<"Point:"<<endl<<"x="<<x<<endl<<"y="<<y<<endl;/Circle.hclass Circle:public Pointpublic:Circle

7、(float x=0,float y=0,float r=0);void display();protected:float radius;/Circle.cpp#include<iostream.h>#include"Point.h"#include"Circle.h"Circle:Circle(float a,float b,float r):Point(a,b),radius(r)void Circle:display()cout<<"Circle:"<<endl;cout<<&q

8、uot;x="<<x<<endl;cout<<"y="<<y<<endl;cout<<"radius="<<radius<<endl;cout<<"area="<<radius*radius*3.14<<endl;cout<<endl;/Cylinder.hclass Cylinder:public Circlepublic:Cylinder (float x=0,float y=0

9、,float r=0,float h=0);void display();protected:float height;/Cylinder.cpp#include<iostream.h>#include"Point.h"#include"Circle.h"#include"Cylinder.h"Cylinder:Cylinder(float a,float b,float r,float h):Circle(a,b,r),height(h)void Cylinder:display()cout<<"C

10、ylinder:"<<endl;cout<<"x="<<x<<endl;cout<<"y="<<y<<endl;cout<<"radius="<<radius<<endl;cout<<"height="<<height<<endl;cout<<"area="<<2*radius*radius*3.14+2*3

11、.14*radius*height<<endl;cout<<"volume="<<radius*radius*3.14*height<<endl;cout<<endl;/Main.cpp#include <iostream.h>#include"Point.h"#include"Circle.h"#include"Cylinder.h"int main()Point p(2.0,4.0);p.display();Circle c(4.0,5.0

12、,6.0);c.display();Cylinder cy(7.0,8.0,10.0,11.0);cy.display();return 0;3、要求正方体、球、圆柱的表面积,可以抽象出一个公共的基类Container为抽象类,在其中定义一个公共的数据成员radius(此数据可以作为正方形的边长、球的半径、圆柱体底面圆半径),以及求表面积的纯虚函数area()。由此抽象类派生出要描述的三个类,利用基类指针和虚函数,分别计算三种图形的表面积。源程序#include <math.h>#include <iostream.h>#define PI 3.14class Csha

13、pe double radius,height; double area,vol; int name;public: Cshape(double r,double h) radius = r; height = h;name = 3; Cshape(double r) radius = r;name = 1; void DisAttr() if(name = 1) cout<<"球体信息"<<endl; if(name =2) cout<<"正方形信息"<<endl; cout<<"表

14、面积是:"<<area<<endl; void DisAttr(int flag) cout<<"圆柱信息"<<endl; cout<<"表面积是:"<<area<<endl; void Sarea() area = 4*PI*pow(radius,2); void Sarea(int cube) area = 6*pow(radius,2); void Sarea(double cube) name = 3; area = 2*PI*pow(radius,2)+2*PI*radius*height;

温馨提示

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

评论

0/150

提交评论