Прошло некоторое время с тех пор, как я перешел на C++, но я хочу убедиться, что я придерживаюсь лучших практик, когда я это делаю, в том числе и const-correct.Только C++ Разрешить задание переменной-члена только
Я в настоящее время строит библиотеку кода для рамок игры и у меня есть следующие классы (суммированы для простоты):
class Screen
{
public:
Clear();
}
и
class Game
{
private:
Screen* screen;
protected:
const Screen* GetScreen() const;
}
я опустил остальное для краткости, но достаточно сказать, что класс Game
отвечает за создание экземпляра класса Screen
. После его создания он должен быть доступен только через метод GetScreen()
.
Идея состоит в том, что при создании новой игры я бы наследовал от этого базового класса, так что, например, во время цикла рендеринга я хотел бы очистить экран, чтобы перерисовать следующий кадр. Теперь, в моих вышеприведенных определениях, метод Clear()
не может вызываться при использовании метода GetScreen()
, потому что он не const
. Ясный метод фактически изменит внутреннюю работу класса (в силу того, что ранее отображаемое изображение очищено), поэтому я оставил объявление const
из определения. Если бы я сделал это const
, тогда мне пришлось бы иметь некоторые внутренние работы класса Screen
как mutable
, но из того, что я прочитал, это не будет очень const-correct.
Итак, у меня есть две части к моему вопросу. Должен ли я изменить void Clear()
на void Clear() const
и сделать части внутренней обработки mutable
?
Или это альтернатива, которая позволила бы мне сделать screen
члена Game
класса только устанавливаемого раз в Game
классе, так что я могу получить доступ к не-константным членам-функции в течение оставшейся части времени выполнения программы.
Спасибо за любую помощь.
Похоже, вы хотите, чтобы 'screen' был' Screen & 'или' Screen * const' вместо 'const Screen *'. – Casey