免责声明
是的,我完全知道我问的是完全愚蠢的,任何想在生产代码中尝试这种事情的人都应该被解雇和/或枪毙。我主要是想看看是否可以完成。
既然已经解决了,有没有办法从类外部访问 C++ 中的私有(private)类成员?例如,有什么方法可以用指针偏移来做到这一点吗?
(欢迎使用天真和其他非生产就绪技术)
更新
如评论中所述,我问这个问题是因为我想写一篇关于过度封装(以及它如何影响 TDD)的博文。我想看看是否有一种方法可以说明“即使在 C++ 中,使用私有(private)变量也不是 100% 可靠的强制封装方式。”最后,我决定更多地关注如何解决问题而不是为什么会出现问题,所以我没有像我计划的那样突出这里提出的一些内容,但我仍然留下了一个链接。
无论如何,如果有人对它的结果感兴趣,请看这里:Enemies of Test Driven Development part I: encapsulation (我建议您在确定我疯了之前阅读它)。
最佳答案
如果类包含任何模板成员函数,您可以专门化该成员函数以满足您的需要。即使原始开发者没有想到。
安全.h
class safe
{
int money;
public:
safe()
: money(1000000)
{
}
template <typename T>
void backdoor()
{
// Do some stuff.
}
};
主要.cpp:
#include <safe.h>
#include <iostream>
class key;
template <>
void safe::backdoor<key>()
{
// My specialization.
money -= 100000;
std::cout << money << "\n";
}
int main()
{
safe s;
s.backdoor<key>();
s.backdoor<key>();
}
输出:
900000
800000
关于c++ - 我可以在不使用 friend 的情况下从类外访问私有(private)成员吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26830845/