C++クラスのstaticデータメンバー


1.クラスのstaticデータメンバーの初期化は通常のメンバーとは異なります.staticメンバーはコンストラクション関数によって初期化されるのではなく、定義時に初期化されます.すなわち、クラスを宣言するときにstaticデータメンバーを宣言するだけでなく、最初の使用前に定義する必要があります.
ただし、クラス内のconst static intメンバー(intに限定されず、shortなど)と列挙はクラスで宣言して初期化することができ、他のタイプは宣言することができ、クラス定義体の外部で定義することができます.
2、オブジェクト定義がちょうど一度であることを保証するために、staticデータメンバーの定義をクラスを含む非インラインメンバー関数定義のファイルに置くべきである.简単に言えば置くことです.cppの中に、置かないでください.h中、なぜなら.hは複数のファイルに含まれ、重複定義を生じる可能性がある.
3、クラス定義体内部の宣言でのみstaticキーワードを使用でき、定義時に使用できない
/**********************************************************
 *static_test.h
*********************************************************/
class Account {
 // ...
private:
 static const int nameSize = 16;//   ,                
// static const char name[nameSize] = "Savings Account"; //   
 static const char name[nameSize];
 static const char sChar = 'f'; //   ,                
// char c = 'f'; //   
 static const float sFloat = 1.1; //   ,                
};
/**********************************************************
 *static_test.cpp
*********************************************************/
const char Account::name[nameSize] = "Savings Account";
//   nameSize  ,               ,
//                ,               :
//error: duplicate initialization of 'Account::nameSize'
const int Account::nameSize;