Мне интересно, можно ли сделать переменную класса недоступной внутри этого класса? Единственный способ изменить значение этой переменной — через установщик класса. Например:
class foo
{
private:
int m_var;
bool m_isBig;
void setVar(int a_var)
{
// do something before setting value, like emitting signal
m_var = a_var;
}
void method()
{
int copy = m_var; // ok
m_var = 5; // error!
setVar(101); // ok
doSomething();
}
void doSomething()
{
if(m_var > 5)
{ m_isBig = true; }
else
{ m_isBig = false; }
}
};
Я знаю, что могу написать еще один класс только с сеттерами и геттерами, но тогда у меня не будет доступа к другим методам/переменным из класса foo(encapsulation!). Я думаю, что это может быть распространенной проблемой, и для этого может быть какой-то шаблон проектирования, но я не могу его найти.
РЕДАКТИРОВАТЬ: я отредактировал код, чтобы было ясно, что я хочу сделать в установщике.
friend
. Я ожидаю, что вы даже можете сделать это внутренним классом, возможно, только определенным в файле реализации, если вы действительно хотите скрыть его. - person YoungJohn   schedule 25.09.2015private:
на самом деле? - person πάντα ῥεῖ   schedule 25.09.2015private
и бесполезны. - person πάντα ῥεῖ   schedule 25.09.2015