C++の静的関数と定数関数の違いとは?

この記事には、アフィリエイト広告を利用しています。

スポンサーリンク


C++におけるStatic関数とConstant関数の主な違いは、Static関数はオブジェクトを使わずにクラスを使った関数を呼び出すことができるのに対し、Constant関数はオブジェクトを変更することができない点です。

C++は、1979年にBjarne Stroustrupによって開発されたプログラミング言語です。

C++はC言語と似ていますが、C言語よりも多くの機能を持っています。

そのため、C言語のサブセットと呼ばれています。

C++の主な利点は、オブジェクト指向プログラミング(OOP)をサポートしていることです。

プログラマーは、OOPを使用することで、コンピューティングにおける実世界のシナリオを簡単にモデル化することができます。

オブジェクト指向では、すべてがオブジェクトであり、これらのオブジェクトは互いに通信する。

しかし、オブジェクトを作成するためのクラスが必要です

クラスは、オブジェクトを作成するための設計図です。

各クラスにはプロパティとビヘイビアがあり、プロパティは属性やデータを記述し、メソッドやファンクションはビヘイビアを記述する。

属性はメンバ変数で、関数はメンバ関数です。

関数には、静的関数と定数関数があります。

スポンサーリンク

C++の静的関数とは?

staticキーワードで定義された関数は、静的関数と呼ばれます。

通常、関数はオブジェクトと連動します。

プログラマは、これらの関数を呼び出すためにオブジェクトを使用します。

しかし、静的関数の場合は違います。

静的関数は、クラスの特定のオブジェクトに対してではなく、クラスレベルで動作します。

プログラマは、クラス名とスコープ解決:: 演算子を使用して静的関数を呼び出すことができます。

静的関数は、通常のデータメンバーや関数にアクセスすることはできません。

静的関数が呼び出せるのは、静的データメンバと静的メンバ関数のみです。

図1:C++の静的関数

上のプログラムでは、MyClassというクラスがあります。

このクラスは、fucntion1 という静的関数を持っています。

プログラマはmainメソッドの中で、16行目のようにクラス名とスコープ解決を使って、このスタティック関数を呼び出すことができる。

プログラムを実行すると、スタティック関数が実行され、その関数内のステートメントが画面に表示されます。

C++の定数関数とは

const」キーワードを持つ関数は、定数関数です。

定数関数は、オブジェクトや関連するデータメンバを変更することができません。

上の図で、Test はクラスです。

このクラスは、value というデータ・メンバを持っています。

Testのコンストラクタはxを取得し、そのxをデータメンバのvalueにセットします。

さらに、その値を返す定数関数があります。

メインプログラムでは、t1 と t2 は Test 型のオブジェクトです。

getValueステートメントは、t1とt2の対応する値を表示します。

これは定数関数なので、オブジェクトに対していかなる変更も行うことはできません。

C++における静的関数と定数関数の違い

定義

静的関数は、クラスのインスタンスを使用せずに、クラスを使用して関数にアクセスすることができるメンバ関数です。

定数関数は、プログラムの中で定数として宣言されたメンバ関数です。

これが、C++における静的関数と定数関数の主な違いです。

キーワード

静的関数は「static」キーワードを使用し、定数関数は「constant」キーワードを使用します。

データメンバーと関数

さらに、C++における静的関数と定数関数のもう一つの違いは、静的データメンバと静的メンバ関数は静的関数を呼び出せるのに対し、定数関数はどんな型のオブジェクトでも呼び出せることです。

使用方法

Static関数は、オブジェクトを使用せずにクラスを使用して関数を呼び出すのに役立ち、Constant関数は、オブジェクトを変更しないようにするのに役立ちます。

したがって、この点もC++におけるStatic関数とConstant関数の違いと言えます。

結論

クラスには、データ(データメンバ)と関数(メンバ関数)があります。

メンバ関数には、スタティック関数とコンスタント関数の2種類があります。

C++におけるStatic関数とConstant関数の大きな違いは、Static関数はオブジェクトを使用せずにクラスを使用して関数を呼び出すことができるのに対し、Constant関数はオブジェクトを変更することができない点です。

タイトルとURLをコピーしました