静的メンバー関数
静的メンバー関数は、クラス スコープを持つと見なされます。 非静的メンバー関数とは異なり、これらの関数には暗黙の this 引数がありません。したがって、静的データ メンバー、列挙子、または入れ子にされた型のみ直接使用できます。 静的メンバー関数には、対応するクラス型のオブジェクトを使用せずにアクセスできます。 次の例について考えます。
使用例
// static_member_functions.cpp
#include <stdio.h>
class StaticTest
{
private:
static int x;
public:
static int count()
{
return x;
}
};
int StaticTest::x = 9;
int main()
{
printf_s("%d\n", StaticTest::count()); // 9
}
コメント
このコードでは、クラス StaticTest には静的メンバー関数 count が含まれます。 この関数はプライベート クラス メンバーの値を返しますが、StaticTest 型の特定のオブジェクトには、必ずしも関連付けられていません。
静的メンバー関数には外部リンケージがあります。 これらの関数には、this ポインターがありません。 結果として、以下の制限がこのような関数に適用されます。
これらは、メンバー選択演算子 (. または –>) を使用して非静的クラス メンバー データにアクセスできません。
これらは virtual として宣言できません。
これらには、同じ引数の型を持つ非静的関数と同じ名前を付けることはできません。
注意
静的メンバー関数を選択するメンバー選択演算子 (. または –>) の左辺は評価されません。これは、関数が副作用のために使用されている場合は、重要である場合があります。たとえば、式 SideEffects().CountOf() では、関数 SideEffects は呼び出されません。