#include <iostream>
#include <iomanip>
using namespace std;
class Shape
{
public:
virtual double area()=0;
};
class Circle:public Shape
{
public:
Circle (double r):radius(r){}
virtual double area()
{
return radius*radius*3.1415926;
}
private:
double radius;
};
class Rectangle:public Shape
{
public:
Rectangle(double l,double w):longs(l),wides(w){}
virtual double area()
{
return longs*wides;
}
private:
double longs,wides;
};
class Triangle:public Shape
{
public:
Triangle(double l,double h):length(l),height(h){}
virtual double area()
{
return length*height/2;
}
private:
double length,height;
};
class Trapezoid :public Shape//梯形
{
public:
Trapezoid (double w1,double w2,double h):ulength(w1),dlength(w2),height(h){}
virtual double area()
{
return (ulength+dlength)*height/2;
}
private:
double ulength,dlength,height;
};
class Square:public Shape
{
public:
Square (double a):length(a){}
virtual double area ()
{
return length*length;
}
private:
double length;
};
int main()
{
float r,a,b,w1,w2,w,h;
cout<<fixed<<setprecision(2);
cin>>r;
Circle circle(r);
cin>>a;
Square square(a);
cin>>a>>b;
Rectangle rectangle(a,b);
cin>>w1>>w2>>h;
Trapezoid trapezoid(w1,w2,h);
cin>>w>>h;
Triangle triangle(w,h);
Shape *pt[5]= {&circle,&square,&rectangle,&trapezoid,&triangle};
double areas=0.0;
for(int i=0; i<5; i++)
areas=areas+pt[i]->area();
cout<<"total of all areas="<<areas<<endl;
return 0;
}
/kb/kb/kb