为什么静态数据成员不能在构造函数的初始化列表中初始化,而可以在构造函数的定义中完成?
问问题
2246 次
3 回答
10
你理解错了。它们可以在类定义*之外的单个翻译单元中初始化,并且可以在构造函数中分配给它们。
您只能static
在构造函数的初始化列表中初始化当前的非类成员。
*有例外情况
于 2013-04-10T05:36:22.360 回答
0
静态成员在类范围内,即它们是类变量而不是实例变量。我们通过构造函数初始化实例。由于静态变量不是针对实例而是针对整个类,因此静态变量不会由构造函数初始化。谢谢
于 2013-04-10T06:42:13.607 回答
0
让我们更具体地尝试一下
#include <iostream>
using namespace std;
class classWithStaticVariable
{
static int aStaticVariable;
int aNormalInstanceVariable;
public:
classWithStaticVariable(int aParameter)
{
aNormalInstanceVariable=aParameter;
aStaticVariable=aNormalInstanceVariable;/////It is possible to assign value to static data member in constructor but not possible to init it.
}
void aTestFunctionJustToPrint()
{
cout<<aStaticVariable<<aNormalInstanceVariable;
}
};
int classWithStaticVariable::aStaticVariable=1;
int main()
{
classWithStaticVariable t(2);
t.aTestFunctionJustToPrint();
}
静态变量是类变量而不是实例变量。所以这些静态变量必须用类定义初始化。同样,构造函数用于在创建对象时初始化对象的实例变量。仅此而已。谢谢
于 2013-04-24T10:44:47.130 回答