Responsive image

问题 E: 图形基类和派生类-oop

问题 E: 图形基类和派生类-oop

时间限制: 1 Sec  内存限制: 128 MB
提交: 318  解决: 530
[提交][状态][讨论版][命题人:]

题目描述

声明抽象基类Shape,由它派生出5个派生类;Circle(圆形)Square(正方形)、Rectangle(矩形)、Trapezoid(梯形)、Triangle(三角形),分别计算几种图形的面积,并求它们的和并显示出来。请按照要求选择如下一种方式编程实现。 注意圆周率取3.14.


实现方式:

1.使用继承和派生完成上述功能。

2.使用动态多态完成上述功能,提示:基类指针+派生类对象。

3. 使用派生类构造函数知识完成上述功能。

4. 作业竞赛要求的其他方式

输入描述

输入圆的半径
输入正方形的边长
输入矩形的长和宽
输入梯形的上底、下底、高
输入三角形的底、高

输出描述

输出每种图形的面积、所有图形面积的总和。每个面积占一行,面积前显示图形名称

样例输入

12.6
3.5
4.5 8.4
2.0 4.5 3.2
4.5 8.4

样例输出

Circle:498.51
Square:12.25
Rectangle:37.80
Trapezoid:10.40
Triangle:18.90
total of all areas=577.86

代码填空:

#include<iostream>
#include<iomanip>
using namespace std;
class Shape
{
public:
    virtual double area() const=0;
};

class Circle:public Shape
//pdsu-c1
//pdsu-c1

class Square:public Shape
//pdsu-c2
//pdsu-c2

class Rectangle:public Shape
//pdsu-c3
//pdsu-c3

class Trapezoid:public Shape
//pdsu-c4
//pdsu-c4

class Triangle:public Shape
//pdsu-c5
//pdsu-c5

int main()
{
    double a,b,c;
    cin>>a;
    Circle circle(a);
    cin>>a;
    Square square(a);
    cin>>a>>b;
    Rectangle rectangle(a,b);
    cin>>a>>b>>c;
    Trapezoid trapezoid(a,b,c);
    cin>>a>>b;
    Triangle triangle(a,b);
    Shape *pt[5]=
    {
        &circle,&square,&rectangle,&trapezoid,&triangle
    };
    double areas=0.0;
    for(int i=0; i<5; i++)
    {
        //pdsu-c6
        //pdsu-c6
    }
     cout<<setiosflags(ios::fixed)<<setprecision(2);
     cout<<"Circle:"<<pt[0]->area()<<endl;
     cout<<"Square:"<<pt[1]->area()<<endl;
     cout<<"Rectangle:"<<pt[2]->area()<<endl;
     cout<<"Trapezoid:"<<pt[3]->area()<<endl;
     cout<<"Triangle:"<<pt[4]->area()<<endl;
     cout<<"total of all areas="<<areas<<endl;

    return 0;
}
                        
                    
[提交][状态]
ACM算法攻关部