是否可以访问班级的私人成员?

时间:2009-04-08 10:21:29

标签: c++ private member

是否可以在c ++中访问类的私有成员。

  

如果您没有朋友   功能,您无权访问   类定义

4 个答案:

答案 0 :(得分:8)

你的意思是使用一些指针算法来获取访问权限?这是可能的,但绝对是危险的。再看看这个问题:Accessing private members

答案 1 :(得分:6)

我认为这样有一些老派的伎俩:

#define private public
#include "header.h"
#define private private

但是你强烈劝阻我这样做(我很快就读到了C ++标准中关于这一点的说法) - 如果你想阅读更多关于谷歌的信息“#define private public”

答案 2 :(得分:2)

好吧,我可能会说rubish,但我认为您可以尝试定义一个“twin”类,其中包含与您要修改的类相同的成员但是使用不同的公共/私有修饰符,然后使用reintepret_cast将原始类转换为您的类您可以在其中访问私人会员。

它有点hacky; - )

解释这个想法的一些代码:

class ClassWithNoAccess 
{
public:
  someMethod();

private:
  int someVar;
};

class ClassTwin 
{
public:
  someMethod();

public:
  int someVar;
}

以及代码中的某个地方:

ClassWithNoAccess* noAccess = new ClassWithNoAccess();
ClassTwin* twin = reinterpret_cast<ClassTwin *>(noAccess);
twin->someVar = 1;

编辑:所以就像之前已经写过的人一样,这可能会有效,但标准并不保证变量的顺序与public和private修饰符会相同

答案 3 :(得分:2)

即使有可能通过一些讨厌的黑客 - 见前面的帖子 - 你应该 不这样做。

封装存在是为了一个非常好的目的,并且将类成员设置为私有意味着开发人员不打算任何人乱搞该成员。这应该意味着

“您无需访问此成员即可将公共接口用于其完整的预期范围”