Страницы

Поиск по вопросам

среда, 10 октября 2018 г.

Константные методы

Просветите, пожалуйста, на тему константных методов в C++; зачем нужны, в чем преимущества?! С небольшими примерами кода, если не затруднит.


Ответ

Константные методы служат для определения того, что можно сделать с классом без побочного действия на его состояние, и что изменяет его состояние. Пользователю класса, в котором правильно расставлены const, в некоторых случаях, например, удаётся избежать лишнего копирования объектов без потери данных. Также при правильном использовании const на уровне компиляции исключается случайное изменение объекта в методе, который не должен ничего в объекте менять. Например, есть класс типа class A { int a; int b; public: int getA() { b = b + 1;return a; } int getB() { a = a + 1;return b; } }; Здесь мнемоника и семантика немного несоответствуют. Вот хочется думать, что если A x, y; ... bool f = x.getA() == y.getA() && x.getB() == y.getB(); f истина, то x и y в чём-то похожи, но внутренности класса реализованы не так. Пользователь класса должен быть уверен, что геттер ничего не испортит. Хороший разработчик класса должен явно описывать характер поведения метода с помощью const или отсутствия const class A { int a; int b; public: int getA() const { return a; } int getB() const { return b; } }; Но если вам вдруг понадобится делать прогу, в которой есть что-то вроде подсчёта обращений к переменной, то семантика геттеров заставляет употребить const, но счётчик обращений нужно увеличивать. Для этого случая есть слово mutable! Этим словом мы пометим поля, которые вроде как бы члены класса, но они не отражают что ли его состояние class A { int a; int b; mutable int cntA; mutable int cntB; public: int getA() const { cntA++; return a; } int getB() const { cntB++; return b; } };

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

Отправить комментарий