#cpp #ооп
Есть класс с public статическими переменными. Эти переменные нужно инициализировать 1 раз. Затем должна быть возможность читать их, но не изменять. Как можно организовать запрет изменения переменных? Сделать синглтон (придумать одноразовую какую-нибудь инициализацию..) + запретить удаление, + переменные сделать private + на каждую переменную get-метод. Этот способ имеет право на существование, но а можно чтобы поля все же были public и чтобы нельзя было менять их?
Ответы
Ответ 1
Объявить переменные константами, инициализировать в конструкторе. Весьма тривиально. class sample { public: const int var; sample(int value=9000):var(value) {} }Ответ 2
Для решения задачи достаточно объявить переменную со спецификатором const. Можно воспользоваться нововведениями C++11 - инициализацией членов в объявлении класса и ключевым словом constexpr: constexpr int init() { return 100; } class A { public : static const int value = init(); } Если же функцию инициализации невозможно вычислить на стадии компиляции, т.е. задать со спецификатором constexpr, то подойдёт "старый дедовский" способ: int init() { return что_то_очень_сложное; } class A { public : static const int value; }; const int A::value = init();
Комментариев нет:
Отправить комментарий