免责声明
是的,我完全意识到我所问的问题是完全愚蠢的,任何希望在生产代码中尝试这样的事情的人都应该被解雇和/或枪杀。我主要是想看看是否can做完了。
现在这已经不成问题了,有什么方法可以从类外部访问 C++ 中的私有类成员吗?例如,有什么方法可以通过指针偏移来做到这一点吗?
(欢迎简单的和其他非生产就绪的技术)
Update
正如评论中所指出的,我问这个问题是因为我想写一篇关于过度封装(以及它如何影响 TDD)的博客文章。我想看看是否有一种方法可以说“即使在 C++ 中,使用私有变量也不是 100% 可靠的强制封装方式”。最后,我决定更多地关注如何解决问题,而不是为什么它是一个问题,所以我没有像我计划的那样突出显示这里提出的一些内容,但我仍然留下了一个链接。
无论如何,如果有人对它的结果感兴趣,这里是:测试驱动开发的敌人第一部分:封装 http://jasonmbaker.wordpress.com/2009/01/08/enemies-of-test-driven-development-part-i-encapsulation/(我建议你在认为我疯了之前先读一下它)。
如果类包含任何模板成员函数,您可以专门化该成员函数以满足您的需要。即使最初的开发者没有想到这一点。
safe.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>();
}
Output:
900000
800000
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)