• 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的特性。


    转载请注明原创链接:http://blog.csdn.net/wujunokay/article/details/12193551



  • 相关阅读:
    Activeandroid的使用
    Android的数据库ORM框架:Sugar ORM
    Android 快速开发系列 ORMLite 框架最佳实践
    Android ORM 框架之 greenDAO 使用心得
    最受欢迎的5个Android ORM框架
    Android butterknife框架 注解攻略
    强烈推荐android studio用的几个插件
    Android4.0(Phone)来电过程分析
    设计模式入门之装饰器模式Decorator
    VB.NET之错误异常处理
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3347866.html
Copyright © 2020-2023  润新知