为了账号安全,请及时绑定邮箱和手机立即绑定

我可以在不使用朋友的情况下从课外访问私人会员吗?

我可以在不使用朋友的情况下从课外访问私人会员吗?

C++
叮当猫咪 2019-08-27 10:48:50
我可以在不使用朋友的情况下从课外访问私人会员吗?放弃是的,我完全清楚我所询问的内容是完全愚蠢的,任何想要在生产代码中尝试这样的事情的人都应该被解雇和/或开枪。我主要是想看看是否可以做到。现在已经不在了,有没有办法从类外部访问C ++中的私有类成员?例如,有没有办法用指针偏移来做到这一点?(天真和其他非生产准备技术欢迎)更新正如评论中所指出的,我问了这个问题,因为我想写一篇关于过度封装的博客文章(以及它如何影响TDD)。我想看看是否有办法说“使用私有变量不是100%可靠的方法来强制封装,即使在C ++中也是如此。” 最后,我决定更多地关注如何解决问题,而不是为什么这是一个问题,所以我没有像我原先计划的那样突出显示这里提到的一些东西,但我还是留下了一个链接。无论如何,如果有人对它的出现感兴趣,那么它就是: 测试驱动开发的敌人第一部分:封装(我建议在你决定我疯了之前阅读它)。
查看完整描述

3 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

如果类包含任何模板成员函数,您可以专门化该成员函数以满足您的需要。即使原始开发人员没有想到它。

safe.h

class safe{
    int money;public:
    safe()
     : money(1000000)
    {
    }

    template <typename T>
    void backdoor()
    {
        // Do some stuff.
    }};

main.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


查看完整回答
反对 回复 2019-08-27
?
临摹微笑

TA贡献1982条经验 获得超2个赞

以下是偷偷摸摸,非法,依赖编译器,并且可能无法工作,具体取决于各种实现细节。

#define private public
#define class struct

但它是你的OP的答案,你明确地邀请了一种技术,我引用它是“完全愚蠢的,并且任何希望在生产代码中尝试这样的事情的人都应该被解雇和/或开枪”。


另一种技术是通过使用来自对象开头的硬编码/手动编码偏移来构造指针来访问私有成员数据。


查看完整回答
反对 回复 2019-08-27
  • 3 回答
  • 0 关注
  • 388 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信