C ++とオブジェクト指向の可変のconstで
この論文では、オブジェクト指向のためのIレコードCONST(定数)と可変(変数)が理解しました
CONST
- constメンバ関数背面に適用(および宣言と定義で指定されます)
アイデアは、この関数はクラスオブジェクトのクラスのメンバーの内容を変更しないことをコンパイラに伝えることです。コードを見てみましょう:
int sum(const Test &t){
int start = t.beg_pos();
int len = t.length();
int res = 0;
for(int i=0;i<len;++i){
res += t.elem(start+i);
}
return res;
}
我々はtの関数を呼び出すときにtが変更されないことを保証しなければならないので、コードのクラスTは、const参照パラメータです。しかし、関数を呼び出すと、コンパイラは、tの内容を変更しますどの機能を知りません。したがって、この関数は関数の後に、オブジェクトの内容を変更するかどうかをコンパイラに伝えるために、constのを調達するかどうかを決定しなければなりません。
(コンパイラは、それがCONSTまたは非constが、CONST関数として宣言されている各機能を分析するものではないが、任意のコンテンツオブジェクトを変更した場合、それがチェックされます)
- メンバ関数に応じてオーバーロードすることができるかどうかCONST
このカテゴリの下には、我々は、バージョンのconstと非constバージョンvalの機能を提供します。
非constオブジェクトは、(それは問題ではないオブジェクトの内容を変更する)非constバージョンを呼び出しますし、constオブジェクトのconstのバージョンを呼び出します。
class Test{
public:
Test(const MyTest& val)
:_val(val){}
const Test& val()const{ return _val};
Test& val(){ return _val};
private:
MyTest _val;
};
可変
constオブジェクトでは、オブジェクトの内容を変更する必要はありません。しかし、我々は特定の変数の操作を修正することにより、横断同様の操作を行う必要はありますが、今回は、constのと競合するいくつかのクラスインチ これは、我々は、変更可能な変数の前に追加することができ、一定のセックスのオブジェクトを破壊しない、この変数を変更するために、コンパイラに指示するものです。