C++でconstメンバー変数を変更する

1679 ワード

1.c++クラスでconstメンバーを定義する場合は初期化しなければならないし、初期化リストでのみ行うことができるので、クラスにconstメンバーが存在する場合は、コンストラクション関数が存在する必要があります.クラスにコピーコンストラクタが同時に存在する場合も、初期化リストで初期化する必要があります.そうしないと、コンパイラはエラーを報告します.c++クラスで提供されるconstメンバー変数は読み取り専用変数なので、一定の方法で変更できますが、consメンバーをどのように変更できますか?
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; }