#include <iostream>
using namespace std;
class Point //点类
{
public:
Point():x(0),y(0){}
Point(double x0,double y0):x(x0),y(y0){}
~Point(){}
friend ostream &operator<<(ostream &out,const Point &p);
protected:
double x,y; //横纵坐标
};
ostream &operator<<(ostream &out,const Point & p)
{
out<<"ponit:("<<p.x<<","<<p.y<<")";
return out;
}
class Circle:public Point //圆类
{
public:
Circle(double a,double b,double c):Point(a,b),radius(c){}
~Circle(){}
double area() const; //求圆面积
double perimeter() const;//求圆周长
friend ostream& operator<<(ostream &out,const Circle &p);
protected:
double radius; //半径
};
double Circle::area() const
{
double n;
n=3.14*radius*radius;
return n;
}
double Circle::perimeter() const
{
double n;
n=3.14*radius*2;
return n;
}
ostream& operator<<(ostream &out,const Circle &p)
{
out<<"center=("<<p.x<<","<<p.y<<"),r="<<p.radius<<",area="<<p.area();
return out;
}
class Cylinder:public Circle//圆柱类
{
public:
Cylinder(double a,double b,double c,double d):Circle(a,b,c),height(d){}
double area() const; //求圆柱表面积
double volume() const; //求圆柱体积
friend ostream& operator<<(ostream &out,const Cylinder &p);
protected:
double height; //高
};
double Cylinder::area() const
{
double n;
n=Circle::area()*2+perimeter()*height;
return n;
}
double Cylinder::volume() const
{
double n;
n=Circle::area()*height;
return n;
}
ostream& operator<<(ostream &out,const Cylinder &p)
{
out<<"center=("<<p.x<<","<<p.y<<"),r="<<p.radius<<",h="<<p.height
<<",area="<<p.area()<<",volume="<<p.volume();
return out;
}
int main()
{
Point a(2.5,5.6);
cout<<a<<endl;
Circle b(2,1,5);
cout<<b<<endl;
Cylinder c(1,1,2,5);
cout<<c<<endl;
return 0;
}
运行结果: