【发布时间】:2020-01-12 22:43:03
【问题描述】:
我尝试在主函数中更新私有数据。它适用于一个私有变量。但对多个变量的工作方式不同。
#include <iostream>
using namespace std;
class A {
private:
char data;
int f;
public:
A(){
data = 'a';
f = 0;
}
char getdata(){
return data;
}
int getf(){
return f;
}
};
int main()
{
A k;
char *p = (char*)&k;
*p = '0';
int* j = (int*)&k;
*j = 100;
cout<< k.getdata()<<endl;
cout<<k.getf();
return 0;
}
我希望输出为0\n100。但它给了d\n0。
【问题讨论】:
-
这不是UB吗?您假设 C++ 类的内存布局。
-
你为什么要让你的生活变得艰难?只需提供访问器(getter setter - 最佳解决方案)和/或为各自的构造函数提供参数,xor 只需将所有内容公开。
-
为什么你认为
&k是两个成员的位置? (作为旁注,这是完全未定义的,你不能期望它有什么特别的。) -
Marek R 我知道,兄弟!但我想改变主要功能,这就是问题的主要目标..