Страницы

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

суббота, 8 февраля 2020 г.

Возможно ли в C++ одноразовая инициализация переменных?

#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();

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

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