友元族的实现

来源:互联网 发布:宋慧乔 知乎 编辑:程序博客网 时间:2024/06/03 18:41
/********************************************************************  文件名 :     TimeEvtCenter.h  创建人  :    Clark/陈泽丹  创建时间 :   2012-5-7 描述:  友元族的实现  后面进一步, 会把友元族触碰函数用双分派的方法实现反射 *********************************************************************/ #include <iostream>using namespace std;class NPC{public:NPC():HP(100),Armor(2){}void Show(){ cout<<HP<<endl; cout<<Armor<<endl; }private:int HP;int Armor;template<int v>friend class HitRetsult;};class Magic{public:Magic():Hurt(20){}private:int Hurt;template<int v>friend class HitRetsult;};class Item{public:Item():Armor(3){}private:int Armor;template<int v>friend class HitRetsult;};template<int v>class HitRetsult;const int NPC_MAGIC = 0;template<>class HitRetsult<NPC_MAGIC>{public:void operator() (NPC* _pNpc, Magic* _pMagic){_pNpc->HP = _pNpc->HP - _pMagic->Hurt;}};const int NPC_ITEM = 1;template<>class HitRetsult<NPC_ITEM>{public:void operator() (NPC* _pNpc, Item* _pItem){_pNpc->Armor = _pNpc->Armor + _pItem->Armor;}};void main(){NPC npc;Magic magic;Item item;npc.Show();HitRetsult<NPC_MAGIC> hitMagic;hitMagic(&npc, &magic);npc.Show();HitRetsult<NPC_ITEM> hitItem;hitItem(&npc, &item);npc.Show();system("pause");  }