构造函数和静态函数

时间:2013-02-27 12:04:08

标签: c++ eclipse optimization arduino

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

班级:

代码:

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

调用函数:

代码:

Fruit:getcolour();

静态函数的实现:

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

是否为了运行静态函数而调用构造函数?

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

3 个答案:

答案 0 :(得分:2)

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

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

int Fruit::colour = 42;

除非您事先更改该值,否则getcolour将返回的内容。

答案 1 :(得分:1)

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

  

是否为了运行静态函数而调用构造函数?

不,它没有。

static方法不对类的特定实例进行操作,因此不需要实例(因此调用构造函数)来调用static方法。登记/> 此外,static方法只能在static类成员上运行,除非明确地将对象实例传递给它。鉴于static成员是每个类而不是每个实例,因此构造函数不会被调用是有意义的。

答案 2 :(得分:0)

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