【发布时间】:2015-09-25 19:51:30
【问题描述】:
我想知道是否可以在此类中使类变量不可访问?更改此变量值的唯一方法是通过类设置器。例如:
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; }
}
};
我知道我可以只使用 setter 和 getter 编写另一个类,但是我将无法访问类 foo 中的其他方法/变量(封装!)。我认为这可能是一个常见问题,并且可能有一些设计模式,但我找不到。
编辑: 我编辑了代码以明确我想在 setter 中做什么。
【问题讨论】:
-
你可以通过创建另一个只有 setter 和 getter 的类来获得这个功能,然后让这个额外的类访问来自 foo 的方法/变量,你可以让 foo 将它声明为
friend。我希望你甚至可以把它变成一个内部类,如果你真的想隐藏它,可能只在实现文件中定义。 -
你为什么要这个?如果你有一个私人成员,你负责实施,那是什么意思?
-
你的代码doesn't compile,你的意思是
private:吗? -
@πάνταῥεῖ 是的,已编辑。
标签: c++ setter getter access-specifier