请问在多个派生类中定义头文件的有关问题

请教在多个派生类中定义头文件的问题

/////////////////Point.h///////////

//#include <iostream.h>

class Point
{
public:
Point(float, float);
void setPoint(float, float);
float getX();
float getY();
friend ostream & operator<<(ostream &, Point &);
private:
float x;
float y;
};

////////////////////////////////////

////////////////Circle.h////////////

//#include "Point.h"
//#include <iostream.h>

class Circle: public Point
{
public:
Circle(float, float, float);
void setRadius(float);
float getRadius();
float area();
friend ostream &operator<<(ostream &, Circle &);

private:
float radius;
};

//////////////////////////////////////

////////////////Cylinder.h////////////

//include "Circle.h"
//#include <iostream.h>

class Cylinder:public Circle
{
public:
Cylinder(float,float,float,float);
void setHigh(float);
float getHigh();
float area();
float volume();
  friend ostream &operator<<(ostream &, Cylinder &);

private:
float high;
};

///////////////////////////////////////

//////////////Point.cpp////////////////

//#include "Point.h"
//#include <iostream.h>

Point::Point(float a, float b):x(a),y(b){}

void Point::setPoint(float a, float b)
{
x=a; y=b;
}

float Point::getX() { return x; }
float Point::getY() { return y; }

ostream &operator<<(ostream &output, Point &p)
{
output<<"["<<p.getX()<<","<<p.getY()<<"]";
return output;
}

///////////////////////////////////////

//////////////////Circle.cpp/////////////////////

//#include "Circle.h"
//#include <iostream.h>

Circle::Circle(float a, float b, float r):Point(a,b),radius(r){}

void Circle::setRadius(float r) { radius=r; }

float Circle::getRadius() { return radius; }
float Circle::area() { return 3.14*radius*radius; }

ostream &operator<<(ostream &output, Circle &c)
{
output<<"["<<c.getX()<<","<<c.getY()<<"], "<<"r="<<c.getRadius()
<<", area="<<c.area();
return output;
}

////////////////////////////////////////////////////

/////////////////////Cylinder.cpp////////////////////

//#include "Cylinder.h"
//#include <iostream.h>

Cylinder::Cylinder(float a, float b, float r, float h):Circle(a,b,r), high(h){}

void Cylinder::setHigh(float h) { high=h; }
float Cylinder::getHigh() { return high; }

float Cylinder::area()
{
return 2*Circle::area()+3.14*2*Circle::getRadius()*high;
}

float Cylinder::volume()
{
return Circle::area()*high;
}

ostream &operator<<(ostream &output, Cylinder &cy)
{
output<<"["<<cy.getX()<<","<<cy.getY()<<"], "<<"r="<<cy.getRadius()
<<", area="<<cy.area()<<", volume="<<cy.volume();
return output;
}

/////////////////////////////////////////////////////

////////////////main.cpp////////////////////////

#include "Point.h"
#include "Circle.h"
#include "Cylinder.h"
#include <iostream.h>

int main()
{
Point p(1.2, 2.3);
cout<<p<<endl;

Circle c(3.4,4.5,5.6);
cout<<c<<endl;