使用getter设置私有变量

时间:2017-05-17 08:31:36

标签: c++ getter-setter

如果可以将它们组合起来,需要单独的获取和设置功能,如下所示:

class A {
private:
    int var = 0;
public:
    int& getset(){ return var; };
};

int main()
{
  A a = A();
  a.getset() = 4;
  std::cout << "Hello, " << a.getset() << "!\n";
}

我假设有一些我忽略的东西,但如果这不是一个好主意;为什么以这种方式访问​​私人会员呢?

2 个答案:

答案 0 :(得分:2)

根本不需要getter和setter:只需将变量公开。

class A {
public:
    int var = 0;
};

如果你想隐藏实现细节,那么想法是getter是const而setter不是。所以它们必须是不同的功能

class A{
public:
    int getValue() const;
    int setValue(int new_value); // returns old value
private:
    /* implementation details: Value may be encoded other than in a simple variable */
};

答案 1 :(得分:1)

如果您不需要进行任何值检查,则应将class替换为struct并删除不必要的方法:

struct A {
    int var = 0;
};

int main()
{
  A a;
  a.var = 4;
  std::cout << "Hello, " << a.var << "!\n";
}

但是如果你需要更困难的逻辑和var的一些检查,那么你应该编写单独的setter和getter,而不是你的。 getset()是个糟糕的主意,不要再做了。