掌握了C++多态的特性,写英雄联盟的代码又可以少几行!

01  LOL 英雄联盟游戏需求分析

下面我们用设计 LOL 英雄联盟游戏的英雄的例子,说明多态为什么可以在修改或增加功能的时候,可以较少的改动代码。

LOL 英雄联盟是 5v5 竞技游戏,游戏中有很多英雄,每种英雄都有一个「类」与之对应,每个英雄就是一个「对象」。

英雄之间能够互相攻击,攻击敌人和被攻击时都有相应的动作,动作是通过对象的成员函数实现的。

下面挑了五个英雄:

  ● 探险家 CEzreal

  ● 盖楼 CGaren

  ● 盲僧 CLeesin

  ● 无极剑圣 CYi

  ● 瑞兹 CRyze

基本思路:

1、为每个英雄类编写 Attack、FightBack 和 Hurted 成员函数:

  ● Attack 函数表示攻击动作;

  ● FightBack 函数表示反击动作;

  ● Hurted 函数表示减少自身生命值,并表现受伤动作。

  ● 设置基类CHero,每个英雄类都继承此基类

— —

 

02  非多态的实现方式

有 n 种英雄,CYi 类中就会有 n 个 Attack 成员函数,以及 n 个 FightBack 成员函数。对于其他类也如此。

如果游戏版本升级,增加了新的英雄寒冰艾希 CAshe,则程序改动较大。所有的类都需要增加两个成员函数:

这样工作量是非常大的!!非常的不人性,所以这种设计方式是非常的不好!

— —

 

03  多态的实现方式

用多态的方式去实现,就能得知多态的优势了,那么上面的栗子改成多态的方式如下:

如果增加了新的英雄寒冰艾希 CAshe,只需要编写新类CAshe,不再需要在已有的类里专门为新英雄增加:

所以已有的类可以原封不动,那么使用多态的特性新增英雄的时候,可见改动量是非常少的。

多态使用方式:

根据多态的规则,上面的(1),(2),(3)进入到 CYi::Attack 函数后 

分别调用:

所以要养成好习惯:

● 一个类如果定义了虚函数,则应该将析构函数也定义成虚函数;

● 或者,一个类打算作为基类使用,也应该将析构函数定义成虚函数。

● 注意:构造函数不能定义成虚构造函数。


对于热爱编程的人来说,有一群一起学习一起解惑的小伙伴很重要!

小编有一个C/C++编程学习交流俱乐部,【点击进入】!

还有编程学习文件(源码,零基础教程,项目实战教学视频),欢迎初学者和正在进阶中的小伙伴们!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章