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

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

放弃

是的,我完全清楚我所询问的内容是完全愚蠢的,任何想要在生产代码中尝试这样的事情的人都应该被解雇和/或开枪。我主要是想看看是否可以做到。

现在已经不在了,有没有办法从类外部访问C ++中的私有类成员?例如,有没有办法用指针偏移来做到这一点?

(天真和其他非生产准备技术欢迎)

更新

正如评论中所指出的,我问了这个问题,因为我想写一篇关于过度封装的博客文章(以及它如何影响TDD)。我想看看是否有办法说“使用私有变量不是100%可靠的方法来强制封装,即使在C ++中也是如此。” 最后,我决定更多地关注如何解决问题,而不是为什么这是一个问题,所以我没有像我原先计划的那样突出显示这里提到的一些东西,但我还是留下了一个链接。

无论如何,如果有人对它的出现感兴趣,那么它就是: 测试驱动开发的敌人第一部分:封装(我建议在你决定我疯了之前阅读它)。


叮当猫咪
浏览 389回答 3
3回答

holdtom

如果类包含任何模板成员函数,您可以专门化该成员函数以满足您的需要。即使原始开发人员没有想到它。safe.hclass&nbsp;safe{ &nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;money;public: &nbsp;&nbsp;&nbsp;&nbsp;safe() &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;money(1000000) &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;template&nbsp;<typename&nbsp;T> &nbsp;&nbsp;&nbsp;&nbsp;void&nbsp;backdoor() &nbsp;&nbsp;&nbsp;&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Do&nbsp;some&nbsp;stuff. &nbsp;&nbsp;&nbsp;&nbsp;}};main.cpp中:#include&nbsp;<safe.h>#include&nbsp;<iostream>class&nbsp;key;template&nbsp;<>void&nbsp;safe::backdoor<key>(){ &nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;My&nbsp;specialization. &nbsp;&nbsp;&nbsp;&nbsp;money&nbsp;-=&nbsp;100000; &nbsp;&nbsp;&nbsp;&nbsp;std::cout&nbsp;<<&nbsp;money&nbsp;<<&nbsp;"\n";}int&nbsp;main(){ &nbsp;&nbsp;&nbsp;&nbsp;safe&nbsp;s; &nbsp;&nbsp;&nbsp;&nbsp;s.backdoor<key>(); &nbsp;&nbsp;&nbsp;&nbsp;s.backdoor<key>();}输出:900000 800000

临摹微笑

以下是偷偷摸摸,非法,依赖编译器,并且可能无法工作,具体取决于各种实现细节。#define&nbsp;private&nbsp;public #define&nbsp;class&nbsp;struct但它是你的OP的答案,你明确地邀请了一种技术,我引用它是“完全愚蠢的,并且任何希望在生产代码中尝试这样的事情的人都应该被解雇和/或开枪”。另一种技术是通过使用来自对象开头的硬编码/手动编码偏移来构造指针来访问私有成员数据。
打开App,查看更多内容
随时随地看视频慕课网APP