我已经阅读了一些关于这个问题的帖子,但我不确定。当我有一个静态方法,我调用它而不设置它所属的类的任何对象,如:
班级:
代码:
class Fruit {
static int colour;
Fruit();
static int getColour();
static void setColour();
virtual ~Fruit();
}
调用函数:
代码:
Fruit:getcolour();
静态函数的实现:
int Fruit::setColour() {
return colour;
}
是否为了运行静态函数而调用构造函数?
因此,如果我让构造函数执行类似对象初始化的操作(将构造函数设置为调用setColour()),它是否会在函数getColour
之前运行?
答案 0 :(得分:2)
不,构造函数不会被调用,也不需要调用,因为必须定义Fruit::color
才能编译它。
所以,这不是完整的代码。实现文件类似于
int Fruit::colour = 42;
除非您事先更改该值,否则getcolour
将返回的内容。
答案 1 :(得分:1)
假设static
成员的定义(没有你的程序将无法编译)作为你在OP中忘记提及的细节,
是否为了运行静态函数而调用构造函数?
不,它没有。
static
方法不对类的特定实例进行操作,因此不需要实例(因此调用构造函数)来调用static
方法。登记/>
此外,static
方法只能在static
类成员上运行,除非明确地将对象实例传递给它。鉴于static
成员是每个类而不是每个实例,因此构造函数不会被调用是有意义的。
答案 2 :(得分:0)
将静态成员函数或静态成员变量视为像全局一样的东西。如果您需要一个静态函数来访问成员信息,您将需要创建一个全局实例或使用其中一个单例模式(如果您从多个线程使用它,请小心使用惰性单例模式)。