#include <iostream>
using namespace std;
class FrequentFlyer; class Cbasic; class Csilver; class Cgold; class CnoCustomer; // 提前引用
//提前引用
class CState {
private: int flyMiles; // 里程数
public:
(1) ; // 根据累积里程数调整会员等级
};
class FrequentFlyer {
friend class Cbasic; friend class Csilver; friend class Cgold;
private:
Cstate *state; Cstate *nocustomer; Cstate *basic; Cstate *silver; Cstate *gold;
double flyMiles;
public:
CFrequentFlyer(){ flyMiles = 0; setState(nocustomer); }
void setState(CState *state){ this->state = state; }
void travel(int miles) {
double bonusMiles = state->travel(miles,this);
flyMiles = flyMiles + bonusMiles;
}
};
class CnoCustomer : public CState { // 非会员
public:
double travel(int miles, FrequentFlyer* context) { // 不累积里程数
cout << “Your travel will not account for points\n”; return miles;
}
};
class CBasic : public CState { // 普卡会员
public:
double travel(int miles, FrequentFlyer* context) {
if(context->flyMiles >= 25000 && context->flyMiles < 50000)
(2) ;
if(context->flyMiles >=50000) (3) ;
return miles + 0.5*miles; // 累积里程数
}
};
class CGold : public CState { // 金卡会员
public:
double travel(int miles, FrequentFlyer* context) {
if(context->flyMiles >= 25000 && context->flyMiles < 50000)
(4) ;
if(context->flyMiles < 25000) (5) ;
return miles + 0.5*miles; // 累积里程数
}
};
class Csilver : public CState { // 银卡会员
public:
double travel(int miles, FrequentFlyer* context) {
if(context-> flyMiles < 25000)
context->setState(context->basic);
if(context-> flyMiles >= 50000)
context->setState(context->gold);
return(miles + 0.25*miles);
}
};