第2章商场促销(3)——策略与简单工厂结合
2015-05-31 17:43
218 查看
/*shop.h文件*/ #ifndef _SHOP_ #define _SHOP_ #include<iostream> #include<string> //现金收费抽象类 class Cashsuper { public: virtual double acceptcash(double money); }; //正常收费子类 class cashnormal:public Cashsuper { public: virtual double acceptcash(double money); }; //打折收费子类 class cashrebate:public Cashsuper { public: cashrebate():moneyrebate(0.1){} virtual double acceptcash(double money); void calcute_rebate(std::string moneystring); private: double moneyrebate;//打折率 }; //返利收费子类 class cashreturn:public Cashsuper { public: void MoneyReturn(std::string moneycondition_str,std::string moneyreturn_str); virtual double acceptcash(double money); private: double moneycondition;//返利条件(如满300) double moneyreturn;//返利值(返100) }; //用一个算法类来配置,维护一个算法对象的引用 class cashcontxt { public: cashcontxt(std::string type){ if(type=="正常收费") { cashnormal* cx=new cashnormal; cas=cx; } else if(type=="打八折") { cashrebate *cx=new cashrebate; cx->calcute_rebate(type); cas=cx; } else if(type=="满300返100") { cashreturn* cy=new cashreturn; cy->MoneyReturn("满300","返100"); cas=cy; } else exit(1); } double getresult(double money) { return cas->acceptcash(money); } private: Cashsuper* cas; }; #endif
/*shop,cpp文件*/ #include<iostream> #include"shop.h" using namespace std; //现金收费的抽象类(函数定义) double Cashsuper::acceptcash(double money) { return money; } //正常收费的子类(函数定义) double cashnormal::acceptcash(double money) { return money; } //打折收费的子类(函数定义) void cashrebate::calcute_rebate(std::string moneystring) { if(moneystring=="打八折") moneyrebate=0.8; else if(moneystring=="打九折") moneyrebate=0.9; } double cashrebate::acceptcash(double money) { return money*moneyrebate; } //返利收费的子类(函数定义) void cashreturn::MoneyReturn(std::string moneycondition_str,std::string moneyreturn_str) { if(moneycondition_str=="满100") moneycondition=100; if(moneycondition_str=="满200") moneycondition=200; if(moneycondition_str=="满300") moneycondition=300; if(moneyreturn_str=="返10") moneyreturn=10; if(moneyreturn_str=="返50") moneyreturn=50; if(moneyreturn_str=="返100") moneyreturn=100; } double cashreturn::acceptcash(double money) { return money-moneyreturn; }
/*main.cpp文件*/ #include "shop.h" #include<iostream> using namespace std; int main() { string type="满300返100"; cashcontxt* cas; cas=new cashcontxt(type); cout<<cas->getresult(1000)<<endl; system("pause"); return 0; }
相关文章推荐
- QT多线程—主界面卡死解决方案
- Java Struts2 的请求处理流程详解
- 如何设置进程(线程)在指定的CPU上运行
- 生存之道之验证码!
- Intel汇编指令集SSE4
- 指定范围的随机数产生!!!!
- corosync-pacemaker实现高可用的MariaDB
- 日语语法总结-9 md version
- Hibernate-Criteria用法
- 第十一周上机项目3 点类派生直线类
- java基础之守护线程
- android基础之Unable to start activity Component
- 随笔1:
- 轻松记住大端小端的含义
- JAVA 子父类的特点
- Android 常用 adb 命令总结
- JDBC数据库连接池
- 为什么要学习和使用 C 语言?
- Sublime Text3 -- 安装sublimeLinter插件
- hive1.2.0安装