スポンサードリンク
HOME > C++言語 > クラス機能 静的メンバ関数

C++言語 - クラス機能 静的メンバ関数

グローバルな領域(大域)に静的変数や静的関数を作る事はできましたが、

クラス内にも静的メンバ変数静的メンバ関数を作る事ができます。

キーワードは、グローバルな領域に作る時と同じようにstaticを付けます。

ここでは、静的メンバ関数の説明をしています。静的メンバ変数の説明はコチラです。



静的メンバ関数

クラスの中にstatic付きで定義された関数は、静的メンバ関数となります。

静的メンバ関数の特徴は以下の通りです。

静的メンバ関数には、thisポインタが渡されません。(thisポインタについてはコチラ

そのため、通常、静的メンバ関数内から

同クラス内のメンバ変数にアクセスする事ができません。

ただ、静的メンバ変数へはアクセス可能です。

また、同クラス内のstaticが付かないメンバ関数にもアクセスできません。

このような制限があるため、

通常、静的メンバ関数では、静的メンバ変数を扱う使い方が一般的な方法です。

記述例

ファイル名:hito.h
class hito {
public:

static int sint;

static void show();

};


ファイル名:hito.cpp
#include <iostream>
#include "hito.h"

using namespace std;

int hito::sint = 0;

void hito::show() {
   cout << "sintの値は" << hito::sint << "です" << '\n';
}


静的メンバ関数は、ヘッダファイル内にstatic付きで定義します。

静的メンバ関数の実装は、ソースファイル内で行います。

この時にキーワードstaticを付ける必要はありません。

と言うか、付けてはいけません。(コンパイルエラーが出ます。)

使用例

先程のヘッダファイル:hito.hとソースファイル:hito.cppが組み込まれている

モノとして説明します。

ファイル名:main.cpp
#include "hito.h"

void main() [
   hito a;
   hito b;

   a.sint = 10;
   b.sint = 20;
   hito::sint = 30;

   a.show();
   b.show();
   hito::show();

}


この例では、クラスhitoのインスタンスabをつくり、

それぞれ、静的メンバ変数へ代入を行い、静的メンバ関数showを呼び出す例です。

クラスのインスタンスがある場合は、インスタンス名.静的メンバ関数名

アクセスできますが、

クラスのインスタンスがない場合でも、クラス名::静的メンバ関数名とすれば、

アクセスできます。



スポンサードリンク







HOME

言語解説編
プログラミング用語・知識

C言語

C++言語

Java

C#

Visual Basic.NET

アプリケーション編
C言語による
コンソールプログラミング




Copyright (C) プログラミングランド All Rights Reserved