C++中类里面定义 静态成员变量的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++中类里面定义 静态成员变量的问题相关的知识,希望对你有一定的参考价值。
class a
int aa;
static int aaa;
;
请大家看看 这个类的定义有什么问题?
如果我把 static int aaa;改成static int aaa=10;
一样出错 请问这是为什么?
可以这样
class a
int aa;
static int aaa; //静态数据成员声明
;
int a::aaa=10; //静态数据成员的定义和初始化 参考技术A 类中的静态成员变量的初始化必须在类外实现!!
并且静态变量定义的关键是:
static const int aaa;
再类外初始化的格式是:const 数据类型 【类名】::变量名=数字 例如该程序中:
const int a::aaa=10;
c++中类的静态成员对象
在c++中,可以声明一个静态的成员对象,但是此时仅仅声明,没有定义,也不会创建这个内部的静态成员对象。只有在类体外部定以后才能创建这个对象。
1 #include<iostream> 2 using std::cout; 3 using std::endl; 4 class Outer{ 5 class inner{ 6 public: 7 inner(){ 8 cout << "inner()" << endl; 9 } 10 ~inner(){ 11 cout << "~inner()" << endl; 12 } 13 14 }; 15 static inner m_inn; 16 public: 17 18 Outer(){ 19 cout << "Outer()" << endl; 20 } 21 ~Outer(){ 22 cout << "~Outer()" << endl; 23 } 24 }; 25 26 int main(){ 27 Outer o1; 28 return 0; 29 30 }
上述代码中,我们并没有对成员对象进行定义,仅仅是引用性声明,此时并不会为其分配空间。运行结果如下
我们看到运行结果展示,inner的构造函数与析构函数都没有被调用,说明并没有创建inner的对象m_inn;
此时我们在类体外部对m_inn进行定义
代码如下
1 #include<iostream> 2 using std::cout; 3 using std::endl; 4 class Outer{ 5 class inner{ 6 public: 7 inner(){ 8 cout << "inner()" << endl; 9 } 10 ~inner(){ 11 cout << "~inner()" << endl; 12 } 13 14 }; 15 static inner m_inn; 16 public: 17 18 Outer(){ 19 cout << "Outer()" << endl; 20 } 21 ~Outer(){ 22 cout << "~Outer()" << endl; 23 } 24 }; 25 Outer::inner Outer::m_inn;//对m_inn进行定义。 26 int main(){ 27 Outer o1; 28 return 0; 29 30 }
此时的运行结果表明,m_inn被创建了。所以如果类内部有静态成员对象,一定要在类体外部进行定义
以上是关于C++中类里面定义 静态成员变量的问题的主要内容,如果未能解决你的问题,请参考以下文章