У меня есть переменная-член, которая никогда не должна изменяться внутри класса, в котором она находится, поэтому она должна быть const
, но я бы хотел сохранить оператор присваивания для этого класса.
Итак, мне пришла в голову идея «спрятать» член в базовом классе, который разрешает доступ к const только через геттер:
class Base
{
public:
Base(Settings settings) : mSettings(settings) {}
const Settings&
GetSettings() const { return mSettings; }
private:
Settings mSettings;
};
class Derived : Base
{
public:
Derived(Settings settings) : Base(settings) {}
};
Я могу получить доступ к члену через средство получения, не могу случайно изменить его, и это кажется лучше, чем простая оболочка, потому что оболочка все еще может быть перезаписана через свой собственный оператор присваивания.
Кто-нибудь видит какие-либо проблемы или подводные камни с этим? Есть ли какие-нибудь бэкдор-способы изменить член в любом случае, что сделает всю конструкцию бесполезной?
РЕДАКТИРОВАТЬ: Чтобы дать немного больше контекста о случае использования.
Settings
для класса Product
. Это включает в себя такие вещи, как размеры продукта. Продукт не может изменить свой размер, и я хочу предотвратить случайное изменение, ограничив доступ к настройкам как постоянный. Тем не менее, это нормально для кода клиента, чтобы сделать назначения x = y //Product x now has the same properties as y