可以使用非静态函数在c ++中修改静态变量

时间:2011-02-25 19:35:33

标签: c++

可以非静态函数修改c ++中的静态变量

3 个答案:

答案 0 :(得分:16)

是的,只要数据成员的可见性允许,非静态成员函数就可以修改静态数据成员。

答案 1 :(得分:2)

是的,请参阅this example了解小型示例程序。

相反,静态函数不能像常规成员函数那样修改常规成员变量。

答案 2 :(得分:0)

是的,你可以。

将“静态成员”视为表征类的属性,而“非实例成员”表征实例。

类定义一个概念,而实例是这个概念的出现。 一个愚蠢的例子是类Human是一个概念,而你,Andy,是一个实例。你是60亿人中的一个人。

人类的观念认为所有人都有肢体,头部,眼睛等。这些是实例字段。每个人类都有自己的四肢,头部,眼睛......

我可以根据他/她的职业专门研究人类的概念。 让我们考虑一个ComputerEngineer类,它显然定义了计算机工程师。 任何计算机工程师的实例是人类,仍然有四肢,头部,眼睛......

然而,可以对ComputerEngineer类进行建模,使其具有一个限定符(或属性),该限定符表示类别sindicate允许的最低工资。让我们称之为minimumWage

这是一种情况,相同的属性必须具有所有类实例的公共值。

请注意,尽管此minimumWage不是实例成员,并且每个实例的值不同,但它仍然与概念相关,因此可以访问它是合理的。

以下假代码在实例方法访问静态成员的意义上是有效的:

class Human
{
protected:
  Limb leftArm;
  Limb leftLeg;
  Limb rightArm;
  Limb rightLeg;
};

class ComputerEngineer : public Human
{
protected:
  static double _minimumWage;
  double _wage;

public:
  wage( double w )  // non-static member function can only be called by instances.
  {
    if ( w < minimumWage )
       throw "You're gonna have trouble with the union!";
    _wage = w;
  }

  minimumWage( double w )
  {  _minimumWage = w; }
};