Shape是一个几何图形的基类,它至少有求自身周长函数Circumference()和求自身面积函数Area()。从Shape类派生出Circle类、Ellipse类、Triangle类和Rectan

来源:互联网 发布:机械动态图制作软件 编辑:程序博客网 时间:2024/06/08 12:38

#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;

}

原创粉丝点击