我可以在不使用好友的情况下从班级外部访问私人成员吗?

2024-01-08

免责声明

是的,我完全意识到我所问的问题是完全愚蠢的,任何希望在生产代码中尝试这样的事情的人都应该被解雇和/或枪杀。我主要是想看看是否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(使用前将#替换为@)

我可以在不使用好友的情况下从班级外部访问私人成员吗? 的相关文章

  • 如何在样式中访问控件父级的属性

    我的列表视图将项目数据模板化为标签 我正在为该标签设计一种样式 但我不知道如何访问父级的 ListViewItem IsSelected 属性 编辑 尝试了下面的建议 但仍然出现异常 这是我的完整代码
  • 何时在定义上下文或实例化点中发生非依赖名称的重载解析?

    3 4 基本 lookup p1 重载解析 13 3 在名称查找成功后发生 void g long void g int int template
  • 此上下文中仅支持实体类型、枚举类型或基本类型

    我目前正在开发一个搜索页面 我只需要返回主题的主题详细信息列表 其中包含存储在 int ST 中的所有主题标签 id 目前 ST null true ST Contains b ThemeTagID 行似乎给了我一个错误 附加信息 无法创建
  • 我是否必须使用我的数据库训练 Viola-Jones 算法才能获得准确的结果?

    我尝试提取面部数据库的面部特征 但我认识到 Viola Jones 算法在两种情况下效果不佳 当我尝试单独检测眼睛时 当我尝试检测嘴巴时 运作不佳 检测图像的不同部分 例如眼睛或嘴巴 或者有时会检测到其中几个 这是不可能的情况 我使用的图像
  • c++1y 模式下的 Clang >= 3.3 无法解析 标头

    我有一个项目可以在 g 4 8 1 和 c 11 模式下 clang gt 3 3 下正确编译和运行 然而 当我切换到实验时 std c 1y模式下 clang 3 3 但不是 g 在
  • Collection.Contains() 使用什么来检查现有对象?

    我有一个强类型的自定义对象列表 MyObject 它有一个属性Id 以及一些其他属性 假设Id of a MyObject将其定义为唯一 我想检查我的收藏是否还没有MyObject对象有一个Id在我添加新的之前 共 1 个MyObject到
  • C 中经过的时间

    include
  • 无效的跨线程访问问题

    我有两个 ViewModel 类 PersonViewModel 和 PersonSearchListViewModel PersonViewModel 实现的字段之一是通过 WCF 下载的个人资料图像 本地缓存在独立存储中 PersonS
  • 树结构的序列化/反序列化

    我试图找出保存 序列化 并稍后打开 反序列化 树结构的最佳方法 我的结构由具有不同属性的各种对象类型组成 但每个对象类型都继承自基本抽象 Node 类 每个节点都有唯一的 ID GUID 并且有一个 AddSuperNode Node nd
  • WinForms TreeView - 如何手动“突出显示”节点(就像被单击一样)

    我需要知道如何让以编程方式选择的节点以图形方式处于 选定 状态 就像用户单击它一样 SelectedNode 仅使这一节点在内部被选中 非常感谢 它没有显示为突出显示的原因是由于树视图没有焦点 这是我的测试表单上的按钮单击事件 TreeVi
  • 最好的 C++ 编译器是哪个? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何存储将被多个不同类访问的字符串常量? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 关于堆栈溢出有太多不同的答案 声明一个命名空间 并在 hpp 文件中将所有字符串标记为 extern const 并在 cpp 文件中放置它们的
  • STL(标准模板库)中使用的设计模式

    我正在学习STL和设计模式 我想知道是否有任何文档或链接可以解释如何在 STL 中实现设计模式 我做了谷歌但无法获得太多数据 我希望你的意思是 哪些设计模式可以在STL中识别 STL 堆栈是一个容器适配器 适配器是一种设计模式 迭代器也是一
  • 如何使用 Xamarin 应用程序开发自动注销

    我必须在 App xaml cs 上添加功能才能使其正常工作 我在 OnStart 上添加了功能 但现在它会间歇性地一次又一次地将我从应用程序中注销 根据下面的代码 我需要做什么才能让它停止这样做 或者我的代码有问题 这是我最新的代码 na
  • 当数据源中只有 1 项时 FormView 不显示 PagerTemplate

    我有一个带有自定义 PagerTemplate 的 FormView 控件和我自己的分页 LinkBut ton 一切都很好 直到我加载的数据集仅包含一个记录 项目并完全隐藏 PagerTemplate 我在网上搜索了一下 找到了几个答案
  • 为什么 `boost::any` 比 `void*` 更好?

    有什么先天优势boost any and boost any cast提供超过使用void and dynamic cast 优点是boost any比类型安全得多void E g int i 5 void p i static cast
  • 如何将 MouseDown 事件放入样式中?

    这有效 XAML
  • 类型 '' 未映射

    我已经尝试修复这个错误有一段时间了 每当我的应用程序尝试创建数据上下文的实例时 我都会收到此错误 下面是代码 using System using System Collections Generic using System Linq u
  • scanf() 不等待用户输入[重复]

    这个问题在这里已经有答案了 我正在使用 c 中的双向链表来制作树 我在该函数中使用递归调用 但不知何故它不起作用 我的代码是 struct node int data struct node right struct node left s
  • 提高批量请求的野兽内存使用率

    我运行这个boost beast 客户端 异步 ssl http www boost org doc libs develop libs beast example http client async ssl http client asy

随机推荐

  • Angular 指令隔离范围上的可选双向绑定

    question 我刚刚了解到您可以通过以下方式进行可选的 反向 或回调绑定 scope parentScopeFunc 我正在尝试查看是否有一种方法可以对双向绑定执行类似的操作 scope optional2WayBoundProp 我尝
  • 如何在 Spring MVC 中使用带注释的映射来实现不区分大小写的 URL

    我已经通过我的 spring mvc Web 应用程序很好地注释了映射 但是它们区分大小写 我找不到一种方法使它们不区分大小写 我很乐意在 Spring MVC 中实现这一点 而不是以某种方式重定向流量 Spring 4 2将支持不区分大小
  • Flutter 通过拖动调整 TextField 大小

    有什么方法可以创建类似这些点的东西 这可以帮助扩展TextField 截屏 创建一个小部件 class ExpandableTextField extends StatefulWidget final double height final
  • GCP:警报触发时是否可以触发云功能?

    我正在使用谷歌云平台的谷歌云监控 我为我监控的对象创建了一些警报策略 但是 当有警报触发时 有些信息未包含在我希望包含在电子邮件中的信息中 因此 我正在考虑使用云功能 如果在这种情况下可以的话 该功能将触发我创建的策略之一 如果可能的话 请
  • TypeError:不支持的操作数类型 -:python 3.x Anaconda 中的“str”和“str”

    我正在尝试在大型数据集中每小时计算一些实例 下面的代码似乎在 python 2 7 上运行良好 但我必须将其升级到 3 x 最新版本的 python 并在 Anaconda 上更新所有包 当我尝试执行该程序时 我正在跟踪str error
  • MySQL 有没有办法隐式地为表创建主键?

    在MySQL中 当CREATE TABLE时 MySQL是否有办法隐式创建一个列 即CREATE TABLE命令中未显式声明的列 作为表的主键 Thanks 不 需要在表上定义主键 您可能正在考虑this https dev mysql c
  • Rails - 如何向用 javascript 创建的表单添加 CSRF 保护?

    我正在使用backbone js 它效果很好 但我作为 JavaScript 模板创建的表单缺少 Rails csrf 保护令牌 如何将其添加到我用 JavaScript 创建的模板中 我解决这个问题的最好方法是在表单中 Update 它看
  • JQuery 验证多个字段并出现一个错误

    我将如何使用 JQuery Validate 插件为 3 个字段提供一条错误消息 例如 3 个 dob 字段 默认情况下 如果所有 3 个字段都留空 我将收到 3 条错误消息 我只想将一个错误链接到 3 个字段 如果有空白 则会出现错误 类
  • 自动调整 SVG 大小?

    这里有一个代码演示 http jsfiddle net y59MR 1 我有一个高度未知的 SVG 我可以在加载 json 并使用 javascript math 后弄清楚它 但是有没有可以使用的 css 来动态调整它的大小 css svg
  • UTF-8 与 Latin1 mysql,UTF-8 上未使用索引

    我尝试使用 UTF 8 和 Latin1 字符集创建 mysql 表 当我使用 Latin1 时 会使用索引 而当我使用 UTF 8 时 选择 限制记录时不会使用索引 我的字符集是否缺少某些内容导致发生这种情况 Cheers Ke 仅当表达
  • .gitattributes 中没有扩展名的文件

    我正在尝试处理 gitattributes 中没有扩展名的文件 text auto eol lf py eol lf 显然没有帮助 git check attr all foo输出 foo 文本 自动 如何才能做到这一点 我认为您必须为所有
  • 迭代 CSV 文件中的列 (PHP)

    我需要编写一个函数 以年份和温度作为输入 并返回给定年份中温度等于或低于给定温度的天数 由于数据是关于小时而不是天 因此需要找到小时数并将其除以 24 示例 getDaysUnderTemp 2019 10 返回 13 92 CSV 文件如
  • ng2-smart-table 缺少依赖项完成程序

    我正在使用 Ng2SmartTable 并且出现此错误 目标入口点 ng2 smart table 丢失时出现错误 依赖项 akveo ng2 completer 我已经尝试过以下命令 但它不起作用 1 npm install save n
  • 在 C++ 中分配和使用无类型内存块的正确方法是什么?

    到目前为止 我对这个问题得到的答案有两种完全相反的答案 它是安全的 和 它是未定义的行为 我决定完全重写这个问题 以便为我和任何可能通过谷歌到达这里的人获得一些更好的澄清答案 另外 我删除了C标签 现在这个问题是 C 特定的 我正在制作一个
  • chrome.storage.sync.set 不保存值

    因此 我在 Google Chrome 上的本地存储方面遇到了一些障碍 根据我的研究 我的语法似乎是正确的 但由于某种原因该值没有被保存 这是我的代码 chrome storage sync get accName function dat
  • 如何手动将 dns 条目添加到由 AWS ECS 服务发现管理的托管区域?

    我正在 AWS ECS 中的私有托管区域中使用容器服务发现staging example com 现在 在容器旁边 我想将 AWS RDS 数据库映射到db staging example com 但是 我无法修改 Route53 托管区域
  • 如何使用 Android Studio 2.2.3 调试外部本机库的 C++ 源代码?

    我有一个在Windows 10下由Android Studio 2 2 3创建的android项目 该项目通过其包装jar 通过JNI 使用本机库 本机库是由 qmake 在 Android Studio 之外构建的 它将使用 androi
  • 如何将文本文件转换为ARFF格式?

    我正在使用 WEKA 工具进行文本分类 并且必须将纯文本文件转换为 ARFF 格式 但是 我不知道该怎么做 谁能帮我将文本文件转换为 ARFF 格式 谢谢伦克劳夫的回复 我不明白这些要点 由于像记事本这样的文本编辑器只允许有限数量的列 因此
  • 错误:‘$’未定义。[no-undef]

    我想用一些 jQuery 来做一个粘性导航栏但我得到了错误 ERROR is not defined no undef ERROR document is not defined no undef 并且代码不起作用 有人可以帮助我为什么会出
  • 我可以在不使用好友的情况下从班级外部访问私人成员吗?

    免责声明 是的 我完全意识到我所问的问题是完全愚蠢的 任何希望在生产代码中尝试这样的事情的人都应该被解雇和 或枪杀 我主要是想看看是否can做完了 现在这已经不成问题了 有什么方法可以从类外部访问 C 中的私有类成员吗 例如 有什么方法可以