//再版
クラスの増加のconstメンバ関数の後ろに、この関数はクラスオブジェクト(正確には非静的データメンバ)のデータメンバーが変更を加えることを示していません。
設計部門では、constの増加の後ろにあることをデータメンバのメンバ関数を変更し、データメンバーを変更するしない原則は、constメンバ関数を追加することはできません。だから、行動のメンバ関数のためのconstキーワードは、より明確に定義されていました。
(1)変性constメンバ関数(CONST関数ではなく、前面または関数パラメータリスト内のパラメータテーブルを参照した後)、メンバーのみ読み出されたデータは、データメンバが変更されないことができ、無修正のconstメンバ関数、データメンバは読み書き可能です。
それは、(2)また、constのクラスのメンバ関数の後ろにプラス何が良いのですか?一定であること(すなわち、CONST)オブジェクトはconstメンバ関数を呼び出すことができ、かつ非const修飾された関数を呼び出すことはできません。
- constメンバ関数は、CONSTデータメンバを非constオブジェクト非constデータメンバにアクセスすることができ、メンバーはまた、constオブジェクトのすべてのデータへのアクセス権を持っています。
- ;非constメンバ関数は、オブジェクトのみ(CONSTアクセスできない任意のオブジェクトのデータ・メンバーの)任意の非constデータメンバにアクセスすることができる。(参照 、上記理由を缶C ++プライマー(5)231ページデフォルトでは、このタイプ定数ポインタCONSTのクラスタイプのバージョン、例えばスクリーンクラス、この型スクリーンへのポインタである* cosnt。バックメンバ関数に加え、constキーワードは、暗黙このポインタ、すなわちCONST CONST *画面を指すように変更されます定数型定数ポインタのクラスバージョン。初期化の原則に従って、私たちはのconstポインタへの定数ポインタを割り当てることはできません)
- メンバ関数は、データメンバーを変更しない場合は良いプログラミングスタイルとして、文のメンバ関数では、メンバ関数はできるだけconstメンバ関数を宣言している必要があります。
変更された2. constの?
メンバ関数のconst書かれた、2つあります
1、ボイド楽しい(int型B、INT)のconst {}
図2に示すように、ボイドCONST楽しい(int型A、int型B){}
どちらのバージョンは基本的にあります:void楽しい(const型*この、int型A、int型のB)。
CONSTは、修正及びパラメータBれず、CONST属性this-> a及びthis-> Bに変更されます。かかわらず、constの書かれた位置の。
なぜ?
このポインタC ++クラスは、隠し行うにはあるので、本質的には、constのポインタの変更はメモリ空間へのこのポインタポイントが隠されている、このポインタが変更されます。
要約:
。これらはオブジェクト非const、CONSTデータメンバのデータメンバにアクセスすることができる1)のconst constメンバ関数、オブジェクトCONSTのすべてのデータメンバにアクセスすることができます。
2)非constのconstメンバ関数は、オブジェクトの非const、constのデータメンバのデータメンバにアクセスすることができますが、オブジェクトのconstのデータメンバのいずれかにアクセスすることはできません。
メンバ関数は、データメンバの動作を変更しない場合3)良いプログラミングスタイル、メンバ関数の宣言として、メンバ関数はconstメンバ関数は、可能性として宣言する必要があります。
4)のみconstメンバ関数の場合は、非constオブジェクトはconstメンバ関数で呼び出すことができます。CONSTバージョンと非constメンバ関数を同時にバージョンを発生した場合、非constオブジェクトは、非constメンバ関数を呼び出します。