我可以转换对象并访问 C++ 中的私有数据成员吗?

2024-03-27

我想访问类中的私有数据成员。类中没有成员函数来访问私有数据成员。这是私人的。

我想上这门课,想知道如何打开它。一种方法是复制类的声明,将私有成员设为公共,然后将新类称为 some_else。然后我重新解释转换并复制原始对象。这有效。但我想要一些更优雅的东西……或者也许是通用的……或者只是另一种方式。

有哪些选择?我可以使用 void* 吗?我可以将类 memcpy 到另一个空类中吗?有哪些方法可以做到这一点?

%


我假设

  1. 你已经经历了“打破封装是不好的”阶段,
  2. 用尽了其他可能的解决方案,
  3. 无法更改类的标头。

有几种方法可以破坏对类的私有成员的访问,如GotW #76 http://www.gotw.ca/gotw/076.htm.

  1. 复制类定义并添加friend宣言。
  2. 使用邪恶的宏:#define private public 在包含类的标头之前.
  3. 编写具有相同二进制布局的类定义并使用reinterpret_cast从原来的班级切换到假班级。
  4. 如果有的话,专门化一个模板成员函数(唯一的可移植解决方案)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我可以转换对象并访问 C++ 中的私有数据成员吗? 的相关文章

随机推荐

  • Python Tkinter 刷新画布

    你好 我在 python 中有一个元组 其颜色与通过以下字典在画布中绘制的正方形相关 colour mapping 0 red 1 green 2 blue 3 purple 更具体地说 例如元组中的节点是 2 3 3 3 这意味着 4 个
  • 扩展方法在 C# 中有任何限制

    我想问一下 向数据类型添加扩展方法是否与微软的方法一样 或者有什么限制吗 这与经验丰富的程序员有关 他们在使用它们时发现了一些限制 您正在考虑什么样的限制 我不是特别喜欢它们被发现的方式 特别是 如果扩展类型稍后获得具有相同签名的方法 则将
  • 使用 UIWebView 上传照片

    假设我在远程服务器上有一个网页 例如 filebrowse html 有一个浏览文件按钮 我想通过UIWebView并从我的画廊上传照片 画廊位于 iPhone 上 这可能吗 在 iOS 上 无法 浏览文件系统 因此您无法使用 UIWebV
  • 将 UIButton 字体大小调整为宽度

    我有以下代码 UIButton button UIButton buttonWithType UIButtonTypeCustom button frame CGRectMake 0 0 0 0 25 25 button layer set
  • 有没有办法阻止 Prettier 接触 HTML 文件中的
     块?                
                

    Prettier 通常在 HTML 上做得非常好 但缩进了 pre gt 代码块 我总是希望 pre gt 代码块不缩进 似乎我应该能够在 prettierignore 中配置它 但找不到有效的方法 块如 pre class line nu
  • Telerik().ScriptRegistrar() 如何防止加载 jquery 库?

    即使在之后 脚本注册器也会加载 jquery validation min js Html Telerik ScriptRegistrar jQuery false 有什么办法告诉它不要这样做吗 即使当我尝试加载我需要的内容时 也会这样做
  • 无法删除 docker 镜像,守护进程的错误响应

    我对 ubuntu 还很陌生 所以可能缺少一些简单的东西 我正在尝试删除我的 docker 镜像 sudo docker rmi
  • 当我更改为 RTL 时,material-ui 图标不会翻转

    我用过瑞安 科格斯韦尔的回答 https stackoverflow com questions 62799638 material ui textfield not affected with the rtl direction让我的项目
  • 开源 FSK 解码器库? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Phabricator 第一次“弧线土地”失败

    我已经安装并配置了 Phabricator 因此它在网络上没有显示任何警告 然后我尝试创建一个存储库并进行第一次 git 提交 我已接受修订 但是当我尝试执行 arc land 时 它失败并显示以下消息 gt arc land Landin
  • 修改$PATH变量

    尝试安装node js Did brew install node 似乎已经奏效了 然而 完成后收到此消息 自制安装了 npm 我们建议将以下路径添加到您的PATH环境变量来获取 npm 安装的二进制文件 usr local share n
  • 如何将 Promise 与 Angular.js 和 $resource 与查询字符串一起使用?

    使用需要传递给它的查询字符串 参数的资源来处理 Angular js 中的承诺的最佳方法是什么 我已经看到 q 的工作在工厂 控制器和路由器中处理 但我不确定在涉及参数时如何处理它 所以如果这是工厂 angular module Anima
  • Firebase 身份验证失败并出现 FirebaseException:JsonResponse 实例化失败

    Problem 我刚刚为我的其中一个创建了更新Xamarin Forms应用程序 现在我遇到的问题是Firebase登录工作流程突然中断after上传新的 aab到 Google Play 到目前为止一直运行良好 当我尝试登录时 选择 Go
  • 将重复行的其他列替换为第一个唯一值并创建查找

    这是数据 Account Number Dummy Account 1050080713252 ACC0000000000001 1050223213427 ACC0000000000002 1050080713252 ACC0000000
  • jQuery 可通过溢出进行排序:隐藏;两个列表之间

    我有两个列表 使用 jQuery 可排序我可以在它们之间移动项目 productsList orderList sortable connectWith containerDiv disableSelection 但是 当我想使用自定义滚动
  • ParseInt 未转换为所需的类型

    这是我的代码 包主 import fmt reflect strconv func main i strconv ParseInt 10 10 8 fmt Println reflect TypeOf i 我预计i长度为 8 位 第三个参数
  • 如何在 Android 中打开 MS Office 文件 [重复]

    这个问题在这里已经有答案了 可能的重复 Android Microsoft Office 库 doc docx xls ppt 等 https stackoverflow com questions 4854947 android micr
  • Excel VBA - 删除最多*单词*的字符串内容

    我正在尝试删除字符串内容 直至字符串中包含的某个单词 例如 Emily has wild flowers They are red and blue 我想使用 VBA 来替换它 They are red and blue 即删除 他们 一词
  • YouTube Data API v3:无需打开浏览器即可从服务器上传视频

    我每天尝试从我的服务器上传视频到我的帐户 但浏览器无法访问 我可以在桌面上执行此操作 通过运行下面提到的脚本打开浏览器 请求我的权限并完成上传视频所需的完整授权 然后上传视频 python upload video py file clip
  • 我可以转换对象并访问 C++ 中的私有数据成员吗?

    我想访问类中的私有数据成员 类中没有成员函数来访问私有数据成员 这是私人的 我想上这门课 想知道如何打开它 一种方法是复制类的声明 将私有成员设为公共 然后将新类称为 some else 然后我重新解释转换并复制原始对象 这有效 但我想要一