实验6多态性与虚函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
序号
实验6多态性与虚函数
[实验目的] ----------------------
1、了解多态性的概念;
2、了解虚函数的用途及使用方法;
3、了解纯虚函数和抽象类的概念和用法。
[实验要求]
给出以下各实验内容的源程序代码,并把编译、运行过程中出现的问题
以及解决方法填入实验报告中,按时上交。
[实验学时]
2学时。
[实验内容]
1、写一个程序,定义抽象基类Shape由它派生出3个派生类:Circle(圆形)、Square正方形)、Rectangle矩形)。利用指针、虚函数printArea()分别输出以上三者的面积,3个图形的数据在定义对象时给定。
[源程序]
#in clude
using n amespace std;
class Shape
{
public:
virtual float area()c on st=0;
virtual void display()c on st=0;
};
class Circle:public Shape
{
public:
Circle(double a):r(a){}
virtual float area()co nst{return 3.14*r*r;}
virtual void display()c onst
{
cout«"圆面积"<
}
private:
double r;
};
class Recta ngle:public Shape
{
public:
Rectangle(double a,double b):l(a),w(b){} virtual float area()c on st{return l*w;} virtual void display()c onst
{
cout«"矩形面积"<
}
private:
double l;
double w;
};
class Square:public Shape
{
public:
Square(double a):a1(a){}
virtual float area()c on st{return a1*a1;} virtual void display()c onst
{
cout«"正方形面积"<
}
private:
double a1;
};
int mai n()
{
Circle c1(5);
Recta ngle 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();
{
coutvv"总面积:"vvmvve ndl;
2、定义Point(点)类,由Point类派生出Circle(圆)类,再由Circle类派生出
Cylinder(圆柱体)类。将类的定义部分分别作为3个头文件(.h文件),对它们的成员函数的声明部分分别作为3个源文件(.cpp文件),在主函数(.cpp
文件)中用#i nclude命令把它们包含进来,形成一个完整的程序,并上机运行。
[源程序]
//Poi nt.h
class Point
{
public:
Point(float a=0,float b=0);
void display();
protected:
float x,y;
};
//Poin t.cpp
#i nclude
#i nclude"Poi nt.h"
Point::Point(float a,float b)
{
x=a;
y=b;
}
void Poin t::display()
{
cout<<"Poi nt:"< } //Circle.h class Circle:public Poi nt { public: Circle(float x=0,float y=0,float r=0); void display。; protected: float radius; }; //Circle.cpp #i nclude #i nclude"Poi nt.h" #i nclude"Circle.h" Circle::Circle(float afloat b,float r):Point(a,b),radius(r){} void Circle::display() { cout<<"Circle:"< cout<<"radius="< cout«e ndl; } //Cyli nder.h class Cyli nder:public Circle { public: Cyli nder (float x=0,float y=0,float r=0,float h=0); void display(); protected: float height; }; //Cyli nder.cpp #i nclude #i nclude"Poi nt.h" #i nclude"Circle.h" #i nclude"Cyli nder.h" Cylinder::Cylinder(float a,float b,float r,float h):Circle(a,b,r),height(h){} void Cyli nder::display() { cout<<"Cyli nder:"< cout cout cout coutvv"area="v<2*radius*radius*3.14+2*3.14*radius*heightvve ndl;