static 类类型数据成员怎么初始化?
class Foo{
public:
Foo(int i=1):ival(i){}
private:
int ival;
};
class Bar{
public:
Bar(){}
private:
static Foo fooBar; //请问该static数据成员是怎么初始化的?谢谢。
static int iBar;
}; 在c++ primer中看到,static成员不是通过类构造函数进行初始化,而是应该在定义时进行初始化。一直不是很了解,请各位大神指点下,fooBar和iBar应该怎么进行初始化?
[解决办法]
在cpp文件中定义
Foo Foo::fooBar;
int Foo::iBar;
[解决办法]
类的定义是在头文件中,如果类的成员变量是static,static声明的成员变量是说明这个变量是属于整个类的,而不是某个对象的(出了单例模式,一个类都可以定义无数个对象),所以对static成员变量的初始化不可以放在构造函数中(定义对象时才会调用的函数),只能方便类对应的源文件中。
具体形式上面已经有说了:
Foo Bar::fooBar; //自动调用Foo的构造函数初始化,Foo的构造函数默认形参是1,所以结果是1.
int Bar::iBar; //编译器做可能会自动初始化为0。
如果需要自己设置值,一般形式;
Foo Bar::fooBar(value1);
int Bar::iBar = value2;