设置具有多个成员变量的类私人变量的方法

Way to set private variable of class having more than one member variable

本文关键字:变量 方法 成员 设置      更新时间:2023-10-16

我们可以设置类似类的私人变量

我试图为以下情况设置私有成员变量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函数设置此设置,但是正在使用此处显示的方法进行检查

这是纯粹是hack而不是有效的方法。

我认为这将解决它:

char* ptr = (char*)&t;
*(int*)(ptr+sizeof(string)) = 10;

sizeof将返回字节中的大小。指向其指向的对象的大小。char是大小的字节。

如果您想对其进行阅读:C指针算术文章

只是要重申我认为您所说的话:您只是在学习是一个学习点,而且您知道您不应该在现实生活中做到这一点... !!

为什么它不起作用

实际上永远不会写这样的代码。有一种设置私人数据的方法,并且可以通过班上的公共成员进行。否则,这是私人的原因。这是C ,实际上有非UB的方法,但我不会在这里链接它们,因为不要。

为什么它不起作用,特别是

提示:ptr + sizeof(string)实际上是什么意思,对于ptrint*ptr指向这一行之后?

指针算术应使用字节指针而不是整数指针进行。

#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;
   char* ptr = (char*)&t;
   *(int*)(ptr+sizeof(string)) = 10;
   cout << t.getData();
   return 0;
}