staticの使い方4〜静的メンバ関数(メソッド)〜


目次に戻る


今日から3日間C++言語特有になります。でも、C言語愛用家のみなさんも見てくださ いね。なお、C++特有の static の使い方は特殊です。特殊すぎて頭が混乱する可能性があるので注意してくださ い。
 
時間クラスというものを考えてみてください。時間クラスは「時刻」を取り扱う物です。 では、現在の時間を表すインスタンスを得たい場合にはどうしますか?現在の時間を得 る関数でもつくりますか?それとも、「現在の時刻をセットする」メソッドを時間クラスのメン バ関数として定義しますか?
 
// 現在の時間を表す時間クラス のインスタンスを返す関数の例
TJikanClass GetNowTime( void )
{
      :
      :
    return nowtime;
}

// 時間クラスのメンバ関数に「現在の時刻をセットする」もの を持つ例
class TJikanClass
{
      :
      :

public:
   void SetNowTime( void );     // 現在の時間をセットする
   :
   :
};

どちらかというと、クラスのメンバ関数に実装するよりも、関数の戻り値として現在の時間 を表すインスタンスを得る方がスマートだと思います。しかしできることならば時間クラス に関わる事なのだからクラス内のメソッドとして定義したい。でも、現在の時間を得るのに インスタンスを一度作成した後メソッドを呼ぶというのは面倒くさい。
 
そこで登場するのが 静的メンバ関数 です。静的メンバ関数は、クラスのインスタン スが無くても呼び出す事ができます。つまり普通の関数と一緒なのです。異なる所は呼 び出し方法です。クラス TJikanClass の中の静的メンバ関数 GetNowTimeInstance() を実行したい場合は次のよ うに呼び出します。
 
// クラス TJikanClass の中の静 的メンバ関数 GetNowTimeInstance() を実行する方法
TJikanClass::GetNowTimeInstance();
静的メンバ関数を定義したい場合はクラス宣言の中の、関数宣言の前にstaticをつけま す。関数定義の部分にはつける必要がありません。
 
// 静的メンバ関数の定義例
class TJikanClass;
class TJikanClass
{
     :
     :

public:
    static TJikanClass GetNowTimeInstance( void );
};

TJikanClass TJikanClass::GetNowTimeInstance( void )
{
    :
    :
    return nowtime;
}

なお、静的メンバ関数はたいてい、というか100% public部で宣言します。private部や protected部で宣言したらわざわざstaticにする意味が無いでしょ?


目次に戻る