阅读下列说明和C++代码,将应填入(1)~(5)处的字句写在答题纸的对应栏内。 【说明】 某航空公司的会员积分系统将其会员划分为普卡(Basic)、银卡(Silver)和金卡(Gold)三个等级。非会员(NonMember)可以申请成为普卡

admin2019-10-08  21

问题 阅读下列说明和C++代码,将应填入(1)~(5)处的字句写在答题纸的对应栏内。
    【说明】
    某航空公司的会员积分系统将其会员划分为普卡(Basic)、银卡(Silver)和金卡(Gold)三个等级。非会员(NonMember)可以申请成为普卡会员。会员的等级根据其一年内累积的里程数进行调整。描述会员等级调整的状态图如图5所示。现采用状态(State)模式实现上述场景,得到如图6所示的类图。

【C++代码】代码修改点做了备注
  #include<iostream>,
  using namespace std:
class FrequentFlyey;class CBasic;class Csilver;class CGold;class CNoCustomer;//提前引用
class CState
{
private:
  int flyMiles;  ∥里程数
publie:
  _____(1);
    //根据累积里程数调整会员等级
};
class FrequentFlyer
{
friend class CBasic;
friend CSilver;    //此处在CSilver前面少了class
friend class CGold;
private:    //此处应该改为public题目有误
    CState*state;CState*nocustomer;CState*basic;CState*silver;CState*gold;
    double flyMiles;
public:
    FrequentFlyer()
    {
    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)
    {
    tout<<’’Your travel will not account for points\n’’;  //不累积里程数
    return miles;
    }
  };
  class CBasil:public CState    //普卡会员
  {
  public:
    double travel(int miles,FrequentFlyer*context)
    {
    if(context->flyMiles>=25000&&context->flyMiles<50000)
    _____(2);
    if(context->flyMiles<25000)
    _____(3);
    returnmiles+0.5*miles;    //累积里程数
    }
};
class CGOld:public CState   //金卡会员
{
public:
  double travel(int miles,FrequentFlyer*context)
  {
    if(context->flyMiles>=25000&&context->flyMiles<50000)
    _____(4);
    if(eontext->flyMiles<25000)
    _____(5);
    return miles+0.5*miles;    //累积里程数
    )}
};
class Csilver:public CState    //银卡会员
{
  double travel(int miles,FrequentFlyer*context)
  {
    if(context->tlyMiles<25000)
    context->setState(context->basic);
    if(context->flyMiles>=50000)
    context->setState(context->gold);
    return (miles+0.25*miles);  //累积里程数
    }
};

选项

答案(1)virtual double travel(int miles,FrequentFlyer*context)=0 (2)context->setState(context->Cbasic) (3)context->setState(context->CSilve) (4)context->setState(context->Cbasic) (5)context->setState(context->CSilve)

解析
转载请注明原文地址:https://kaotiyun.com/show/3sxZ777K
0

相关试题推荐
最新回复(0)