0

基本クラス foo があるとします

class foo {
    virtual int get() const = 0;
}

おそらく 20 のサブクラス foo_1、foo_2 ... foo から継承され、次の形式になります。

class foo_1 : public foo {
    int get() const { return 1; }
}
...
class foo_20 : public foo {
    int get() const { return 20; }
}

突然、人生はそれほど簡単ではありません!これを行う必要があるクラス foo_21 があります。

class foo_21 : public foo {
    int get() { member_ = false; return 0; }
    bool member_;
}

問題は、get が基底クラスで const として宣言されていることであり、サブクラス foo_21 で何かを変更する必要があります。どうすればそれを回避する方法を見つけることができますか?

4

1 に答える 1

7

あなたの基本関数は ではないためvirtual、これらすべてが非常に投機的になります。あなたのコードは、投稿したとおりに動作しているはずです (ただし、期待どおりではないかもしれません)。

mutableメンバーを使用できます:

class foo_21 : public foo
{
    int get() const { member_ = false; return 0; }
    mutable bool member_;
};

可変変数がクラスの論理定数に影響を与えないことが重要です。その場合は、設計をやり直す必要があります。

于 2012-12-06T18:42:28.887 に答える