C++でconstメンバー変数を変更する
1679 ワード
1.c++クラスでconstメンバーを定義する場合は初期化しなければならないし、初期化リストでのみ行うことができるので、クラスにconstメンバーが存在する場合は、コンストラクション関数が存在する必要があります.クラスにコピーコンストラクタが同時に存在する場合も、初期化リストで初期化する必要があります.そうしないと、コンパイラはエラーを報告します.c++クラスで提供されるconstメンバー変数は読み取り専用変数なので、一定の方法で変更できますが、consメンバーをどのように変更できますか?
1.C++にはconst_が提供されているcast強制タイプ変換子constのプロパティを削除するために使用されます.使用方法:const_cast(expression)
2.ポインタまたは参照を定義することによって、ポインタアドレスまたは参照変数の値を変更してconstメンバーの値を変更することもできます.
1.C++にはconst_が提供されているcast強制タイプ変換子constのプロパティを削除するために使用されます.使用方法:const_cast(expression)
#include
class Test
{
private:
int mi;
const int mj;
public:
const int mk;//
Test(int i);
Test(const Test& t);
int getMi();
void setmj(int p);
int getmj();
};
Test::Test(int i):mj(0),mk(1)
{
mi = i;
}
Test::Test(const Test& t):mj(0),mk(1)//
{
}
int Test::getMi()
{
return mi;
}
void Test::setmj(int p)
{
const_cast(mj) = p;
}
int Test::getmj()
{
return mj;
}
int main()
{
Test t(1);
t.setmj(100);
printf("mj = %d
",t.getmj());//100
printf("mk = %d",t.mk);//
return 0;
}
2.ポインタまたは参照を定義することによって、ポインタアドレスまたは参照変数の値を変更してconstメンバーの値を変更することもできます.
#include
class Test
{
public:
int *mp;
int &ref;
private:
const int mi;
public:
Test():mi(0),mp(const_cast(&mi)),ref(const_cast(mi))
{
}
Test(const Test&t):mi(0)//,mp(const_cast(&mi)),ref(const_cast(mi))
{
}
int getmi()
{
return mi;
}
};
int main()
{ Test t;
*t.mp = 100;
printf("mi = %d
",t.getmi());//100
t.ref = 1000;
printf("mi = %d
",t.getmi());//1000
return 0;
}