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タイプのクラスの静的変数は、クラスの外で初期化してもよいし、他の関数で「クラス名::変数」(例えば、CTest 1::m_num 1)でアクセスして操作してもよい.
2).private、protectedは、クラスの外で初期化することができ、「クラス名::変数」アクセスと操作を通じて、publicタイプの静的関数を定義することができ、「クラス名::関数」を通じてアクセスと操作を行うことができる.クラスのオブジェクトを定義し、オブジェクト呼び出し関数を使用してアクセスおよび操作することもできます.
3).クラスの静的変数は、1つのオブジェクト(またはクラス外)が変更され、操作されると、t 1およびt 2の操作など、他のすべての場所が変更されます.
この特徴は、1つのクラスのオブジェクトが何回使用されたかを計算するために使用することができ、変数が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タイプの静的変数は、クラス外で初期化してもよいし、別の関数で「クラス名::変数」(例えば:CTest 1::m_num 1)でアクセスしてもよいが、変更できないのがconstの特性である.
転載はオリジナルリンクを明記してください:http://blog.csdn.net/wujunokay/article/details/12193551