因为对C#不是很熟,所以将C#的程序转成了C++的。
// 一个超市打折的实例
#include "stdafx.h"
#include "stdio.h"
//抽象类
class CashSuper
{
public:
virtual double acceptCash(double money) = 0;
};
//正常收费子类
class CashNormal : public CashSuper
{
public:
virtual double acceptCash(double money)
{
return money;
}
};
//打折收费子类
class CashRebate : public CashSuper
{
private:
double moneyRebate;
public:
CashRebate(double Rebate = 0.0):moneyRebate(Rebate)
{
}
virtual double acceptCash(double money)
{
return money * moneyRebate;
}
};
//返利收费子类
class CashReturn : public CashSuper
{
private:
double moneyCondition;
double moneyReturn;
public:
CashReturn(double Condition = 0.0, double Return = 0.0):moneyCondition(Condition),
moneyReturn(Return)
{
}
virtual double acceptCash(double money)
{
double result = money;
if(money >= moneyCondition)
result = money - (money / moneyCondition) * moneyReturn;
return result;
}
};
class CashFactory
{
public:
static CashSuper * createCashAccept(int type) //现金收取工厂
{
CashSuper * cs = 0;
switch(type)
{
//正常收费
case 0:
cs = new CashNormal();
break;
case 1:
cs = new CashReturn(300, 100);
break;
case 2:
cs = new CashRebate(0.8);
break;
}
return cs;
}
};
int main(int argc, char* argv[])
{
double totle;
int type = 1;
CashSuper * csuper = CashFactory::createCashAccept(type);
printf("%2.2f/n",csuper->acceptCash(1000));
return 0;
}