どこかのライブラリ (変更するアクセス権がない) に、Counter クラスがあるとします。
class Counter {
int count;
public:
Counter() : count(0) { }
void bump() { ++count; }
int getCount() const { return count; }
};
これは、その性質上、変更可能です。const の場合は、かなり価値がありません。
コードでは、そのカウンターを「使用」します。ひどく。
#include <string>
#include <iostream>
#include <Counter.hpp>
using std::cout;
using std::endl;
void breakTheHellOutOfCounter(Counter &c) {
// This is OK
c.bump();
// Oh noes!
c = Counter();
}
int main() {
Counter c;
c.bump(); c.bump(); c.bump();
std::cout << "Count was " << c.getCount() << std::endl;
breakTheHellOutOfCounter(c);
std::cout << "Count is now " << c.getCount() << std::endl;
}
のカウンターを光沢のある新しいカウンターでbreakTheHellOutOfCounter
上書きし、カウントをリセットすることに注意してください。main
それは電話をかけた人にいくらかの悲しみを引き起こすでしょう。(もっと有害なことが起こっていると想像してみてください。そうすれば、私がどこに向かっているのかがわかります。)
バンプできるようにする必要があります(したがって、変更可能にする必要があります)が、 を置き換えようとして惨めに失敗しc
たいです。それを実現するために(クラス以外の)ものを変更する方法はありますか?breakTheHellOutOfCounter()
c
Counter
(最低レベルでは、これを強制することはほとんど不可能であることは承知しています。私が望むのは、誤って実行しにくくする方法です。)