#include <iostream>
using namespace std;
// 现金收费抽象类
class CashSuper
{
public:
virtual double acceptCash(double money)
{
return 0;
}
};
// 正常收费
class CashNormal:public CashSuper
{
public:
double acceptCash(double money) override
{
return money;
}
};
// 打折收费
class CashRebate:public CashSuper
{
public:
CashRebate(double moneyRebate = 1)
{
this->moneyRebate = moneyRebate;
}
double acceptCash(double money) override
{
// 实际收费
double realityMoney;
realityMoney = moneyRebate * money;
return realityMoney;
}
private:
double moneyRebate;
};
// 返利收费
class CashReturn:public CashSuper
{
public:
CashReturn(double moneyCondition =1 ,double moneyReturn = 0)
{
this->moneyCondition = moneyCondition;
this->moneyReturn = moneyReturn;
}
double acceptCash(double money) override
{
double realityMoney;
realityMoney = money - (int)(money/moneyCondition) * moneyReturn;
return realityMoney;
}
private:
double moneyCondition;
double moneyReturn;
};
enum CashEnum
{
cashOne,
cashTwo,
cashThree
};
class CashContext
{
public:
CashContext(CashEnum cashType)
{
switch (cashType)
{
case cashOne: this->cashSuper = new CashNormal(); break;
case cashTwo: this->cashSuper = new CashRebate(0.8); break;
case cashThree: this->cashSuper = new CashReturn(300,100); break;
default:break;
}
}
double getCashResult(double money)
{
return cashSuper->acceptCash(money);
}
private:
CashSuper* cashSuper;
};
int main()
{
CashContext* cc =new CashContext(cashThree);
double totalMoney = cc->getCashResult(700);
cout<<totalMoney;
getchar();
return 0;
}
转发至微博
转发至微博