静的メンバーでのクラス・アクセス演算子の使用

C++静的メンバーを参照するのに、クラス・メンバー・アクセス構文を使用する必要はありません。 つまり、クラス 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 つだけなので、 クラス・オブジェクトとのいかなる関連付けとも関係なく、静的メンバーを参照することができます。 静的メンバーは、たとえクラスのオブジェクトが宣言されていなくても存在します。

関連参照

IBM Copyright 2003