C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++のconstメンバー関数とは?基本から使い方まで解説

C++におけるconstメンバー関数とは、クラス内でconstキーワードを付けて宣言されたメンバー関数のことです。この種の関数は、呼び出し元のオブジェクトの状態(メンバー変数)を一切変更できません。

オブジェクトに対する意図しない変更やバグを防ぐために、値を返すだけのゲッター関数などには積極的にconstを付けることが推奨されています。

constメンバー関数の重要なルール

  • constメンバー関数:constオブジェクト・非constオブジェクトのどちらからでも呼び出せます。
  • 非constメンバー関数:非constオブジェクトからのみ呼び出せます。constオブジェクトからは呼び出せません。

構文

戻り値の型 関数名() const;

関数の引数リストの後にconstを記述することで、その関数がconstメンバー関数であることをコンパイラに伝えます。

サンプルコード

以下は、C++におけるconstメンバー関数の使用例です。

#include<iostream>
using namespace std;

class Demo {
    int val;
    public:
    Demo(int x = 0) {
        val = x;
    }
    // constメンバー関数:メンバー変数valを変更しない
    int getValue() const {
        return val;
    }
};

int main() {
    // constオブジェクト
    const Demo d(28);
    // 非constオブジェクト
    Demo d1(8);

    cout << "オブジェクトdの値 : " << d.getValue();
    cout << "\nオブジェクトd1の値 : " << d1.getValue();

    return 0;
}

実行結果

オブジェクトdの値 : 28
オブジェクトd1の値 : 8

コードの解説

上記の例では、Demoクラスにconstメンバー関数getValue()を定義しています。この関数はメンバー変数valの値を返すだけで、何も変更しません。

main関数内では、constオブジェクトdと非constオブジェクトd1を作成していますが、どちらのオブジェクトからもgetValue()を問題なく呼び出せています。これは、constメンバー関数があらゆるオブジェクトから呼び出し可能だからです。

もしgetValue()constを付けなかった場合、constオブジェクトdからの呼び出しはコンパイルエラーになります。これがconstメンバー関数を使う最大のメリットであり、constオブジェクトでも安全に利用できるAPIを設計できるのです。

  1. C++で関数にオブジェクトを渡す5つの方法を徹底解説!値渡しからポインタ渡しまで

    C++では、オブジェクトを関数へ渡す方法が複数あります。ここでは、クラス X を関数 fun に渡す場合を例に、代表的な渡し方とそれぞれの特徴・使い分けのポイントを解説します。用途に応じて適切な方法を選ぶことで、パフォーマンスやコードの安全性を高めることができます。 1. 値渡し(Pass by Value) オブジェクトの浅いコピー(シャローコピー)が関数のスコープ内に作成されます。関数内でどのような変更を行っても、呼び出し元のオブジェクトには一切影響しません。独立した作業用コピーが必要な場合に有効ですが、大きなオブジェクトの場合はコピーのコストに注意が必要です。 宣言 void fun(

  2. C/C++からPythonオブジェクトを操作する方法(Cython埋め込みの実践ガイド)

    C/C++からPythonオブジェクトを使うには?CやC++のプログラムからPythonオブジェクトを直接生成・操作したい場合、Cythonを利用するのが最も手軽な方法の一つです。ここでは、シンプルなPythonクラスをCythonでラップし、C言語側に組み込んで(埋め込んで)呼び出す例を紹介します。C++の場合も手順はほぼ同じで、コンパイル時に--cplusオプションを付けるだけで対応できます。ステップ1:Pythonクラスと公開関数を定義する(pycls.pyx)まず、ラップ対象となるPythonクラスと、C側から呼び出せるようにするためのcdef public関数を定義したファイル「py