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

当静态成员是由某个类定义地对象时,该类的构造函数会被调用吗?解决方法

2012-02-05 
当静态成员是由某个类定义地对象时,该类的构造函数会被调用吗?我写了一程序:#include iostream.h classB

当静态成员是由某个类定义地对象时,该类的构造函数会被调用吗?
我写了一程序:
#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;
}

热点排行