码迷,mamicode.com
首页 > 编程语言 > 详细

c++ 类的继承和多态例子

时间:2018-05-13 21:08:23      阅读:241      评论:0      收藏:0      [点我收藏+]

标签:接下来   bsp   idt   速度   +=   改变   center   100%   set   

类的继承例子:

以上个动态银河系的制作为例,假设我们定义了一个星星的类如下:

class Star
{
public:
     Star(){}
     ~Star(){}
 
     void Init();
     void Move();
 
 protected:
     void Draw();
     void NewPos();
     void Remove();
 
     double  m_x = 0;
     int     m_y;
     double  m_step;
     int     m_color;
 };
 
 void Star::Init()
 {
     if (m_x == 0)
     {
         m_x = rand() % SCREEN_WIDTH;
     }
     else
     {
         m_x = 0;
     }
 
     m_y = rand() % SCREEN_HEIGHT;
     m_step = (rand() % 5000) / 1000.0 + 1;
     m_color = (int)(m_step * 255 / 6.0 + 0.5);  // 速度越快,颜色越亮
     m_color = RGB(m_color, m_color, m_color);
 }
 
 void Star::Move()
 {
     Remove();
 
     NewPos();
 
     Draw();
 }
 
 void Star::Draw()
 {
     putpixel((int)m_x, m_y, m_color);
 }
 
 void Star::NewPos()
 {
     m_x += m_step;
     if (m_x > SCREEN_WIDTH)
         this->Init();
 }
 
 void Star::Remove()
 {
     putpixel((int)m_x, m_y, 0);
 }

 接下来我们被要求制作一个矩形的星星我们该怎么做,其实矩形星星和上述的差别就在于draw()和Romove()这两个函数,所以我们可以利用类继承的方法来实现,再使用同函数名覆盖的方法来写类,有三种继承的方式如下表所示:

派生方式 基类的public成员 基类的protected成员 基类的private成员 派生方式引起的访问属性变化概括
private派生 变为private成员 变为private成员 不可见 基类中的非私有成员都成为派生类中的私有成员
protected派生 变为protected成员 变为private成员 不可见 基类中的非私有成员在派生类中的访问属性都降一级
public派生 仍为public成员 仍为protected成员 不可见 基类中的非私有成员在派生类中的访问属性保持不变

所以在这里我们采用public继承的方式,只是把其中的类方法改变即可(这里我们注意在基类中数据并不是private类型,因为若是private类不管子类是什么方式继承都是不可以调用的就算是使用同名函数进行重载):

 class RectStar : public Star
 {
 public:
     RectStar(){}
     ~RectStar(){}
 
     void Move()
     {
         Remove();
         NewPos();
         Draw();
     }
 
 protected:
     void Draw();
     void Remove();
 }; 
 
 void RectStar::Draw()
 {
     setfillcolor(m_color);
     fillrectangle(m_x, m_y, m_x + 3, m_y + 3);
 }
 
 void RectStar::Remove()
 {
     clearrectangle(m_x, m_y, m_x + 4, m_y + 3);
 }

 

c++ 类的继承和多态例子

标签:接下来   bsp   idt   速度   +=   改变   center   100%   set   

原文地址:https://www.cnblogs.com/yskn/p/9033133.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!