除寻函数外的其他多态方法

Posted xiongxinxzy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了除寻函数外的其他多态方法相关的知识,希望对你有一定的参考价值。

关键点一:将虚函数定义为private然后用一个非虚函数来包装它

 1 class GameCharacter{
 2 public:
 3     int healthValue()const{
 4         ...
 5         int retVal = doHealthValue();
 6         ...
 7         return retVal;
 8     }
 9 private:
10     virtual int doHealthValue() const{
11         ...
12     }
13 }

以上形式不同的任务的派生类可以继承GameCharacter基类,重写自己的private的费血虚函数,在调用非虚函数的过程中会因为多台而动态绑定。

 

关键点二:以指针的形式来实现多态

 1 class GameCharater;
 2 int defaultHealthCalc(const GameCharacter& gc);
 3 class GameCharacter{
 4 public:
 5     typedef int(*HealthCalcFunc)(const GameCharacter&);
 6     explicit GameCharacter(HealthCalcFunc hcf = defaultHealthCalc)
 7         :healthFunc(hcf)
 8     {}
 9     int healthValue() const
10     {
11         return healthFunc(*this);
12     }
13     ...
14 private:
15     HealthCalcFunc healthFunc;
16 };
17 
18 class EvilBadGuy :public GameCharacter{
19 public:
20     explicit EvilBadGuy(HealthCalcFunc hcf = defaultHealthCalc)
21         :GameCharacter(hcf){
22         ...
23     }
24     ...
25 };
26 int loseHealthQ(const GameCharacter&);
27 int loseHealthS(const GameCharacter&);
28 
29 EvilBadGuy ebg1(loseHealthQ);
30 EvilBadGuy ebg2(loseHealthQ);

以上代码,每个类型的任务都去继承GameCharater类,这个类的特点是他能够接收一个指针然后控制血量。

这样做相比于将掉血函数设置为类的成员函数有以下特点:

1.每个对象都可以拥有自己的掉血函数。

2.掉血函数在运行期可变。

以上是关于除寻函数外的其他多态方法的主要内容,如果未能解决你的问题,请参考以下文章

面向对象的三大特性:继承封装多态

面向对象之:三大特性:继承(已讲),封装,多态

面向对象相关

Python面向对象之:三大特性:继承,封装,多态。

Java面向对象编程:封装,继承,多态

几个关于js数组方法reduce的经典片段