静的メンバーを参照するのに、クラス・メンバー・アクセス構文を使用する必要はありません。
つまり、クラス X の静的メンバー s にアクセスするために、式 X::s が使用できます。
以下の例は、静的メンバーへのアクセスを説明しています。
#include <iostream> using namespace std; struct A { static void f() { cout << "In static function A::f()" << endl; } }; int main() { // no object required for static member A::f(); A a; A* ap = &a; a.f(); ap->f(); }
ステートメント A::f()、a.f()、および ap->f() の 3 つはすべて、 同じ静的メンバー関数 A::f() を呼び出します。
そのクラスの同じスコープ内、または静的メンバーのクラスから派生したクラスのスコープ内にある、 静的メンバーを直接参照することができます。 次の例は、後者のケースを説明しています (静的メンバーのクラスから派生したクラスのスコープ内にある 静的メンバーを直接参照する)。
#include <iostream> using namespace std; int g() { cout << "In function g()" << endl; return 0; } class X { public: static int g() { cout << "In static member function X::g()" << endl; return 1; } }; class Y: public X { public: static int i; }; int Y::i = g(); int main() { }
次に、上記のコード出力を示します。
In static member function X::g()
初期設定 int Y::i = g() は、X::g() を呼び出しますが、 グローバル・ネーム・スペースに宣言されている関数、g() は呼び出しません。
1 つのクラスの全オブジェクトによって共用される静的メンバーは 1 つだけなので、 クラス・オブジェクトとのいかなる関連付けとも関係なく、静的メンバーを参照することができます。 静的メンバーは、たとえクラスのオブジェクトが宣言されていなくても存在します。
関連参照