如何直接访问类的私有成员?
How to access private members of a class directly?
我有一个家庭作业,我被问到如何访问类的私人成员并在 c++ 中修改它们。我搜索了它,我发现我们可以使用类型转换和指针来做到这一点,我知道这是一种未定义的行为,永远不应该使用它。我的问题是: 是否可以在其他面向对象的语言(如java或python(中做这样的事情?
C++编程语言有一个friend
说明符。友元函数可以看到其友元类的私有成员。但更多的年轻语言不包括这种机制。因为该机制对于面向对象的编程范式(对于封装(不正确。
在C++中,您可以编写一个成员函数,该函数可以访问和修改私有成员并使该函数公开。这是 OOP 的常用方法。但是,当然,包括C++在内的不同语言可能会提供 hax 以另一种方式修改受保护的成员。
class T {
public:
int get() const {
return _member;
}
void set(int member) {
_member = member;
}
protected:
int _member;
};
知名黑客列表
您可以轻松访问 Python 中的任何成员。只要dir
什么就做什么。Python 中的私有成员。
您可以使用模板 http://bloglitb.blogspot.com/2011/12/access-to-private-members-safer.html 破解C++成员。它比使用指针安全得多。
您可以通过 Java https://docs.oracle.com/javase/tutorial/reflect/中的反射访问私有成员。
通常,任何允许您调试代码的语言也应该以某种方式显示受保护的变量。
相关文章:
- 直接初始化不可复制、不可移动的成员,而不使用聚合初始化
- 为什么不能直接引用作用域枚举类成员,而不能为无作用域枚举生成类成员?
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- 如何直接访问类的私有成员?
- 将C++浮点数组成员直接封送到 C#,而无需复制
- 如何启用友元类的友元功能直接在C++中访问其私有成员
- 为什么在使用指针时不采用类成员的默认值,而不是直接实例化对象时?
- 从C++代码中直接读取成员属性
- 我们可以直接为任何数据成员赋值. 为什么要使用构造函数?
- 在 c++ 中将结构的每个成员写入文件和将结构对象直接写入文件之间有什么区别吗?
- 直接向工会而不是其特定成员之一发送memcpy数据是否安全
- 未直接继承的基模板类成员的可见性
- 通过构造函数与直接初始化进行成员初始化的比较
- 指向成员函数的指针与指向数据成员的指针有何不同
- 直接使用初始化器列表只能使用一个数组作为成员初始初始化一个构造是合法的吗?
- 如何直接修改VA_LIST结构成员
- 构造函数继承和直接成员初始化
- 通过父类型的指针或直接从派生类访问成员函数的差异
- 进程 A 直接写入进程 B 的数据成员
- 确保直接访问类成员