gpt4 book ai didi

c++ - 如何制作不可访问的类变量

转载 作者:太空宇宙 更新时间:2023-11-04 13:27:41 24 4
gpt4 key购买 nike

我想知道是否可以让类变量在这个类中不可访问?更改此变量值的唯一方法是通过类 setter。例如:

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 中做什么。

最佳答案

我不知道这方面的模式,但一种可能是将成员包装在嵌套类中。我认为这也是更好的风格,因为新类型的创建表达了这样的意图,即这个成员不仅仅是一个整数,而是具有独特的行为。

class foo {
class MVar {
public:
MVar(foo* parent, int value = 0) : m_parent(parent), m_value(value) {}
MVar& operator=(const MVar&) = delete; // disable assignment
operator int() const { return m_var; }
void set(int new_value) {
// do something, possibly with m_parent
// nested classes have access to the parent's private members
m_value = new_value;
}
private:
foo* m_parent;
int m_value;
} m_var;
void method() {
int copy = m_var; // ok
m_var = 5; // error
MVar.set(101); // ok
}
};

这并不能完全满足您的要求,因为 m_var 确实 没有 int 类型,但这是需要考虑的事情。

关于c++ - 如何制作不可访问的类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32789651/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com