C++ の Const メンバー関数
この記事では、C++ での定数メンバー関数の使用について説明します。キーワード const
を使用して、オブジェクト、変数、または関数を定数にします。
他の変数やオブジェクトと同様に、クラスのメンバー関数も const
にすることができます。この記事では、このような機能に関する特定の規則と規制について説明します。
C++ の Const
メンバー関数
Const
は型修飾子であり、データが読み取り専用であることを示すデータ型で使用されるキーワードです。定数の宣言に使用できますが、Const
は型の一部であるという点で他の言語の同等の構造とは異なり、ポインター、参照、複合データ型、および型チェックと組み合わせると複雑な動作をします。
Const
メンバー関数は、プログラムで定数として宣言されています。これらの関数によって参照されるオブジェクトは変更できません。
オブジェクトへの意図しない変更を避けるために、const
キーワードを使用することをお勧めします。どのオブジェクトでも const
メンバー関数を呼び出すことができます。
non-const
オブジェクトのみが non-const
関数を呼び出すことができます。クラスのオブジェクトを const
オブジェクトとして宣言すると、const
メンバー関数のみを呼び出すことができますが、non-const
オブジェクトはすべてのメンバー関数 const
または non-const
を呼び出すことができます。
const
関数を作成するための構文は次のとおりです。
return -datatype function_name() const;
以下の例を考えてみましょう。
#include <iostream>
using namespace std;
class Data {
int val;
public:
Data(int a = 0) { val = a; }
int getValue() const { return val; }
};
int main() {
Data d(10);
cout << d.getValue();
return 0;
}
このコードセグメントでは、コンストラクターとメンバー関数 getValue()
を使用してクラス Data
を宣言しました。この関数は const
関数であるため、データメンバーの値を変更することはできません。
データメンバーのデータを変更すると、コンパイラはエラーを生成します。この関数の this
ポインターは、const
メンバー関数に提供される const
オブジェクトへのポインターです。
これにより、ポインタを使用してオブジェクトのデータメンバーを変更できないようになります。定数メソッドと呼ばれるオブジェクトのデータメンバーを変更しようとしたり、そのオブジェクトの non-const
メンバー関数を呼び出そうとすると、構文エラーが発生します。
定数メンバー関数では、非定数バージョンがオーバーロードされる可能性があります。コンパイラは、const
オブジェクトまたは non-const
オブジェクトのどちらから呼び出されたかに基づいて、使用するバージョンを決定します。
Const
コンストラクタとデストラクタを宣言することはできません。オブジェクト自体が一定であっても、常にデータメンバーを変更できます。
静的メンバー関数を const
として定義することはできません。const
キーワードは、メンバー関数に提供される this
ポインター参照に影響しますが、静的メンバー関数は、オブジェクトなしで呼び出すことができるため、これはありません。
関数がクラス変数に書き込めないようにする const
関数の制限を緩和することもできます。これらのクラス変数は、関数が const
関数としてマークされている場合でも書き込み可能にするために、mutable
キーワードでマークされています。
クラス変数が可変
としてマークされ、const
関数がそれに書き込む場合、コードは正しくコンパイルされ、変数を変更できます(C++ 11)。
C++ ステートメントでの const
キーワードの配置を変更すると、const
キーワードを使用する場合によくあるように、完全に異なるセマンティクスがあります。前述の const
の使用法は、const
が括弧の後の関数宣言の最後に配置されている場合にのみ適用されます。
Husnain is a professional Software Engineer and a researcher who loves to learn, build, write, and teach. Having worked various jobs in the IT industry, he especially enjoys finding ways to express complex ideas in simple ways through his content. In his free time, Husnain unwinds by thinking about tech fiction to solve problems around him.
LinkedIn