#include <iostream>
#include <cmath>
using namespace std;
class Graphical
{
protected:
float perm;
float area;
public:
void virtual Perimeter()=0;
void virtual extent()=0;
virtual ~Graphical(){}
};
class Rectangle:public Graphical
{
private:
float length;
float wide;
public:
Rectangle(){}
Rectangle(float l,float w):length(l),wide(w)
{}
void Perimeter() override
{
perm=2*(length+wide);
cout << "Rectangle Perimeter=" << perm << endl;
}
void extent() override
{
area=length*wide;
cout << "Rectangle extent=" << area << endl;
}
};
class Circle:public Graphical
{
private:
float radius;
public:
Circle(){}
Circle(float r):radius(r)
{}
void Perimeter() override
{
perm=3.14*2*radius;
cout << "Circle Perimeter=" << perm << endl;
}
void extent() override
{
area=3.41*(radius*radius);
cout << "Circle extent=" << area << endl;
}
};
class Triangle:public Graphical
{
private:
int a;
int b;
int c;
public:
Triangle(){}
Triangle(int a,int b,int c):a(a),b(b),c(c)
{}
void Perimeter() override
{
perm=a+b+c;
cout << "Triangle Perimeter=" << perm << endl;
}
void extent() override
{
float p;
p=(a+b+c)/2;
area=sqrt(p*(p-a)*(p-b)*(p-c));
cout << "Triangle extent=" << area << endl;
}
};
void output(Graphical &p)
{
p.Perimeter();
p.extent();
}
int main(int argc, const char *argv[])
{
cout << "1:矩形 2:圆形 3:三角形\n";
int a,b,c,d;
float length,wide;
float radius;
cin>>d;
if(d==1)
{
cout << "输入矩形的长和宽\n";
cin>>length;
cin>>wide;
Rectangle r(length,wide);
output(r);
}
else if(d==2)
{
cout << "输入圆形的半径\n";
cin>>radius;
Circle e(radius);
output(e);
}
else if(d==3)
{
cout << "输入三角形的长宽高\n";
cin>>a;
cin>>b;
cin>>c;
if( (a+b)>c && (a+c)>b && (b+c)>a )
{
Triangle t(a,b,c);
output(t);
}
else
cout << "不是三角形\n";
}
return 0;
}