可以非静态函数修改c ++中的静态变量
答案 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; }
};