多态性和虚函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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