多态性和虚函数

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

多态性和虚函数

Problem A: C++习题抽象基类Description

编写一个程序,声明抽象基类Shape,由它派生出3个派生类:Circle(圆形)、Rectangle(矩形)、Triangle(三角形),用一个函数printArea分别输出以上三者的面积(结果保留两位小数),3个图形的数据在定义对象时给定。

Input

圆的半径

矩形的边长

三角形的底与高

Output

圆的面积

矩形的面积

三角形的面积

Sample Input

12.6

4.5 8.4

4.5 8.4

Sample Output

area of circle = 498.76

area of rectangle = 37.80

area of triangle = 18.90

#include

#include

using namespace std;

class Shape

{

public:

virtual double area()const=0;

};

class Circle:public Shape

{

public:

Circle(double r):radius(r) {}

virtual double area() const

{

return 3.14159*radius*radius;

};

protected:

double radius;

};

class Rectangle:public Shape

{

public:

Rectangle(double w,double h):width(w),height(h) {}

virtual double area() const

{

return width*height;

}

protected:

double width,height;

};

class Triangle:public Shape

{

public:

Triangle(double w,double h):width(w),height(h) {}

virtual double area()const

{

return 0.5*width*height;

}

protected:

double width,height;

};

void printArea(const Shape &s)

{

cout<

}

int main()

{

float r,a,b,w,h;

cout<

cin>>r;

Circle circle(r);

cout<<"area of circle = ";

printArea(circle);

cin>>a>>b;

Rectangle rectangle(a,b);

cout<<"area of rectangle = ";

printArea(rectangle);

cin>>w>>h;

Triangle triangle(w,h);

cout<<"area of triangle = ";

printArea(triangle);

return 0;

}

Problem B: C++习题虚函数-计算图形面积Description

编写一个程序,定义抽象基类Shape,由它派生出5个派生类:Circle(圆形)、Square(正方形)、Rectangle(矩形)、Trapezoid(梯形)、Triangle(三角形)。

用虚函数分别计算几种图形面积,并求它们之和。

要求用基类指针数组,使它每一个元素指向一个派生类对象。Input

圆的半径

正方形的边长

矩形的边长

梯形的上底和下底,高

三角形的底与高

Output

所有图形面积之和(结果保留两位小数)

Sample Input

12.6

3.5

4.5 8.4

2.0 4.5

3.2

4.5 8.4

Sample Output

total of all areas=574.11

#include

#include

using namespace std;

class Shape

{

public:

virtual double area()const=0;

};

class Circle:public Shape

{

public:

Circle(double r):radius(r) {}

virtual double area() const

{

return 3.14159*radius*radius;

};

protected:

double radius;

};

class Square:public Shape

{

public:

Square(double s):side(s) {}

virtual double area() const

相关文档
最新文档