任务描述 本关任务:编写一个程序,定义抽象基类Shape,由它派生出5个派生类:Circle(圆形)、Square(正方形)、Rectangle(矩形)、Trapezoid(梯形)、Triangle(三角形)。用虚函数分别计算几种图形面积,并求它们的和。要求用基类指针数组,使它每一个元素指向一个派生类对象。 相关知识 为了完成本关任务,你需要掌握:1.抽象基类,2.指针数组。 编程要求 根据提示,在右侧编辑器补充代码。 测试说明 平台会对你编写的代码进行测试: 测试依次输入:圆形类对象的半径、正方形类对象的边长、矩形类对象的宽和高、梯形的上底、下底和高、三角形类对象的底和高12.6,3.5,4.5,8.4,2.0,4.5,3.2,4.5,8.4; 预期输出: total of all areas=574.109 开始你的任务吧,祝你成功!
时间: 2024-03-15 20:41:35 浏览: 348
#include <iostream>
using namespace std;
class Shape{
public:
virtual double getArea()=0; //抽象函数
};
class Circle:public Shape{
double r;
public:
Circle(double ra){r=ra;}
virtual double getArea(){return 3.14*r*r;}
};
class Square:public Shape{
double len;
public:
Square(double l){len=l;}
virtual double getArea(){return len*len;}
};
class Rectangle:public Shape{
double w,h;
public:
Rectangle(double wd,double ht){w=wd;h=ht;}
virtual double getArea(){return w*h;}
};
class Trapezoid:public Shape{
double up,down,h;
public:
Trapezoid(double u,double d,double he){up=u;down=d;h=he;}
virtual double getArea(){return (up+down)*h/2;}
};
class Triangle:public Shape{
double b,h;
public:
Triangle(double ba,double he){b=ba;h=he;}
virtual double getArea(){return b*h/2;}
};
int main(){
Shape *p[5];
p[0]=new Circle(12.6);
p[1]=new Square(3.5);
p[2]=new Rectangle(4.5,8.4);
p[3]=new Trapezoid(3.2,4.5,8.4);
p[4]=new Triangle(4.5,2.0);
double sum=0;
for(int i=0;i<5;i++){
sum+=p[i]->getArea();
}
cout<<"total of all areas="<<sum<<endl;
return 0;
}
阅读全文