C ++改变静态成员函数的私有成员变量

时间:2010-07-07 09:40:40

标签: c++ class private-members

我在阅读代码时注意到我有一个静态成员函数,它通过指向所述类实例的指针来改变其类的私有成员。

它编译和运行没有问题,但我只是想知道以这种方式编辑私有变量,从成员但是静态函数,或者我是否应该实现公共setVar函数。 / p>

请注意,我并不是试图通过编辑静态函数中的成员变量来绕过标准编码实践 - 该函数必须是静态的,以便可以使用POSIX pthread库作为线程运行。

干杯, 悦

2 个答案:

答案 0 :(得分:4)

是的,这是有效的。

虽然在大多数情况下使用非静态成员会更好,但有时会在需要将函数指针传递给外部库的情况下使用静态成员,就像在pthread库中一样。

如果在其他情况下更改此私有变量也是有意义的,并且如果要将类与使用pthread库的事实分开,则可以将该类拆分为两个:

  • 一个处理功能的类(现在就像你的类一样)
  • 一个处理与pthread接口的类

然后第二个类将通过公共方法在第一个类中设置变量。

示例:这可能是您的原始代码:

class MyClass
   {
   public:
      static void someMethod(MyClass *);
   private:
      type myMember;
   };

这就是你可以写它的方式:

 class MyClass
    {
    public:
       void setMember(type value) {myMember = value; /* other other logic */}
    private:
       type myMember;
    }

 class MyClassPThreadInterface
    {
    public:
       static void someMethod(MyClass *myclass) {myclass->...();}
    }

这样,您就可以完全将您的类与PThread库使用它的事实分开。它也可以在其他情况下使用(静态方法相当无意义),并且在不污染原始类的情况下添加另一个线程库(例如Windows线程)也很容易。

答案 1 :(得分:0)

是。 private表示访问仅限于该类。