C ++中静态类变量的静态或非静态getter / setter

时间:2014-01-04 14:18:09

标签: c++ class static setter getter

假设我有以下课程:

class A {
private:
    static double X;
};

double A::X = 0.0;

变量A::X确实应该是静态的,因为A的所有实例在我所关注的上下文中必须共享A::X的相同值。

现在,我的问题是是否为A::X静态创建getter和setter函数。它们的定义如下:

void A::setValue(const double x) {
#pragma omp critical
{
    if(x<0.0||x>1.0)
        // custom macro call to raise exception

    X = x;
}
}

double A::getValue() {
#pragma omp critical
{
    return X;
}
}

在我看来,我是否将这些getter和setter函数添加到A作为静态或非静态成员函数绝对没有实际区别。这是对的吗?

在这个例子中,或者更一般地说,有什么理由可以选择将这样的getter和setter函数作为类的静态或非静态成员来控制其访问的静态成员?

2 个答案:

答案 0 :(得分:5)

  1. 如果没有声明任何对象,你可以调用静态方法
  2. 您的代码更具可读性:如果您有静态方法getA,则您知道A是静态的

答案 1 :(得分:2)

我建议你尝试在界面和实现之间分配你的推理。如果在没有实例化类的实例时需要调用setter / getter,请将它们设置为静态。如果您可能需要覆盖它们,请将它们设置为非静态和虚拟。

我假设你确实需要他们两个;如果您的静态数据成员是私有的,那么就是这种情况,因为您需要确保其值符合某些条件。如果涉及更复杂的逻辑,您可能需要重新考虑您的界面。