c++のconstオブジェクトとconstメンバー関数
4710 ワード
c++のconstオブジェクトとconstメンバー関数
一部のメンバー関数はオブジェクトを変更し、一部のメンバー関数はオブジェクトを変更しません.例:int Point::GetY(){
この関数が呼び出されると、ポイントオブジェクトは変更されず、次の関数はポイントオブジェクトを変更します:void Point::SetPt(int x,int y){
xVal=x;
yVal=y;}
メンバー関数の意味をより明確にするために、オブジェクトを変更しないメンバー関数の関数プロトタイプにconstの説明を加えることができます.
class Point{
}; constメンバー関数は、関数のプロトタイプ説明と関数定義にconst制限を追加する必要があります.
{//...
}
const Set s; s.AddElem(10);//不正:AddElemは定数メンバー関数s.Member(10);//このルールの例外は、定数メンバーとして定義されていませんが、コンストラクション関数とコンストラクション関数です.
定数オブジェクトによって呼び出されます(自動呼び出されます).また、データ・メンバー自体が定数でない限り、定数のデータ・メンバーに値を割り当てることもできます.なぜconstメンバー関数が必要ですか?
定義したクラスのメンバー関数には、クラスのデータ・メンバーを変更しないメンバー関数がよくあります.つまり、これらの関数は読み取り専用関数であり、クラスのデータ・メンバーの値を変更する関数もあります.データメンバーを変更しない関数にconstキーワードを付けて識別すると,プログラムの可読性が向上することは明らかである.実際には、プログラムの信頼性も向上し、constのメンバー関数として定義されており、データ・メンバーの値を変更しようとすると、コンパイラはエラーで処理されます.
constメンバー関数とconstオブジェクトは、実際には、constメンバー関数には定数オブジェクト相関というもう一つの役割があります.組み込み
const int i=1 ; 同様に、クラスclassAがあると仮定して、クラスの定数オブジェクトを定義する方法は次のようになります.
const classA a(2);
ここで、aはクラスclassAのconstオブジェクトであり、「2」はその構造関数パラメータに渡される.constオブジェクトのデータメンバーは、オブジェクトの寿命期間内に変更できません.しかし、このクラスのデータメンバーが変更されないことをどのように保証しますか?
constオブジェクトのデータメンバーが変更されないようにするには、C++でconstオブジェクトはconstメンバー関数のみを呼び出すことができます.メンバー関数が実際にデータ・メンバーを変更していない場合、constキーによって限定されていない場合、定数オブジェクトによって呼び出されません.この問題を例に挙げて説明します.
class C{
int GetX(){
return X;}
this->X = X;}
上記のプログラムコードをコンパイルすると、コンパイラはconstCが定数オブジェクトであり、constメンバー関数しか呼び出せないというエラーメッセージが表示されます.GetX()関数は実際にはデータメンバーXを変更していないが、constキーワード限定がないため、constCオブジェクトに呼び出されない.上記の太字コードを使用すると、次のようになります.
int GetX()を次のように書き換えます.
int GetX()constを再コンパイルすれば問題ありません.constメンバー関数の使用
constメンバー関数は、クラスデータメンバーのみを読み取ることができ、クラスメンバーデータを変更することはできません.constメンバー関数を定義する場合は、constキーワードを関数のパラメータテーブルと関数体の間に置きます.なぜconstを関数宣言の前に置かないのかと聞かれるかもしれません.これは関数の戻り値が定数であることを意味し,意味が全く異なるからである.次にconstメンバー関数を定義する例を示します.
class X{
};
キーワードconstは同じ方法で関数実装に繰り返し表示されなければなりません.そうしないと、コンパイラはそれを異なる関数と見なします.
return i;}
f()がiを任意の方法で変更したり、別の非constメンバー関数を呼び出したりしようとすると、コンパイラはエラー情報を与えます.メンバーデータを変更しない関数はconst関数として宣言する必要があります.これにより、プログラムの可読性と信頼性が向上します.
オブジェクトメンバー関数
オブジェクトメンバー関数の間違い
const constペア
const non-constエラー
non-const constペア
non-const non-constペア
メンバー関数呼び出しメンバー関数
メンバー関数メンバー関数の間違い
const constペア
const non-constエラー
non-const constペア
non-const non-constペア
一部のメンバー関数はオブジェクトを変更し、一部のメンバー関数はオブジェクトを変更しません.例:int Point::GetY(){
return yVal;
}
この関数が呼び出されると、ポイントオブジェクトは変更されず、次の関数はポイントオブジェクトを変更します:void Point::SetPt(int x,int y){
xVal=x;
yVal=y;}
メンバー関数の意味をより明確にするために、オブジェクトを変更しないメンバー関数の関数プロトタイプにconstの説明を加えることができます.
class Point{
public:
int GetX() const;
int GetY() const;
void SetPt (int, int);
void OffsetPt (int, int);
private:
int xVal, yVal;
}; constメンバー関数は、関数のプロトタイプ説明と関数定義にconst制限を追加する必要があります.
int Point::GetY() const
{
return yVal;
}
class Set {
public:
Set (void){ card = 0; }
bool Member(const int) const;
void AddElem(const int);
//...
};
bool Set::Member (const int elem) const
{//...
}
,
:
const Set s; s.AddElem(10);//不正:AddElemは定数メンバー関数s.Member(10);//このルールの例外は、定数メンバーとして定義されていませんが、コンストラクション関数とコンストラクション関数です.
定数オブジェクトによって呼び出されます(自動呼び出されます).また、データ・メンバー自体が定数でない限り、定数のデータ・メンバーに値を割り当てることもできます.なぜconstメンバー関数が必要ですか?
定義したクラスのメンバー関数には、クラスのデータ・メンバーを変更しないメンバー関数がよくあります.つまり、これらの関数は読み取り専用関数であり、クラスのデータ・メンバーの値を変更する関数もあります.データメンバーを変更しない関数にconstキーワードを付けて識別すると,プログラムの可読性が向上することは明らかである.実際には、プログラムの信頼性も向上し、constのメンバー関数として定義されており、データ・メンバーの値を変更しようとすると、コンパイラはエラーで処理されます.
constメンバー関数とconstオブジェクトは、実際には、constメンバー関数には定数オブジェクト相関というもう一つの役割があります.組み込み
, , ,
。 , :
const int i=1 ; 同様に、クラスclassAがあると仮定して、クラスの定数オブジェクトを定義する方法は次のようになります.
const classA a(2);
ここで、aはクラスclassAのconstオブジェクトであり、「2」はその構造関数パラメータに渡される.constオブジェクトのデータメンバーは、オブジェクトの寿命期間内に変更できません.しかし、このクラスのデータメンバーが変更されないことをどのように保証しますか?
constオブジェクトのデータメンバーが変更されないようにするには、C++でconstオブジェクトはconstメンバー関数のみを呼び出すことができます.メンバー関数が実際にデータ・メンバーを変更していない場合、constキーによって限定されていない場合、定数オブジェクトによって呼び出されません.この問題を例に挙げて説明します.
class C{
int X;
public:
int GetX(){
return X;}
void SetX(int X)
{
this->X = X;}
};
void main()
{
const C constC;
cout<<constC.GetX();
}
上記のプログラムコードをコンパイルすると、コンパイラはconstCが定数オブジェクトであり、constメンバー関数しか呼び出せないというエラーメッセージが表示されます.GetX()関数は実際にはデータメンバーXを変更していないが、constキーワード限定がないため、constCオブジェクトに呼び出されない.上記の太字コードを使用すると、次のようになります.
int GetX()を次のように書き換えます.
int GetX()constを再コンパイルすれば問題ありません.constメンバー関数の使用
constメンバー関数は、クラスデータメンバーのみを読み取ることができ、クラスメンバーデータを変更することはできません.constメンバー関数を定義する場合は、constキーワードを関数のパラメータテーブルと関数体の間に置きます.なぜconstを関数宣言の前に置かないのかと聞かれるかもしれません.これは関数の戻り値が定数であることを意味し,意味が全く異なるからである.次にconstメンバー関数を定義する例を示します.
class X{
int i;
public:
int f() const;
};
キーワードconstは同じ方法で関数実装に繰り返し表示されなければなりません.そうしないと、コンパイラはそれを異なる関数と見なします.
int X::f() const
{
return i;}
f()がiを任意の方法で変更したり、別の非constメンバー関数を呼び出したりしようとすると、コンパイラはエラー情報を与えます.メンバーデータを変更しない関数はconst関数として宣言する必要があります.これにより、プログラムの可読性と信頼性が向上します.
オブジェクトメンバー関数
オブジェクトメンバー関数の間違い
const constペア
const non-constエラー
non-const constペア
non-const non-constペア
メンバー関数呼び出しメンバー関数
メンバー関数メンバー関数の間違い
const constペア
const non-constエラー
non-const constペア
non-const non-constペア