#include "math.h"
#include <iostream>
using namespace std;
class Shape
{
public :
virtual float area( ) const {return 0.0;}
virtual void shapeName() const=0;
};
class Circle:public Shape
{
public :
Circle(float r):radius(r){}
void setRadius(float r)
{
radius=r;
}
virtual float area() const {return 3.14*radius*radius;}
virtual void shapeName() const {cout<<"Circle"<<endl;}
friend ostream & operator <<(ostream &,Circle &);
private:
float radius;
};
ostream & operator <<(ostream & output,Circle &c)
{
output<<"radius="<<c.radius<<",area()="<<c.area()<<endl;
return output;
}
class Rectangle:public Shape
{
public :
Rectangle(float a,float b)
{
x=a;
y=b;
}
void setRect(float a,float b)
{
x=a;
y=b;
}
virtual float area() const {return x*y;}
virtual void shapeName() const {cout<<"Rectangle"<<endl;}
friend ostream & operator <<(ostream &,Rectangle &);
private:
float x;
float y;
};
ostream & operator <<(ostream & output,Rectangle &r)
{
output<<"x="<<r.x<<",y="<<r.y<<",area()="<<r.area()<<endl;
return output;
}
class Triangle:public Shape
{
public :
Triangle(float a,float b,float c)
{
x=a;
y=b;
z=c;
}
void setTri(float a,float b,float c)
{
x=a;
y=b;
z=c;
}
virtual float area() const
{
float s=0;
float sum=0;
if((x+y>z)&&(x+z>y)&&(y+z)>x)
{
s=(x+y+z)/2;
sum=sqrt(s*(s-x)*(s-y)*(s-z));
return sum;
}
else
{
cout<<"can not shape triangle"<<endl;
return 0;
}
}
virtual void shapeName() const {cout<<"Triangle"<<endl;}
friend ostream & operator <<(ostream &,Triangle &);
private:
float x;
float y;
float z;
};
ostream & operator <<(ostream & output,Triangle &t)
{
output<<"x="<<t.x<<",y="<<t.y<<",z="<<t.z<<",area()="<<t.area()<<endl;
return output;
}
int main ()
{
float sum=0;
Shape *p;
Circle c(5);
c.shapeName();
cout<<c<<endl;
p=&c;
sum=sum+p->area();
Rectangle r(3,4);
r.shapeName();
cout<<r<<endl;
p=&r;
sum=sum+p->area();
Triangle t(6,7,8);
t.shapeName();
cout<<t<<endl;
p=&t;
sum=sum+p->area();
cout<<"sum ="<<sum<<endl;
c.setRadius(10);
cout<<c<<endl;
r.setRect(5,8);
cout<<r<<endl;
t.setTri(3,4,5);
cout<<t<<endl;
return 0;
}
#include <iostream>
using namespace std;
class Shape
{
public :
virtual float area( ) const {return 0.0;}
virtual void shapeName() const=0;
};
class Circle:public Shape
{
public :
Circle(float r):radius(r){}
void setRadius(float r)
{
radius=r;
}
virtual float area() const {return 3.14*radius*radius;}
virtual void shapeName() const {cout<<"Circle"<<endl;}
friend ostream & operator <<(ostream &,Circle &);
private:
float radius;
};
ostream & operator <<(ostream & output,Circle &c)
{
output<<"radius="<<c.radius<<",area()="<<c.area()<<endl;
return output;
}
class Rectangle:public Shape
{
public :
Rectangle(float a,float b)
{
x=a;
y=b;
}
void setRect(float a,float b)
{
x=a;
y=b;
}
virtual float area() const {return x*y;}
virtual void shapeName() const {cout<<"Rectangle"<<endl;}
friend ostream & operator <<(ostream &,Rectangle &);
private:
float x;
float y;
};
ostream & operator <<(ostream & output,Rectangle &r)
{
output<<"x="<<r.x<<",y="<<r.y<<",area()="<<r.area()<<endl;
return output;
}
class Triangle:public Shape
{
public :
Triangle(float a,float b,float c)
{
x=a;
y=b;
z=c;
}
void setTri(float a,float b,float c)
{
x=a;
y=b;
z=c;
}
virtual float area() const
{
float s=0;
float sum=0;
if((x+y>z)&&(x+z>y)&&(y+z)>x)
{
s=(x+y+z)/2;
sum=sqrt(s*(s-x)*(s-y)*(s-z));
return sum;
}
else
{
cout<<"can not shape triangle"<<endl;
return 0;
}
}
virtual void shapeName() const {cout<<"Triangle"<<endl;}
friend ostream & operator <<(ostream &,Triangle &);
private:
float x;
float y;
float z;
};
ostream & operator <<(ostream & output,Triangle &t)
{
output<<"x="<<t.x<<",y="<<t.y<<",z="<<t.z<<",area()="<<t.area()<<endl;
return output;
}
int main ()
{
float sum=0;
Shape *p;
Circle c(5);
c.shapeName();
cout<<c<<endl;
p=&c;
sum=sum+p->area();
Rectangle r(3,4);
r.shapeName();
cout<<r<<endl;
p=&r;
sum=sum+p->area();
Triangle t(6,7,8);
t.shapeName();
cout<<t<<endl;
p=&t;
sum=sum+p->area();
cout<<"sum ="<<sum<<endl;
c.setRadius(10);
cout<<c<<endl;
r.setRect(5,8);
cout<<r<<endl;
t.setTri(3,4,5);
cout<<t<<endl;
return 0;
}