如何直接访问班级的私人成员?

时间:2020-06-06 10:25:07

标签: c++ encapsulation

我有一个作业,被问到如何访问类的私有成员并用c ++对其进行修改。我对其进行了搜索,发现我们可以使用类型转换和指针来做到这一点,我知道这是未定义的行为,它永远不应该使用。我的问题是: 可以使用其他面向对象的语言(例如Java或python)来做这种事情吗?

2 个答案:

答案 0 :(得分:1)

C ++编程语言具有friend specifier。好友功能可以查看其好友类别的私有成员。但是更多的年轻语言没有这种机制。因为该机制不适用于面向对象的编程范例(用于封装)。

答案 1 :(得分:1)

在C ++中,您可以编写一个成员函数,该成员函数可以访问和修改私有成员并使这些函数公开。这是OOP的常用方法。但是,当然,包括C ++在内的不同语言可能会提供hax以其他方式修改受保护的成员。

class T {
public:
  int get() const {
    return _member;
  } 
  void set(int member) {
    _member = member;
  } 
protected:
  int _member;

};

知名黑客列表

您可以轻松访问Python中的任何成员。只需dir即可破解。 Private members in Python

您可以使用模板http://bloglitb.blogspot.com/2011/12/access-to-private-members-safer.html入侵C ++成员。它比使用指针安全得多。

您可以通过Java https://docs.oracle.com/javase/tutorial/reflect/中的反射来访问私有成员。

通常,任何允许您调试代码的语言都应以某种方式显示受保护的变量。