C++类的静态变量成员和静态成员函数的使用

1 . 类的静态成员变量

当类的一个成员变量被声明为static类型时,该成员变量就是类的静态变量,属于类的所有实例。也就是说类的静态变量是类的所有该类实例的全局变量

 

静态成员变量的初始化,与其他变量的初始化很不一样,静态成员需要在类外初始化,形式如下:

 

<静态变量的类型>  <类名> :: <类的静态成员变量名>  <= 初始化值>

 

比如Animal有私有静态成员

static int m_sCount;

 

则初始化方法为:

int Animal::m_sCount = 0;

 

显示初始化值为0,如果加上=赋值初值,则默认为0

 

 

示例代码

[cpp]  view plain  copy
  1. #include <iostream>  
  2. class Animal  
  3. {  
  4. public:  
  5.     Animal()  
  6.     {  
  7.         m_c = 0;  
  8.     }  
  9.   
  10.     void add()  
  11.     {  
  12.         m_sCount++;  
  13.         std::cout<<"Animal::add "<< m_sCount <<std::endl;  
  14.     }  
  15.   
  16.     static void print()  
  17.     {  
  18.         std::cout<<"Animal::print "<< m_sCount<<std::endl;  
  19.     }  
  20. private:  
  21.     static int m_sCount;  
  22.     int m_c;  
  23. };  
  24.   
  25. int Animal::m_sCount = 0;  
  26.   
  27. int main()  
  28. {  
  29.     Animal  animal[10];  
  30.     int i = 0;  
  31.       
  32.     for(i = 0; i < 10; i++)  
  33.     {  
  34.         animal[i].add();  
  35.     }  
  36.   
  37.     for(i = 0; i < 10; i++)  
  38.     {  
  39.         animal[i].print();  
  40.     }  
  41.       
  42.     return 0;  
  43. }  

运行结果:




2.类的静态成员函数

 

(1)静态成员函数中不能引用非静态成员

因为 静态成员函数属于类的,不属于某个具体的对象 ,因此不能引用非静态成员(没有具体的内存呀)

[cpp]  view plain  copy
  1. #include <iostream>  
  2. class Animal  
  3. {  
  4. public:  
  5.     Animal()  
  6.     {  
  7.         m_c = 0;  
  8.     }  
  9.   
  10.     void add()  
  11.     {  
  12.         m_sCount++;  
  13.         std::cout<<"Animal::add "<< m_sCount <<std::endl;  
  14.     }  
  15.   
  16.     static void print()  
  17.     {  
  18.         m_c = 0;  
  19.         std::cout<<"Animal::print "<< m_sCount<<std::endl;  
  20.     }  
  21. private:  
  22.     static int m_sCount;  
  23.     int m_c;  
  24. };  
  25.   
  26. int Animal::m_sCount = 0;  
  27.   
  28. int main()  
  29. {  
  30.     Animal  animal[10];  
  31.     int i = 0;  
  32.       
  33.     for(i = 0; i < 10; i++)  
  34.     {  
  35.         animal[i].add();  
  36.     }  
  37.   
  38.     for(i = 0; i < 10; i++)  
  39.     {  
  40.         animal[i].print();  
  41.     }  
  42.       
  43.     return 0;  
  44. }  



(2)可以使用  类名::静态函数名()  引用静态成员函数

因为静态成员函数属于所有对象共有但不能用::调用非静态成员函数。

[cpp]  view plain  copy
  1. #include <iostream>  
  2. class Animal  
  3. {  
  4. public:  
  5.     Animal()  
  6.     {  
  7.         m_c = 0;  
  8.     }  
  9.   
  10.     void add()  
  11.     {  
  12.         m_sCount++;  
  13.         std::cout<<"Animal::add "<< m_sCount <<std::endl;  
  14.     }  
  15.   
  16.     static void print()  
  17.     {  
  18.         //m_c = 0;  
  19.         std::cout<<"Animal::print "<< m_sCount<<std::endl;  
  20.     }  
  21. private:  
  22.         static int m_sCount;  
  23.     int m_c;  
  24. };  
  25.   
  26. int Animal::m_sCount = 0;  
  27.   
  28. int main()  
  29. {  
  30.     Animal  animal;  
  31.       
  32.     //Animal::add();  
  33.     Animal::print();  
  34.       
  35.     return 0;  
  36. }  



猜你喜欢

转载自blog.csdn.net/weixin_39345003/article/details/80728122