读书人

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

发布时间: 2012-04-15 18:39:21 作者: rapoo

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

/////////////////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
这时编译就出错了,请高手指正。


[解决办法]

C/C++ code
#ifndef POINT_H#define POINT_H/* 原Point.h内容 */#endif
[解决办法]
在每个头文件中加上
#ifndef xxx
#define xxx
#endif
用这个块把头文件包起来

读书人网 >C++

热点推荐