实验6多态性与虚函数

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

[实验目的]

1、了解多态性的概念;

2、了解虚函数的用途及使用方法;

3、了解纯虚函数和抽象类的概念和用法。

[实验要求]

给出以下各实验内容的源程序代码,并把编译、运行过程中出现的问题以及解决方法填入实验报告中,按时上交。

[实验学时]

2学时。

[实验内容]

1、写一个程序,定义抽象基类Shape,由它派生出3个派生类:Circle(圆形)、Square(正方形)、Rectangle(矩形)。利用指针、虚函数printArea()分别输出以上三者的面积,3个图形的数据在定义对象时给定。

[源程序]

#include

using namespace 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()const{return 3.14*r*r;}

virtual void display()const

{

cout<<"圆面积"<

}

private:

double r;

};

class Rectangle:public Shape

{

public:

Rectangle(double a,double b):l(a),w(b){}

virtual float area()const{return l*w;}

virtual void display()const

{

cout<<"矩形面积"<

}

private:

double l;

double w;

};

class Square:public Shape

{

public:

Square(double a):a1(a){}

virtual float area()const{return a1*a1;}

virtual void display()const

{

cout<<"正方形面积"<

}

private:

double a1;

};

int main()

{

Circle c1(5);

Rectangle r1(5,8);

Square s1(2.5);

Shape *p[3]={&c1,&r1,&s1};

int i;

double m=0.0;

for (i=0;i<3;i++)

{

p[i]->display();

m=m+p[i]->area();

}

cout<<"总面积:"<

}

2、定义Point(点)类,由Point类派生出Circle(圆)类,再由Circle类派生出Cylinder(圆柱体)类。将类的定义部分分别作为3个头文件(.h文件),对它们的成员函数的声明部分分别作为3个源文件(.cpp文件),在主函数(.cpp 文件)中用#include命令把它们包含进来,形成一个完整的程序,并上机运行。

[源程序]

//Point.h

class Point

{

public:

Point(float a=0,float b=0);

void display();

protected:

float x,y;

};

//Point.cpp

#include

#include"Point.h"

Point::Point(float a,float b)

{

x=a;

y=b;

}

void Point::display()

{

cout<<"Point:"<

}

//Circle.h

class Circle:public Point

{

public:

Circle(float x=0,float y=0,float r=0);

void display();

protected:

float radius;

};

//Circle.cpp

#include

#include"Point.h"

#include"Circle.h"

Circle::Circle(float a,float b,float r):Point(a,b),radius(r){}

void Circle::display()

{

cout<<"Circle:"<

cout<<"x="<

cout<<"y="<

cout<<"radius="<

cout<<"area="<

cout<

}

//Cylinder.h

class Cylinder:public Circle

{

public:

Cylinder (float x=0,float y=0,float r=0,float h=0);

void display();

protected:

float height;

};

//Cylinder.cpp

#include

#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<<"Cylinder:"<

cout<<"x="<

相关文档
最新文档