c++中类的静态成员对象

Posted 阿瞒123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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++中类的静态成员对象的主要内容,如果未能解决你的问题,请参考以下文章

C++中类的静态成员变量

C++中类的静态成员初始化

C++中类的静态数据成员函数解析

面向对象中类的成员

C++中类里面定义 静态成员变量的问题

C++类的大小计算汇总