// ( t3.C ) // クラスの静的なメンバ変数と関数 // #include const int WHITE = 1 ; const int BLACK = 2 ; // ル−ルベ−スとして利用してみる。 class Rule { static int color ; // メンバ変数、メンバ関数に static がついていること static char* style ; // に注目! public: static void show_style() { cout << "style : " << style << endl ; } static int get_color() { return color ; } static void set_color( int c ) { color = c ; } public: static double value ; } ; int Rule::color = WHITE ; // 値を設定する char* Rule::style = "Katou" ; // int や char* は必要である main() { // インスタンスを1個も作ってないことに注意! Rule::show_style() ; // ル−ルを引き出す Rule::value = 1.0 ; // ル−チンの中で値を設定する場合は、public でなけれ // ばならない。double Rule::value = 1.0 ではダメ! cout << "Color = " << Rule::get_color() << endl ; Rule::set_color( BLACK ) ; cout << "Color = " << Rule::get_color() << endl ; } /* [結果] style : Katou Color = 1 Color = 2 [注意] 静的メンバ関数を外で実装する場合の注意 void Rule::show_style() { cout << style << endl ; } OK inline static void Rule::show_style() { cout << style << endl ; } OK static void Rule::show_style() { cout << style << endl ; } NG [参考] 一見して不思議なクラスである。インスタンスを全く作らずに、クラス定義自体にアクセス できてしまう。しかしよく考えてみると、これはオブジェクトそのものだと言えるのでない だろうか。 */