#include <iostream>
using namespace std;
class Point
{
public:
Point(double x=0,double y=0);//初始化点坐标为(0,0)
double getX()const
{
return x;
}
double getY()const
{
return y;
}
void setPoint(double,double);
friend ostream & operator<<(ostream &,const Point &);
protected:
double x,y;
};
Point::Point(double a,double b)
{
x=a;
y=b;
}
void Point::setPoint(double a,double b)
{
x=a;
y=b;
}
ostream & operator<<(ostream &output,const Point &p)
{
output<<"point:["<<p.x<<","<<p.y<<"]"<<endl;
return output;
}
class Circle:public Point
{
public:
Circle(double x=0,double y=0,double r=0);
void setRadius(double);
double getRadius()const ;
double area()const;
friend ostream & operator<<(ostream &,const Circle &);
protected:
double radius;
};
Circle::Circle(double a,double b,double r):Point(a,b),radius(r){}
void Circle::setRadius(double r)
{
radius=r;
}
double Circle::getRadius()const
{
return radius;
}
double Circle::area()const
{
return 3.14159*radius*radius;
}
ostream & operator<<(ostream &output,const Circle &c)
{
output<<"center=["<<c.x<<","<<c.y<<"],r="<<c.getRadius()<<",area="<<c.area()<<endl;
return output;
}
class Cylinder:public Circle
{
public:
Cylinder(double x=0,double y=0,double r=0,double h=0);
void setHeight(double);
double getHeight()const;
double area()const;
double volume()const;
friend ostream & operator<<(ostream &,const Cylinder &);
protected:
double height;
};
Cylinder::Cylinder(double a,double b,double r,double h):Circle(a,b,r),height(h){}
void Cylinder::setHeight(double h)
{
height=h;
}
double Cylinder::getHeight()const
{
return height;
}
double Cylinder::area()const
{
return 2*Circle::area()+2*3.14159*radius*height;//求面积借用Circle的成员函数area的方式为Circle::area()
}
double Cylinder::volume()const
{
return Circle::area()*height;
}
ostream & operator<<(ostream &output,const Cylinder &cy)
{
output<<"center=["<<cy.x<<","<<cy.y<<"],r="<<cy.radius<<",h="<<cy.height<<",area="<<cy.area()<<",volume="<<cy.volume()<<endl;
return output;
}
int main()
{
Point p(3.5,6.4);
cout<<"x="<<p.getX( )<<",y="<<p.getY( )<<endl;
p.setPoint(8.5,6.8);
cout<<"p:"<<p<<endl;
Circle c(1.2,2.2,3.2);
cout<<"original circle:x="<<c.getX()<<",y="<<c.getY()<<",r="<<c.getRadius()<<",area="<<c.area()<<endl;
c.setPoint(5,5);
cout<<"new circle:"<<c;
Cylinder cy1(1.2,2.2,3.2,4.2);
cout<<"original Cylinder:x="<<cy1.getX()<<",y="<<cy1.getY()<<",r="<<cy1.getRadius()<<",h="<<cy1.getHeight()<<",area="<<cy1.area()<<",volume="<<cy1.volume()<<endl;
cy1.setPoint(5,5);
cy1.setRadius(2.1);
cy1.setHeight(3);
cout<<"new Cylinder:"<<cy1;
return 0;
}
运行结果: