请教在多个派生类中定义头文件的问题
/////////////////Point.h///////////
//#include <iostream.h>
class Point
{
public:
Point(float, float);
void setPoint(float, float);
floatgetX();
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:
floatradius;
};
//////////////////////////////////////
////////////////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;
Cylinder cy(6.7, 7.8, 8.9, 9.1);
cout<<cy<<endl;
return 0;
}
/////////////////////////////////////////////////////
把注释全去掉,编译运行正常。
但是按注释这样分类,分成3个头文件Point.h, Circle.h, Cylinder.h
四个源文件,Point.cpp, Circle.cpp, Cylinder.cpp, main.cpp
这时编译就出错了,请高手指正。
[解决办法]
#ifndef POINT_H#define POINT_H/* 原Point.h内容 */#endif
[解决办法]
在每个头文件中加上
#ifndef xxx
#define xxx
#endif
用这个块把头文件包起来