メンバー関数

C++メンバー関数 とは、クラスのメンバーとして宣言される演算子および関数のことです。 メンバー関数には、friend 指定子を用いて宣言される演算子および関数は含まれません。 これらは、クラスのフレンド と呼ばれます。 メンバー関数を static として宣言できます。 これは、静的メンバー関数 と呼ばれます。 static として宣言されていないメンバー関数は、非静的メンバー関数 と呼ばれます。

クラス Ax という名前のオブジェクトを作成し、クラス A には、 非静的メンバー関数 f() があるとします。 関数 x.f() を呼び出す場合、f() の本体にあるキーワード this は、x のアドレスとなります。

メンバー関数の定義は、それを囲むクラスのスコープ内にあります。 メンバー関数の定義が、クラス・メンバーのそのメンバーの宣言の前にある場合であっても、メンバー関数の本体は、 クラス宣言の後で分析され、そのクラスのメンバーを、メンバー関数の本体で使用できるようにします。 以下の例では、関数 add() が呼び出されるとき、データ変数の ab、および cadd() の本体で使 用することができます。

class x
{
public:
      int add()             // inline member function add
      {return a+b+c;};
private:
      int a,b,c;
};

インライン・メンバー関数

クラス定義の内部にメンバー関数を定義するか、またはクラス定義にメンバー関数をすでに宣言している (しかし、定義はされていない) 場合は、 メンバー関数をクラス定義の外側で定義できます。

そのクラス・メンバー・リスト内で定義されるメンバー関数は、インライン・メンバー関数 と呼ばれます。 コードを数行含んでいるメンバー関数は、通常インラインで宣言されます。 上記の例では、add() がインライン・メンバー関数です。 クラス定義の外側にメンバー関数を定義する場合、メンバー関数は、クラス定義を囲むネーム・スペース・スコープ内に入れる必要があります。 スコープ・レゾリューション (::) 演算子を使用して、メンバー関数名を修飾することもできます。

インライン・メンバー関数を宣言するのと同等な方法は、inline キーワードを指定してクラス内でその関数を宣言するか (そしてクラスの外側で関数を定義する)、または inline キーワードを 使用して、クラス宣言の外側でその関数を定義することです。

次の例では、メンバー関数 Y::f() は、インライン・メンバー関数です。

struct Y {
private:
  char a*;
public:
  char* f() { return a; }
};

次の例は、直前の例と同等なものです。Y::f() が、インライン・メンバー関数です。

struct Y {
private:
  char a*;
public:
  char* f();
};
 
inline char* Z::f() { return a; }

リンケージはデフォルトでは外部結合なので、inline 指定子はメンバー関数または非メンバー関数の リンケージには影響を与えません。

ローカル・クラスのメンバー関数

ローカル・クラスのメンバー関数は、そのクラス定義の中で定義してください。 結果として、ローカル・クラスのメンバー関数は、暗黙的にインライン関数になります。 これらのインライン・メンバー関数はリンケージを持ちません。

関連参照

IBM Copyright 2003