ここで静的メンバーを変更することができるconstメンバー関数について複数の回答がありました。しかし、私の質問が同じカテゴリに入るかどうかは分かりません。私の例では、静的メンバー関数は、クラスの静的メンバーではなく、その静的メンバーを変更します。私の例はなぜ機能するのですか?constメンバー関数が自分のクラスの静的オブジェクトを変更しました
class Base
{
public:
virtual const Base& fun (const Base& n) const = 0;
};
class Child : public Base
{
int content;
public:
Child(int i = 0) : content(i) {}
const Base& fun (const Base& n) const;
};
const Base& Child::fun (const Base& n) const
{
static Child static_child;
static_child.content = content + static_cast<const Child&>(n).content;
cout << "static child content is " << static_child.content << endl;
return static_child;
}
int main() {
Child c(10);
Base* b = &c;
b->fun(*b).fun(*b);
}
出力は
static child content is 20
static child content is 30
だから、constの機能正常に変更子オブジェクトになります。また、2回目の呼び出しではがオブジェクトに変更されました。ありがとう。
あなたのコードが変更するのは、非constオブジェクトである 'static_child'です。 –