Circle类的测试函数
int main()
{
Circle c(3.5,2.4,2.0);
cout<<"original circle:/nx="<<c.getX()<<",y="<<c.getY()<<",r="<<c.getRadius()
<<",area="<<c.area()<<endl; //输出圆心坐标,半径和面积
c.setRadius(1.0);
c.setPoint(3.2,2.6);
cout<<"new circle:/n"<<c;
Point &p=c;
cout<<p;
return 0;
}
完整的程序清单:
#include <iostream>
using namespace std;
//------------------------------------------------------------------------
//声明类Point
class Point
{
public:
Point(float a=0,float b=0);
void setPoint(float,float);
float getX() const { return x; } //const 保证安全
float getY() const { return y; }
friend ostream & operator<<(ostream &, const Point &);
protected:
float x,y;
};
//构造函数
Point::Point(float a, float b)
{ x=a; y=b; }
void Point::setPoint(float a, float b)
{ x=a; y=b; }
//重载运算符<<
ostream & operator<<(ostream &output, const Point &p)
{
output<<"("<<p.x<<","<<p.y<<")"<<endl;
return output;
}
//-------------------------------------------------------------------------
//声明Point的派生类Circle
class Circle:public Point
{
public:
Circle(float x=0,float y=0,float r=0);
void setRadius(float);
float getRadius() const;
float area() const;
friend ostream & operator<<(ostream &, const Circle &);
protected:
float radius;
};
Circle::Circle(float x,float y,float r):Point(x,y), radius(r) { }
void Circle::setRadius(float r) { radius=r; }
float Circle::getRadius() const { return radius; }
float Circle::area() const
{ return 3.14*radius*radius; }
ostream & operator<<(ostream & output, const Circle& c)
{
output<<"Center="<<Point(c.x,c.y)<<"/t radius="<<c.radius
<<"/t area="<<c.area()<<endl;
return output;
}
//------------------------------------------------------------------------
//声明Circle的派生类Cylinder
class Cylinder:public Circle
{
public:
Cylinder(float x=0,float y=0,float r=0,float h=0);
float getHeight() const;
void setHeight(float);
float area() const;
float volume() const;
friend ostream & operator<<(ostream &, const Cylinder& );
private:
float height;
};
Cylinder::Cylinder(float x, float y, float r, float h):Circle(x,y,r) , height(h) { }
float Cylinder::getHeight() const
{ return height; }
void Cylinder::setHeight(float h)
{ height=h; }
float Cylinder::area() const //计算圆柱体的表面积
{ return (2*Circle::area()+2*3.14*radius*height) ; }
float Cylinder::volume() const //计算圆柱体的体积
{ return Circle::area()*height; }
ostream & operator<<(ostream &output, const Cylinder& c)
{
output<<Circle(c.x,c.y,c.radius)<<
"h="<<c.height<<"/n area="<<c.area()<<",volume="<<c.volume()<<endl;
return output;
}
//-----------------------------------------------------------------------
//main函数
int main()
{
Cylinder c(3.4,2.5,2.0,10.0);
cout<<Circle(c.getX(),c.getY(),c.getRadius())<<"h="<<c.getHeight()<<",area="<<c.area()
<<",volume="<<c.volume()<<endl; //用系统定义的'<<'输出c的信息
c.setHeight(100.0); //设置高度
c.setPoint(2.1,3.6); //设置圆心
c.setRadius(1); //设置半径
cout<<c; //用重载运算符'<<'输出c的信息
Circle &p=c; //p为Circle类对象的引用
cout<<p;
Point &pt=c; //p为Point类对象的引用
cout<<pt;
return 0;
}