スポンサーリンク

| キーワード:

手品のタネ的な何か(C++)

解説:

① Sampleはメンバ変数A,Bを持つ
② SampleのインスタンスはA=1,B=2で初期化される
③ showA,showBはA,Bを画面に表示する
④ A,Bはprivateで、setもfriend関数も用意していない。従ってA,Bを書き換える方法は存在しない

 

class Sample{
int A;
int B;
public:
	Sample(){
		A=1;
		B=2;
}
void showA(){	std::cout << "A = " << A << std::endl;	}
void showB(){	std::cout << "B = " << B << std::endl;	}
};
int _tmain(int argc, _TCHAR* argv[])
{
	Sample instance;

	instance.showA();
	instance.showB();
int k;
	std::cin >> k;
return 0;
}

 

はずなんだが、Sampleに一切手を加えないでA,Bを編集することができる。

 

int _tmain(int argc, _TCHAR* argv[])
{
	Sample instance;
int* magicA = (int*)(&instance);
int* magicB = magicA + 1;
*magicA = 10;
*magicB = 20;
	instance.showA();
	instance.showB();
int k;
	std::cin >> k;
return 0;
}

意図してこれをやる人間はそうそういないと思うが、間違ってこうなっしまうケースは結構頻繁にある。そして謎の理屈でポインタがだめなやつだという烙印を押されるのである。

 

 

 

コメントを残す

メールアドレスが公開されることはありません。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)


この記事のトラックバックURL: