2013-02-27 146 views
0

我已阅读了关于此问题的一些帖子,但我不确定某件事。当我有一个静态的方法,我把它叫做没有设置,它属于像之类的任何对象:构造函数和静态函数

类:

代码:

class Fruit { 
    static int colour; 
    Fruit(); 
    static int getColour(); 
    static void setColour(); 
    virtual ~Fruit(); 
} 

的调用函数:

代码:

Fruit:getcolour(); 

执行静态函数:

int Fruit::setColour() { 
    return colour; 
} 

构造函数是否被调用以运行静态函数?因此,如果我有构造函数做类似于对象的初始化(seting构造函数调用setColour())的东西,它会运行之前函数getColour

回答

2

不,构造函数不会被调用,也不需要调用,因为Fruit::color必须定义为才能编译。

所以,这不是完整的代码。实现文件具有类似

int Fruit::colour = 42; 

这是什么getcolour将返回,除非你改变的值事先。

1

假设static成员的定义(没有你的程序将无法编译)作为你忘了在OP提一个细节,

请问构造函数被调用,以运行静态功能?

不,它没有。

static方法不上的类的特定实例,以使实例操作(,因此调用构造器)不需要调用static方法。
另外,static方法只能对static类成员进行操作,除非对象实例明确传递给它。鉴于static成员是每个类而不是每个实例,所以构造函数不会被调用是有意义的。

+1

+1 - 正确解释i.m.h.o的唯一答案.. – JimmyB 2013-03-01 14:46:55

0

将一个静态成员函数或一个静态成员变量想象成一个像全局一样的东西。如果你需要一个静态函数来访问成员信息,你需要创建一个全局实例或者使用其中一个单例模式(如果你使用多线程模式,请小心懒惰单例模式)。