【发布时间】:2016-12-21 17:44:21
【问题描述】:
我们可以像this这样设置类的私有变量
我试图为以下情况设置私有成员变量 int。
#include <iostream>
#include <string>
using namespace std;
class Test
{
private:
string s;
int data;
public:
Test() : s("New") , data(0) { }
int getData() { return data; }
};
int main()
{
Test t;
int* ptr = (int*)&t;
*(ptr+sizeof(string)) = 10;
cout << t.getData();
return 0;
}
但它无法打印 10。
我知道还有其他方法可以使用 setter 函数进行设置,但正在检查使用显示的方法进行设置 here
这纯粹是 hack,虽然不是有效的学习方式。
【问题讨论】:
-
逗号不是 C++ 中的语句分隔符。也许您正在寻找分号?还要考虑一个成员初始化列表。此外,您在
main中使用的代码很危险且已损坏。你为什么要这样做? -
fairly dangerous 尝试使用指针和偏移量分配给对象中的特定字段,我不会依赖于一般情况下的工作。
-
@CodyGray 看起来他们在
main中所做的破解是一种尝试使用(错误地)假设的对象内存布局分配给private成员的解决方法 -
@Swapnil 你只是有未定义的行为,所以询问这些东西是徒劳的。
-
如果有人在采访中问你这种问题,一个合理的反应是说“谢谢”然后走开。你不想在那里工作。
标签: c++ class private-members