NVI和函数指针代替虚函数

来源:互联网 发布:电机控制算法书籍 编辑:程序博客网 时间:2024/05/16 19:32

NVI(Non-Virtual Interface)

#include<iostream>using namespace std;/////////////////////class GameCharacter{public:int GetHealthValue() const{int retVal = doHealthValue();return retVal;}GameCharacter(int healthValue = 222){this->healthValue = healthValue;}private:int healthValue;virtual int doHealthValue() const{return healthValue;}};//////////////////////////////////////////void main(){GameCharacter* gamePeople = NULL;gamePeople = new GameCharacter();cout << gamePeople->GetHealthValue() << endl;delete gamePeople;}/*222*/

函数指针:

#include<iostream>using namespace std;class GameCharacter;int defaultHealthCalc( GameCharacter& gc);class GameCharacter{public:    typedef int (* HealthCalcFunc)(GameCharacter&);explicit GameCharacter(HealthCalcFunc hcf = defaultHealthCalc):healthFunc(hcf){healthValue = 666;}    int GetHealthValue() {return healthFunc(*this);}void SetHealthValue(int healthValue = 222){this->healthValue = healthValue;}int GetHealthValue2(){return healthValue;}private:HealthCalcFunc healthFunc;int healthValue;};int defaultHealthCalc( GameCharacter& gc){gc.SetHealthValue(444);return gc.GetHealthValue2();}void main(){GameCharacter gamePeople;cout << gamePeople.GetHealthValue() << endl;}/*444*/


 

原创粉丝点击