polymorphism多态

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;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值