标签:
/*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; }
标签:
原文地址:http://www.cnblogs.com/yanliang12138/p/4542337.html