读书人

当静态成员是由某个类定义地对象时该

发布时间: 2012-02-05 12:07:15 作者: rapoo

当静态成员是由某个类定义地对象时,该类的构造函数会被调用吗?
我写了一程序:
#include "iostream.h "
class B
{
public:
int i,j;
B(){i=0;j=9;cout < < "B 's constructor was called!\n ";};
};
class A
{
public:
A(){cout < < "A 's constructor was called!\n ";};
static B x;
};
void main()
{ }
为什么构造函数B(){i=0;j=9;cout < < "B 's constructor was called!\n ";};不被调用???
我问问是不是:如果一个对象作为静态成员变量,那么这个对象所属的类不能有构造函数??如果可以有构造函数,那么构造函数什么时候被调用??
书上介绍静态成员变量都举例是:static int a;
如果是static 类名 a; 怎么初始化,请介绍!!!

[解决办法]
一般类里的静态成员声明仅仅是个声明,静态成员的需要在类外定义。
你的那个成员只有声明,没有定义,所以没有执行构造函数。
而程序编译连接之所以没有报错,是因为你的程序中没用到这个变量,对于一个从来也没用到的变量,不定义是没有问题的。

你可以这样定义它:
class A
{
public:
A(){cout < < "A 's constructor was called!\n ";};
static B x;
};
B A::x;

然后再使用它一下:
void main()
{
cout < < A::x.i < < endl;
}

读书人网 >C++

热点推荐