#include<iostream>
using namespace std;
#define PI 3.141592653
#include<math.h>
class Shape
{
public:
virtual float Circumference()=0;//求自身周长
virtual float Area()=0;//求自身面积
};
class Circle:public Shape
{
public:
Circle(float R)
{
CR=R;
}
float Circumference()
{
return 2*PI*CR;
}
float Area()
{
return float(PI*CR*CR);
}
private:
float CR;
};
class Ellipse:public Shape
{
public:
Ellipse(float a1,float b1)
{
a=a1;
b=b1;
}
float Circumference()
{
float temp1=(float)(1.5)*(a+b);
float temp2=(float)sqrt(a*b);
return (float)PI*(temp1-temp2);
}
float Area()
{
return float(PI*a*b);
}
private:
float a;
float b;
};
class Triangle:public Shape
{
public:
Triangle(float a1,float b1,float c1)
{
a=a1;
b=b1;
c=c1;
}
float Circumference()
{
return a+b+c;
}
float Area()
{
float p=(a+b+c)/2;
return (float)sqrt(p*(p-a)*(p-b)*(p-c));
}
private:
float a;
float b;
float c;
};
class Rectangle:public Shape
{
public:
Rectangle(float a1,float b1)
{
a=a1;
b=b1;
}
float Circumference()
{
return 2*(a+b);
}
float Area()
{
return float(a*b);
}
private:
float a;
float b;
};
void sum(Shape *p[4],int n,float &Cir,float &Are)
{
for(int i=0;i<n;i++)
{
Cir+=p[i]->Circumference();/*周长之和*/
Are+=p[i]->Area();/*面积之和*/
}
}
void main()
{
Shape *p[4];
Circle circle1(1.0);
Ellipse ellipse1(2.0,3.0);
Triangle triangle1(3.0,4.0,5.0);
Rectangle rectangle1(3.0,4.0);
p[0]=&circle1;
p[1]=&ellipse1;
p[2]=&triangle1;
p[3]=&rectangle1;
float Cir=0,Are=0;
sum(p,4,Cir,Are);
cout<<"周长总和"<<Cir<<endl;
cout<<"面积总和"<<Are<<endl;
}