29 дек. 2008 г.

C++: const method

В C++ методы могут быть константными - сие значит: данный метод не может изменять внутреннее состояние данного экземпляра класса и может вызывать только константные методы данного класса. Менять нельзя, но если очень сильно надо - то можно.
Однако, модификатор свойства класса mutable существует именно для того, чтобы иметь возможность менять его из константных методов.
Впрочем, не остаётся решённым вопрос с неконстантными методами. очень сильно надо.
Для этого есть другой хитрый финт ушами. Никто не запрещает вызвать метод у указателя. Однако, этот указатель не должен быть константным.
class Foo {
public:
Foo():i(0){
}

void foo() const {
Foo *foo = (Foo*) this;
// Обновлено: более наглядно будет:
// Foo *foo = const_cast<Foo*>(this);

foo->bar();
}

void bar() {
i++;
}
int i;
};

Самый финт в данном случае - это приведение константной ссылки this к неконстатной ссылке foo после чего и становится возможным вызов неконстантного метода.

Комментариев нет: