在这种情况下如何在基类中设计我的switch case函数

时间:2017-08-27 16:15:50

标签: c++ class inheritance switch-statement

我们说我们有一个人类

class Person{
   int id;
   Status* cur_status;
   ...
}

我们的课程状态如下:

class Status{
    int income;
    int tax;
    virtual void reform(int _case);
    ...
}

class Unemployed : public Status{
    void reform(int _case){
        switch (_case){
            case 1: tax /= 2;   //recession
            case 2: tax /= 3;   //depression
            case 3: tax = 0;
            ...
        }
    }
}

class Worker : public Status{
    void reform(int _case){
        switch (_case){
            case 1: tax /= 2;   //recession
            case 2: tax /= 3;   //depression
            case 3: tax = 100;
            ...
        }
    }
}

鉴于此人,他/她的状态可以动态更改, 所以现在我遇到了一个问题:
一些改革案例是两种状态之间的相同,而其他情况则不是 我是否必须分别在派生类中声明ALL OF' EM? 实际上,我想将常见案例提取到基础课程中,但我不知道如何 有没有人可以帮助我?

1 个答案:

答案 0 :(得分:4)

这些方面的一些东西,也许是:

class Unemployed : public Status{
    void reform(int _case){
        switch (_case){
          // Special case for this kind of Status
          case 1:
            tax /= 2;
            break;
          // Everything else is implemented by base class
          default:
            Status::reform(_case);
            break;
        }
    }
}