#2
rjsp2023-04-27 23:37
|
程序代码:
#include <iostream>
class hint
{
private:
char* mem[4]{};
public:
hint(int val);
operator int();
void operator =(int f_gold);
~hint();
};
hint::hint(int val)
{
mem[0] = new char;
mem[1] = new char;
mem[2] = new char;
mem[3] = new char;
*this = val;
}
hint::~hint()
{
delete mem[0];
delete mem[1];
delete mem[2];
delete mem[3];
}
hint::operator int()
{
int val{};
char* read = (char*)&val;
read[0] = mem[1][0];
read[1] = mem[3][0];
read[2] = mem[2][0];
read[3] = mem[0][0];
return val;
}
void hint::operator=(int val)
{
char* p = (char*)&val;
mem[0][0] = p[3];
mem[1][0] = p[0];
mem[2][0] = p[2];
mem[3][0] = p[1];
}
int main()
{
hint gold{ 100 };
while (1)
{
std::cout << "gold的数量为===>" <<gold;
system("pause");
gold = gold + 100;
}
system("pause");
}
这代码我脑补了一下过程
最开始,初始化对象gold赋值100,调用了hint(int val),然后hint()调用了operator=(int val),把100拆分赋值给了gold
当<<gold时,进行了类型转换,把gold转成了100进行输出
下面的gold=gold+100
有两种可能性
1.先进行gold+100,将gold转换成了int类型,此时gold成了一个未知的int值,加上100后,赋值给gold
通过下面的代码
程序代码:
void hint::operator=(int val)
{
char* p = (char*)&val;
mem[0][0] = p[3];
mem[1][0] = p[0];
mem[2][0] = p[2];
mem[3][0] = p[1];
}
{
char* p = (char*)&val;
mem[0][0] = p[3];
mem[1][0] = p[0];
mem[2][0] = p[2];
mem[3][0] = p[1];
}
又将这个。。这里说不清了
2.将100转成了hint类型,调用了hint(int val)和operator=(int val),
程序代码:
void hint::operator=(int val)
{
char* p = (char*)&val;
mem[0][0] = p[3];
mem[1][0] = p[0];
mem[2][0] = p[2];
mem[3][0] = p[1];
}
{
char* p = (char*)&val;
mem[0][0] = p[3];
mem[1][0] = p[0];
mem[2][0] = p[2];
mem[3][0] = p[1];
}
又把100打乱了,然后两个hint类型相加、
从以上两点来看,这个程序根本不可能成功啊,为什么它能运行呢??
它的结果反而正是100,200,300,
真的应了这张图了
只有本站会员才能查看附件,请 登录