Point类重载

12.1 先建立一个Point()类,包含数据成员x,y(坐标点)。以它为基类,派生出一个Circle()类,增加数据成员r(半径),再以Circle类为直接基类,派生出一个Cylinder(圆柱体)类,再增加数据成员h()。要求编写程序,重载运算符“<<”“>>”,使之能用于输出以上类对象。

对于一个比较大的程序,应当分成若干步骤进行。先声明基类,再声明派生类,逐级进行,分步调试。

(1) 声明基类Point

可写出声明基类Point的部分如下:

#include <iostream>

 

//声明类Point

class Point

{ public:

  Point(float x=0,float y=0);//有默认参数的构造函数

  void setPoint(float,float);                 //设置坐标值

  float getX( ) const { return x;}              //x坐标

  float getY( ) const { return y;}              //y坐标

  friend ostream & operator<<(ostream &,const Point &);//重载运算符“<<”

protected:                                   //受保护成员

  float x,y;

};

//下面定义Point类的成员函数

 

//Point的构造函数

Point::Point(float a,float b)                 //x,y初始化

{x=a;y=b;}

//设置xy的坐标值

void Point::setPoint(float a,float b)         //x,y赋新值

{x=a;y=b;}

//重载运算符“<<”,使之能输出点的坐标

ostream & operator<<(ostream &output,const Point &p)

{output<<"["<<p.x<<","<<p.y<<"]"<<endl;

 return output;

}

以上完成了基类Point类的声明。

现在要对上面写的基类声明进行调试,检查它是否有错,为此要写出main函数。实际上它是一个测试程序。

int main( )

{Point p(3.5,6.4);//建立Point类对象p

 cout<<"x="<<p.getX( )<<",y="<<p.getY( )<<endl;//输出p的坐标值

 p.setPoint(8.5,6.8);                            //重新设置p的坐标值

 cout<<"p(new):"<<p<<endl;                       //用重载运算符“<<”输出p点坐标

}

程序编译通过,运行结果为

x=3.5,y=6.4

p(new):[8.5,6.8]

测试程序检查了基类中各函数的功能,以及运算符重载的作用,证明程序是正确的。

(2) 声明派生类Circle

在上面的基础上,再写出声明派生类Circle的部分:

class Circle:public Point//circlePoint类的公用派生类

{ 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 &);//重载运算符“<<”

 private:

  float radius;

};

 

//定义构造函数,对圆心坐标和半径初始化

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

//设置半径值

void Circle::setRadius(float r)

{radius=r;}

//读取半径值

float Circle::getRadius( ) const { return radius;}

//计算圆面积

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值