zoukankan      html  css  js  c++  java
  • 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被创建了。所以如果类内部有静态成员对象,一定要在类体外部进行定义

  • 相关阅读:
    【HDOJ】2267 How Many People Can Survive
    【HDOJ】2268 How To Use The Car
    【HDOJ】2266 How Many Equations Can You Find
    【POJ】2278 DNA Sequence
    【ZOJ】3430 Detect the Virus
    【HDOJ】2896 病毒侵袭
    求奇数的乘积
    平方和与立方和
    求数列的和
    水仙花数
  • 原文地址:https://www.cnblogs.com/cplinux/p/5621781.html
Copyright © 2011-2022 走看看