我可以转换对象并访问 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++ 中的私有数据成员吗? 的相关文章

  • 为什么 C# Array.BinarySearch 这么快?

    我已经实施了一个很简单用于在整数数组中查找整数的 C 中的 binarySearch 实现 二分查找 static int binarySearch int arr int i int low 0 high arr Length 1 mid
  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • 在结构中使用 typedef 枚举并避免类型混合警告

    我正在使用 C99 我的编译器是 IAR Embedded workbench 但我认为这个问题对于其他一些编译器也有效 我有一个 typedef 枚举 其中包含一些项目 并且我向该新类型的结构添加了一个元素 typedef enum fo
  • 用于检查类是否具有运算符/成员的 C++ 类型特征[重复]

    这个问题在这里已经有答案了 可能的重复 是否可以编写一个 C 模板来检查函数是否存在 https stackoverflow com questions 257288 is it possible to write a c template
  • 使用实体框架模型输入安全密钥

    这是我今天的完美想法 Entity Framework 中的强类型 ID 动机 比较 ModelTypeA ID 和 ModelTypeB ID 总是 至少几乎 错误 为什么编译时不处理它 如果您使用每个请求示例 DbContext 那么很
  • BitTorrent 追踪器宣布问题

    我花了一点业余时间编写 BitTorrent 客户端 主要是出于好奇 但部分是出于提高我的 C 技能的愿望 我一直在使用理论维基 http wiki theory org BitTorrentSpecification作为我的向导 我已经建
  • Clang 3.1 + libc++ 编译错误

    我已经构建并安装了 在前缀下 alt LLVM Clang trunk 2012 年 4 月 23 日 在 Ubuntu 12 04 上成功使用 GCC 4 6 然后使用此 Clang 构建的 libc 当我想使用它时我必须同时提供 lc
  • 在 ASP.NET 5 中使用 DI 调用构造函数时解决依赖关系

    Web 上似乎充斥着如何在 ASP NET 5 中使用 DI 的示例 但没有一个示例显示如何调用构造函数并解决依赖关系 以下只是众多案例之一 http social technet microsoft com wiki contents a
  • WCF 中 SOAP 消息的数字签名

    我在 4 0 中有一个 WCF 服务 我需要向 SOAP 响应添加数字签名 我不太确定实际上应该如何完成 我相信响应应该类似于下面的链接中显示的内容 https spaces internet2 edu display ISWG Signe
  • 垃圾收集器是否在单独的进程中运行?

    垃圾收集器是否在单独的进程中启动 例如 如果我们尝试测量某段代码所花费的进程时间 并且在此期间垃圾收集器开始收集 它会在新进程上启动还是在同一进程中启动 它的工作原理如下吗 Code Process 1 gt Garbage Collect
  • Windows 窗体:如果文本太长,请添加新行到标签

    我正在使用 C 有时 从网络服务返回的文本 我在标签中显示 太长 并且会在表单边缘被截断 如果标签不适合表单 是否有一种简单的方法可以在标签中添加换行符 Thanks 如果您将标签设置为autosize 它会随着您输入的任何文本自动增长 为
  • 对现有视频添加水印

    我正在寻找一种用 C 在视频上加水印的方法 就像在上面写文字一样 图片或文字标签 我该怎么做 谢谢 您可以使用 Nreco 视频转换器 代码看起来像 NReco VideoConverter FFMpegConverter wrap new
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 基于 OpenCV 边缘的物体检测 C++

    我有一个应用程序 我必须检测场景中某些项目的存在 这些项目可以旋转并稍微缩放 更大或更小 我尝试过使用关键点检测器 但它们不够快且不够准确 因此 我决定首先使用 Canny 或更快的边缘检测算法 检测模板和搜索区域中的边缘 然后匹配边缘以查
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • 是否可以在 .NET Core 中将 gRPC 与 HTTP/1.1 结合使用?

    我有两个网络服务 gRPC 客户端和 gRPC 服务器 服务器是用 NET Core编写的 然而 客户端是托管在 IIS 8 5 上的 NET Framework 4 7 2 Web 应用程序 所以它只支持HTTP 1 1 https le
  • IEnumreable 动态和 lambda

    我想在 a 上使用 lambda 表达式IEnumerable
  • 使用.NET技术录制屏幕视频[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有一种方法可以使用 NET 技术来录制屏幕 无论是桌面还是窗口 我的目标是免费的 我喜欢小型 低

随机推荐

  • 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 然后我重新解释转换并复制原始对象 这有效 但我想要一