设置具有多个成员变量的类私人变量的方法
Way to set private variable of class having more than one member variable
我们可以设置类似类的私人变量
我试图为以下情况设置私有成员变量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)
实际上是什么意思,对于ptr
是int*
?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;
}
相关文章:
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 枚举环境变量的惯用C++14/C++17方法
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 从私有成员变量的成员方法返回unique_ptr
- 在派生类中使用基类的私有成员变量的最佳方法
- 打印所有继承的类成员变量和方法
- C++方法中的引用变量
- Visual C++: MSVC vs. GCC+CLANG: 处理 lambda 捕获类成员变量,正确的方法是什么?
- 有没有一种通用的方法来实现不变量
- 有没有将变量名称转换为双指针的简短方法?
- C++:将向量传递到构造函数以创建成员变量的最佳方法?
- C++中变量混叠的最佳方法
- 比较C++变量的最有效方法
- 使用类在C++中存储和列出变量/方法是否是一种好的做法
- 存储变量的更有效方法是什么?
- 对具有相同方法的不同类使用一个变量
- 如何使用另一个变量访问对象的变量/方法
- C++,静态局部变量(方法)与全局(文件)变量有什么区别
- Awesomium允许我在JS中调用/使用c++变量/方法吗?