2016-10-19 6 views
4

私はクラスのゲッターとセッターの機能を理解しようとしている...constメンバー関数を使う理由は?

私の質問は: 私はちょうどのみ、そのクラス(「ゲッター」機能)から状態を取得する機能を設計する場合、なぜそれをマーク"constメンバ関数"として? 私の関数がそのクラスの所有権を変更しないように設計されている場合、なぜconstメンバー関数を使うのですか? ?

int GetValue() {return a_private_variable;} 

と実質的な違いは何であるか

int GetValue() const {return a_private_variable;} 

答えて

8

int GetValue() const; 

に、あなたはそれがオブジェクトには何も変更しないことをコンパイラに伝えるようにあなたは、constとしてメンバ関数を宣言。

つまり、メンバ関数を定数オブジェクトで呼び出すこともできます。 const修飾子がない場合は、constと定義されているオブジェクトでは呼び出すことができません。定数でないオブジェクトに対しては、依然としてconstメンバ関数を呼び出すことができます。

また、const修飾子はメンバ関数のシグネチャの一部であり、非const関数でオーバーロードすることができることにも注意してください。これはあなたが持つことができる

int GetValue() const; 
int GetValue(); 

同じクラスです。

0

クラスのconstのインスタンスでのみ呼び出すことができます。 私は、例えば

:(してください理解していませんconst関数。

acのconstインスタンスを持つlassはあなたのプログラムをより安定させるのに便利です。あなたが偶然にインスタンスを変更することができないからです。

あなたの場合、関数はまったく同じことを行いますが、そのようにする必要はありません。

+0

'const'として宣言されたメンバ関数は、定数でないオブジェクトに対して呼び出すことができます。 –

+0

ありがとう、私はこれを間違った方法で行った。あなたの答えは私よりもはるかに良いです。 –

2

constは、C++の3つの異なる場所に表示されます。

例1:

const Object obj1;

  • OBJ1がconstオブジェクトです。このオブジェクトで何も変更できないことを意味します。

    int myMethod() const {//do something}

    • これは実施例2

      、このオブジェクトのみ

    INTのGetValue()constは{a_private_variable戻り}様constメンバ関数を呼び出すことができconst方法。それがクラスの内部で宣言されている場合は、constメンバ関数になります。これらは、変数が呼び出すことができるメソッドのタイプです(const)。

例3:

int myMethod(const Object &x) {//do something with x}

  • これはconstパラメータを受け取る方法です。つまり、myMethodの内部のロジックは、xと何も変えられません。また、パラメータはコピーではなく参照渡しであることに注意してください。私はこれを読み取り専用の方法と考えています。

他人が使用するソフトウェアを開発する場合は、彼らが壊れてはいけないことを知らないものを壊さないようにするのは良い考えです。この場合、変数、メソッド、およびパラメータをconstに制限して、契約が保留されていることを保証することができます。私は大学で学んだ主なアイデアを要約しようとしましたが、C++でconstの周りには多くのリソースがオンラインであります。詳しく知りたい方はlinkをご覧ください。また、しばらくの間、私がC/C++領域にいなかったので、私は誤って何かを思い出した可能性があります。

関連する問題