
#include#include enum type{cashnormal, cashrebate, cashreturn}; typedef type CashType; // 收费抽象类 class CashSuper { public: virtual double acceptCash(double money) = 0; }; // 正常收费子类 class CashNormal : public CashSuper { public: inline double acceptCash(double money) { return money; } }; // 打折收费子类 class CashRebate : public CashSuper { public: CashRebate() = default; CashRebate(double moneyRebate); inline double acceptCash(double money) { return moneyRebate_ * money; } private: double moneyRebate_; }; CashRebate::CashRebate(double moneyRebate):moneyRebate_(moneyRebate){} // 返利收费子类 class CashReturn : public CashSuper { public: CashReturn() = default; CashReturn(double moneyCondition, double moneyReturn); double acceptCash(double money); private: double moneyCondition_; double moneyReturn_; }; CashReturn::CashReturn(double moneyCondition, double moneyReturn):moneyCondition_(moneyCondition), moneyReturn_(moneyReturn){} double CashReturn::acceptCash(double money) { double result = money; if (money > moneyCondition_) { result = money - floor(money/moneyCondition_)*moneyReturn_; } return result; } // 收费工厂类 class CashFactory { public: CashSuper* createCashAccept(CashType); ~CashFactory(); private: CashSuper* cashsuper_; }; CashSuper* CashFactory::createCashAccept(CashType cashtype) { switch (cashtype) { case cashnormal: cashsuper_ = new CashNormal(); break; case cashrebate: cashsuper_ = new CashRebate(0.8); break; case cashreturn: cashsuper_ = new CashReturn(300, 100); break; default: cashsuper_ = nullptr; } return cashsuper_; } CashFactory::~CashFactory() { if (cashsuper_ != nullptr) { delete cashsuper_; cashsuper_ = nullptr; } } int main() { CashFactory cashfac; CashSuper* cashsuper = cashfac.createCashAccept(cashreturn); double totalprice = .0f; double unitprice = .0f; int num = 0; std::cout << "请输入商品单价: " << std::endl; std::cin >> unitprice; std::cout << "请输入商品数量: " << std::endl; std::cin >> num; totalprice = unitprice * num; totalprice = cashsuper->acceptCash(totalprice); std::cout << "最终应付价格: " << totalprice << std::endl; delete cashsuper; return 0; }
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)