0

我已经阅读了一些关于这个问题的帖子,但我不确定。当我有一个静态方法并且我调用它而不设置它所属的类的任何对象时,例如:

班上:

代码:

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

调用函数:

代码:

Fruit:getcolour();

静态函数的实现:

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

构造函数是否被调用以运行静态函数?

因此,如果我让构造函数执行对象初始化之类的操作(将构造函数设置为调用 setColour() ),它会在函数之前运行getColour吗?

4

3 回答 3

2

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

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

int Fruit::colour = 42;

getcolour除非您事先更改值,否则这将返回。

于 2013-02-27T12:06:06.403 回答
1

假设static成员的定义(没有它,您的程序将无法编译)作为您忘记在 OP 中提及的细节,

构造函数是否被调用以运行静态函数?

不,它没有。

static方法不对类的特定实例进行操作,因此不需要实例(因此调用构造函数)来调用static方法。
此外,除非明确将对象实例传递给方法,否则static方法只能对类成员进行操作。static鉴于static成员是每个类而不是每个实例,因此构造函数不会被调用是有道理的。

于 2013-02-27T12:06:25.113 回答
0

将静态成员函数或静态成员变量想象成类似于全局的东西。如果您需要一个静态函数来访问成员信息,您将需要创建一个全局实例或使用其中一种单例模式(如果您从多个线程中使用它,请注意惰性单例模式)。

于 2013-02-27T12:11:36.673 回答