首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

static 类类型数据成员如何初始化

2013-01-01 
static 类类型数据成员怎么初始化?class Foo{public:Foo(int i1):ival(i){}private:int ival}class Bar

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;

热点排行