当前位置: 首页 > news >正文

厦门市建设工程造价网站旅游网站建设方案

厦门市建设工程造价网站,旅游网站建设方案,网站架构教程,聊城开发区网络公司排名《C新经典设计模式》之第18章 备忘录模式 备忘录模式.cpp 备忘录模式.cpp #include iostream #include vector #include memory using namespace std;// 保存对象内部状态#xff0c;必要时恢复 // 在不破坏封装性的前提下#xff0c;捕获对象的内部… 《C新经典设计模式》之第18章 备忘录模式 备忘录模式.cpp 备忘录模式.cpp #include iostream #include vector #include memory using namespace std;// 保存对象内部状态必要时恢复 // 在不破坏封装性的前提下捕获对象的内部状态并保存之后可将对象恢复到原先保存的状态 // 3种角色 // Originator原发器普通业务类可以创建备忘录用于保存其当前的内部状态之后用备忘录恢复内部状态 // Memento备忘录存储原发器对象某个瞬间的内部状态 // CareTaker(负责人/管理者)保存和传递备忘录不知道备忘录细节不能检查或操作备忘录namespace ns1 {class FighterMemento // 玩家主角相关的备忘录类{friend class Fighter; // 友元类Fighter可以访问本类的私有成员函数// 玩家主角类中要保存起来的数据就放到这里来int m_life; // 生命值int m_magic; // 魔法值int m_attack; // 攻击力private: // 构造函数用private修饰以防止在外部被随意创建FighterMemento(int life, int magic, int attack) : m_life(life), m_magic(magic), m_attack(attack) {}private: // 提供一些供Fighter类来访问的接口用private修饰防止被任意类访问int getLife() const { return m_life; }void setLife(int life) { m_life life; }int getMagic() const { return m_magic; }void setMagic(int magic) { m_magic magic; }int getAttack() const { return m_attack; }void setAttack(int attack) { m_attack attack; }};class Fighter // 玩家主角类{ // 角色属性int m_life; // 生命值int m_magic; // 魔法值int m_attack; // 攻击力public:Fighter(int life, int magic, int attack) : m_life(life), m_magic(magic), m_attack(attack) {}public: // 将玩家数据写入备忘录创建备忘录并在其中存储了当前状态shared_ptrFighterMemento createMomento() const{shared_ptrFighterMemento back(new FighterMemento(m_life, m_magic, m_attack));return back;// return make_sharedFighterMemento(m_life, m_magic, m_attack);}void restoreMomento(const shared_ptrFighterMemento pfm) // 从备忘录中恢复玩家数据{m_life pfm-m_life; // 友元类m_magic pfm-getMagic();m_attack pfm-getAttack();}void setToDead() { m_life 0; } // 为测试目的引入的接口设置玩家的生命值为0玩家死亡void displayInfo() const // 用于输出一些信息{cout The players current HP, magic and attack power are respectively m_life , m_magic , m_attack endl;}};class FCareTaker // 管理者负责人类{shared_ptrFighterMemento m_pfm; // 指向备忘录对象的指针public:FCareTaker(const shared_ptrFighterMemento ptmpfm nullptr) : m_pfm(ptmpfm) {} // 形参是指向备忘录对象的指针shared_ptrFighterMemento getMemento() const { return m_pfm; } // 获取指向备忘录对象的指针void setMemento(const shared_ptrFighterMemento ptmpfm) { m_pfm ptmpfm; } // 保存指向备忘录对象的指针};class FCareTaker2 // 支持多个快照的负责人管理者类{vectorshared_ptrFighterMemento m_pfmContainer; // 存储备忘录对象指针的容器public:void push(const shared_ptrFighterMemento ptmpfm) { m_pfmContainer.emplace_back(ptmpfm); } // 保存指向备忘录对象的指针shared_ptrFighterMemento pop(){if (m_pfmContainer.empty())return nullptr;return m_pfmContainer.back();}shared_ptrFighterMemento getMemento(int index) const // 获取指向备忘录对象的指针{if (index 0 index m_pfmContainer.size())return m_pfmContainer[index];return nullptr;}}; }int main() { #if 0using namespace ns1;shared_ptrFighter p_fighter(new Fighter(800, 200, 300));// 1显示玩家主角在与BOSS战斗之前的信息p_fighter-displayInfo();// 2为玩家主角类对象创建一个备忘录对象其中保存了当前主角类对象中的必要信息shared_ptrFighterMemento p_fighterMemo p_fighter-createMomento();// 3玩家与BOSS开始战斗cout The protagonist of the player and BOSS began to fight fiercely------ endl;p_fighter-setToDead(); // 玩家主角在与BOSS战斗中生命值最终变成0而死亡被BOSS击败p_fighter-displayInfo(); // 显示玩家主角在与BOSS战斗之后的信息// 4因为在与BOSS战斗之前已经通过NPC保存了游戏进度这里模拟载入游戏进度恢复玩家主角类对象的数据让其可以与BOSS再次战斗cout Players recover their information through memos------ endl;p_fighter-restoreMomento(p_fighterMemo);p_fighter-displayInfo(); // 显示玩家主角通过备忘录恢复到战斗之前的信息 #endif#if 0using namespace ns1;shared_ptrFighter p_fighter(new Fighter(800, 200, 300));// 1显示玩家主角在与BOSS战斗之前的信息p_fighter-displayInfo();// 2为玩家主角类对象创建一个备忘录对象其中保存了当前主角类对象中的必要信息shared_ptrFCareTaker pfcaretaker(new FCareTaker(p_fighter-createMomento()));// 3玩家与BOSS开始战斗cout The protagonist of the player and BOSS began to fight fiercely------ endl;p_fighter-setToDead(); // 玩家主角在与BOSS战斗中生命值最终变成0而死亡被BOSS击败p_fighter-displayInfo(); // 显示玩家主角在与BOSS战斗之后的信息// 4因为在与BOSS战斗之前已经通过NPC保存了游戏进度这里模拟载入游戏进度恢复玩家主角类对象的数据让其可以与BOSS再次战斗cout Players recover their information through memos------ endl;p_fighter-restoreMomento(pfcaretaker-getMemento());p_fighter-displayInfo(); // 显示玩家主角通过备忘录恢复到战斗之前的信息 #endif#if 1using namespace ns1;shared_ptrFighter p_fighter2(new Fighter(800, 200, 300));shared_ptrFCareTaker2 pfcaretaker2(new FCareTaker2());pfcaretaker2-push(p_fighter2-createMomento()); // 做第一次快照吗此快照玩家生命值为800p_fighter2-setToDead(); // 改变玩家主角的生命值pfcaretaker2-push(p_fighter2-createMomento()); // 做第二次快照此快照玩家生命值为0p_fighter2-displayInfo(); // 玩家主角生命值应该为0cout ------------------ endl;// 当前玩家生命值为0恢复第一次快照也就是恢复玩家生命值为800p_fighter2-restoreMomento(pfcaretaker2-getMemento(0));p_fighter2-displayInfo(); // 玩家主角生命值应该恢复为800 #endifcout Over!\n;return 0; }
http://www.dnsts.com.cn/news/95515.html

相关文章:

  • 电商网站建设市场专业网络推广服务
  • 阜宁建设网站的公司wordpress固定导航
  • 怎样建网站得花多少钱工程私人承包协议书
  • 个人网站免费制作建一个大型网站多少钱
  • 网页制作官方网站福田欧曼矿用自卸车
  • 福永镇网站建设php mysql购物网站开发
  • 免费的海报设计网站个人asp网站模板下载
  • 重庆綦江网站建设手机app 网站
  • 东莞市传送机技术支持 网站建设网站建设 苏州
  • 荥阳高端网站建设一个空间如何做多个网站
  • 主机怎么做网站二次跳转搭建服务平台
  • 伊宁市住房与城乡建设局网站小程序登录怎么退出账号
  • 阿里云建wordpress站网站站点建设分为
  • 柳市网站推广自己做服务器的网站
  • 佛山网站建设公司有哪些?欢迎访问中国建设银行官方网站
  • 网站开发模块学些什么wordpress小工具迁移
  • 网页设计网站页面代码云主机由哪些部件组成
  • 学做巧裁缝官方网站传媒公司如何注册
  • 动态域名网站深圳自建站网站
  • 有哪些专门做展会创意的网站东莞网站建设规范
  • 新站秒收录接口东莞圆心科技网站开发
  • 公司建网站的步骤是什么山东济南网站建设
  • 天津网络网站制作公司网站设计行业现状
  • 山东一建建设有限公司网站恢复118网址之家
  • 网站数据库 数据库空间购买租用wordpress随意更换主题
  • 微商城开发费用多少成都市seo网站公司
  • 学院招生网站建设方案学网站开发哪里好
  • 河南网络建站在线设计图片网站总结
  • 网站备案太久了网站开发 模块
  • 东莞网站建设 石佳济南网站建设泰观网络