当前位置:编程学习 > C/C++ >>

C++类静态成员的初始化和用法探讨

一、一般类型的类的静态变量
 
1.首先看下面的代码:
 
 
 
class CTest1  
{  
public:  
    static int m_num1;  
    void printNum(){cout << m_num2 << endl;};  
    void SetNum2(int i){m_num2 = i;};  
    static void printNum2(){cout << m_num2 << endl;};  
    static void printNum3(){cout << m_num3 << endl;};  
  
private:  
    static int m_num2;  
protected:  
    static int m_num3;  
  
};  
  
int CTest1::m_num1 =1;  
int CTest1::m_num2 =2;  
int CTest1::m_num3 =3;  
  
int main()  
{  
    cout << CTest1::m_num1 << endl;  
    //cout << CTest1::m_num2 << endl;//这样编译报错  
    //cout << CTest1::m_num3 << endl;//这样编译报错  
    CTest1::printNum2();//通过静态函数打印  
    CTest1::printNum3();//通过静态函数打印  
  
  
    CTest1 t1;  
    t1.printNum();  
  
    CTest1 t2;  
    t2.printNum();  
  
    t1.SetNum2(20);  
    t1.printNum();  
    t2.printNum();  
  
    t2.SetNum2(30);  
    t1.printNum();  
    t2.printNum();  
  
  
    CTest1::m_num1 = 10;  
  

 

 
  
    return 0;  
}  
 
2.测试结果:
1
2
3
2
2
20
20
30
30
 
3.结论:
 
1).public类型的类的静态变量,可以在类外面进行初始化,也可以在别的函数里通过“类名::变量”(比如:CTest1::m_num1)进行访问和操作。
 
2).private、protected,可以在类外面进行初始化,不能通过“类名::变量”访问和操作,可以定义public类型的静态函数,通过“类名::函数”进行访问和操作;也可以通过定义类的对象,通过对象调用函数来访问和操作。
 
3).类的静态变量,在一个对象(或者类外)改变和操作后,其他所有的地方都会相应改变,比如t1和t2的操作。
 
这个特点可以用来计算一个类的对象被使用了多少次,变量初始化为0,比如new的时候变量++,delete的时候变量--,当变量为=0时候,可以销毁这个类的对象。
 
二、const类型的类的静态变量
 
1.首先看下面的代码:
 
 
 
class CTest2  
{  
public:  
    CTest2(int i, char* str)  
    {  
  
    }  
    static const int m_num1;//static const int m_num1 =16;//VC中这样不行  
    static const char* m_name;//static const char m_name[m_num1];//VC中这样不行  
};  
  
const int CTest2::m_num1 =1;  
const char* CTest2::m_name="121212";   
  
int main()  
{  
    cout << CTest2::m_num1 << endl;  
  
    //CTest2::m_num1 =10;//这样会编译报错。  
  
    return 0;  
}  

 

 
 
2.结论
 
public类型的类的const类型的静态变量,可以在类外面进行初始化,也可以在别的函数里通过“类名::变量”(比如:CTest1::m_num1)进行访问,但不能被改变,这个是const的特性。
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,