- 1、本文档共4页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
18-郑传明-实验三
实验三 多态性
实验课程名:面向对象程序设计
专业班级: 14软件工程(1)班 学号:201440450118 姓名:郑传明
实验时间: 2015.11.20 实验地点: K4-206 指导教师: 邓丹君
一、实验目的和要求
1.了解两种多态性实现的方法;
2.了解虚函数和纯虚函数的概念与应用,理解虚函数在类的继承层次中的作用,虚函数的引用对程序运行时的影响,能够对使用虚函数的简单程序写出程序结果;
3.掌握抽象类的概念及使用方法。
二、实验内容
1.编写一个程序,计算Circle(圆形)、Square(正方形)、Rectangle(矩形)、Triangle(三角形)、Trapezoid(梯形)的面积与周长。
(1)设计一个图形抽象基类Shape类,以及由它派生出5个类Circle(圆形)类、Square(正方形)类、Rectangle(矩形)类、Triangle(三角形)类、Trapezoid(梯形)类;
(2)在Shape类中包括纯虚函数area和girth;
(3)分别在Circle(圆形)类、Square(正方形)类、Rectangle(矩形)类、Triangle(三角形)类、Trapezoid(梯形)类中定义这两个函数,用于计算面积和周长。
(4)主函数中要求用基类指针数组,使它的每一个元素指向一个派生类对象,分别计算Circle(圆形)类、Square(正方形)类、Rectangle(矩形)类、Triangle(三角形)类、Trapezoid(梯形)类对象的面积和周长。
解答:
(1)源代码:
#includeiostream
#includemath.h
using namespace std;
class Shape
{
public:
virtual double area() const=0;
virtual double girth() const=0;
};
class Circle:public Shape
{
private:
double r;
public:
Circle(double a){r=a;}
virtual double area() const {return 3.1415*r*r;}
virtual double girth() const {return 2*3.1415*r;}
};
class Square:public Shape
{
private:
double a;
public:
Square(double a1){a=a1;}
virtual double area() const{return a*a;}
virtual double girth() const{return 2*a;}
};
class Rectangle:public Shape
{
private:
double w;
double l;
public:
Rectangle(double a1,double a2){w=a1;l=a2;}
virtual double area() const {return w*l;}
virtual double girth() const {return 2*(w+l);}
};
class Triangle:public Shape
{
private:
double a;
double b;
double c;
public:
Triangle(double a1,double a2,double a3){a=a1;b=a2;c=a3;}
virtual double area() const
{
double s;
s=(a+b+c)/2;
return sqrt(s*(s-a)*(s-b)*(s-c));
}
virtual double girth() const {return a+b+c;}
};
class Trapezoid:public Shape
{
private:
double a;
double b;
double c;
double d;
public:
Trapezoid(double a1,double a2,double a3,double a4){a=a1;b=a2;c=a3;d=a4;}
virtual double area() const
{
double s;
s=(a+b+c+d)/2;
return sqrt(s*(s-a)*(s-b)*(s-c)*(s-d));
}
virtual double girth() const {return a+b+c
文档评论(0)