是否可以在 c++ 中访问类的私有成员。
前提是您没有朋友功能并且您无权访问类定义
您的意思是使用一些指针算法来获得访问权限?这是可能的,但绝对是危险的。也看看这个问题:Accessing private members
我认为有一些像这样的老派把戏:
#define private public
#include "header.h"
#define private private
但是您强烈建议不要这样做(我已经快速阅读了 C++ 标准中关于此的内容) - 如果您想了解更多关于“#define private public”的谷歌信息
好吧,我可能在胡说八道,但我认为您可以尝试定义一个“双胞胎”类,其成员与您要修改的类相同但具有不同的公共/私有修饰符,然后使用 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 修饰符的变量的顺序是相同的
即使通过一些令人讨厌的黑客攻击是可能的——请参阅之前的帖子——你不应该这样做。
封装是为了一个很好的目的而存在的,将类成员设置为私有意味着开发人员不打算让任何人搞乱该成员。这应该意味着
“您无需访问此成员即可完全使用公共接口”