在 C++ 中调用 this->get/this->set 方法与直接访问成员变量

2023-11-22

假设我有一堂课Foo,带有私有变量bar_包含一些状态Foo。如果有必要,我可以编写公共 get/set 方法bar_。当然,我会尽可能避免这种情况以保持封装性。

假设我有这些获取/设置方法,每当我必须访问或修改bar_在属于的方法内Foo,我通常直接这样做bar_,而不是使用我用来访问的 get/set 方法bar_来自课堂之外。除了担心直接访问变量与调用方法的速度之外,我没有任何理由,但我怀疑如果 get/set 方法是内联定义的(它们确实如此),那么它应该不会产生影响。这有什么不同吗?做constness 在此发挥作用?

到目前为止,我还没有遇到任何问题,但我有一种挥之不去的感觉,我做错了。有什么令人信服的理由不这样做吗?有关于此的任何指导方针吗?


我知道这接近于异端邪说,但我hate获取/设置方法。Loathe他们。几乎从不写它们。

一般来说,一个类应该提供比直接简单地读取和修改内部状态变量更多的高级操作,或者它应该避开并像struct it is.

即使我写一个,我也几乎不会使用它inside班上。它们的重点是您可以在不影响客户端的情况下更改事物的内部表示。在类内部,是你关心的内部表示!如果您想使用类内部自己的接口对类进行大量操作,那么您可能会遇到第二个类正在努力摆脱困境。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 C++ 中调用 this->get/this->set 方法与直接访问成员变量 的相关文章

  • BASIC 中的 C 语言中的 PeekInt、PokeInt、Peek、Poke 等效项

    我想知道该命令的等效项是什么Peek and Poke 基本和其他变体 用 C 语言 类似PeekInt PokeInt 整数 涉及内存条的东西 我知道在 C 语言中有很多方法可以做到这一点 我正在尝试将基本程序移植到 C 语言 这只是使用
  • STL 迭代器:前缀增量更快? [复制]

    这个问题在这里已经有答案了 可能的重复 C 中的预增量比后增量快 正确吗 如果是 为什么呢 https stackoverflow com questions 2020184 preincrement faster than postinc
  • 类型中的属性名称必须是唯一的

    我正在使用 Entity Framework 5 并且有以下实体 public class User public Int32 Id get set public String Username get set public virtual
  • 如何在 Cassandra 中存储无符号整数?

    我通过 Datastax 驱动程序在 Cassandra 中存储一些数据 并且需要存储无符号 16 位和 32 位整数 对于无符号 16 位整数 我可以轻松地将它们存储为有符号 32 位整数 并根据需要进行转换 然而 对于无符号 64 位整
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 如何使从 C# 调用的 C(P/invoke)代码“线程安全”

    我有一些简单的 C 代码 它使用单个全局变量 显然这不是线程安全的 所以当我使用 P invoke 从 C 中的多个线程调用它时 事情就搞砸了 如何为每个线程单独导入此函数 或使其线程安全 我尝试声明变量 declspec thread 但
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 在 Unity 中实现 Fur with Shells 技术

    我正在尝试在 Unity 中实现皮毛贝壳技术 http developer download nvidia com SDK 10 5 direct3d Source Fur doc FurShellsAndFins pdf Fins 技术被
  • WcfSvcHost 的跨域异常

    对于另一个跨域问题 我深表歉意 我一整天都在与这个问题作斗争 现在已经到了沸腾的地步 我有一个 Silverlight 应用程序项目 SLApp1 一个用于托管 Silverlight SLApp1 Web 的 Web 项目和 WCF 项目
  • x:将 ViewModel 方法绑定到 DataTemplate 内的事件

    我基本上问同样的问题这个人 https stackoverflow com questions 10752448 binding to viewmodels property from a template 但在较新的背景下x Bind V
  • 复制目录下所有文件

    如何将一个目录中的所有内容复制到另一个目录而不循环遍历每个文件 你不能 两者都不Directory http msdn microsoft com en us library system io directory aspx nor Dir
  • C 函数 time() 如何处理秒的小数部分?

    The time 函数将返回自 1970 年以来的秒数 我想知道它如何对返回的秒数进行舍入 例如 对于100 4s 它会返回100还是101 有明确的定义吗 ISO C标准没有说太多 它只说time 回报 该实现对当前日历时间的最佳近似 结
  • C++ 继承的内存布局

    如果我有两个类 一个类继承另一个类 并且子类仅包含函数 那么这两个类的内存布局是否相同 e g class Base int a b c class Derived public Base only functions 我读过编译器无法对数
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • 对于某些 PDF 文件,LoadIFilter() 返回 -2147467259

    我正在尝试使用 Adob e IFilter 搜索 PDF 文件 我的代码是用 C 编写的 我使用 p invoke 来获取 IFilter 的实例 DllImport query dll SetLastError true CharSet
  • 为什么 std::uint32_t 与 uint32_t 不同?

    我对 C 有点陌生 我有一个编码作业 很多文件已经完成 但我注意到 VS2012 似乎有以下语句的问题 typedef std uint32 t identifier 不过 似乎将其更改为 typedef uint32 t identifi
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • 使用 WGL 创建现代 OpenGL 上下文?

    我正在尝试使用 Windows 函数创建 OpenGL 上下文 现代版本 基本上代码就是 创建窗口类 注册班级 创建一个窗口 choose PIXELFORMATDESCRIPTOR并设置它 创建旧版 OpenGL 上下文 使上下文成为当前

随机推荐

  • React-Style、Webpack、React - 未捕获错误:不变违规:`style` 属性

    我的浏览器中出现以下错误 未捕获的错误 不变违规 styleprop 期望从样式属性到值的映射 而不是字符串 例如 使用 JSX 时 style marginRight spaces em 这是运行 webpack dev server 并
  • 如何使用 Python 创建文件路径的 zip 文件(包括空目录)?

    我一直在尝试使用zipfile and shutil make archive递归创建目录的 zip 文件的模块 这两个模块都工作得很好 除了空目录不会添加到存档中 包含其他空目录的空目录也会被静默跳过 我可以使用 7Zip 创建相同路径的
  • 使用 Powershell 从多个 XML 文件中的元素获取数据,以便输出到另一个单个 XML 文件

    首先我要承认我是一个 Powershell 和编码 菜鸟 我摸索着写了一些剧本 但我并没有声称自己有任何接近能力的东西 我希望一些更有经验的人能让我走上正确的道路 我正在尝试从多个 XML 文件中提取特定的元素数据 这些数据将用于填充另一个
  • 了解 DICOM 图像属性以获得轴向/冠状/矢状切割 [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我必须用 C 编写一个程序 能够解析 DICOM 并显示轴向 冠状和矢状切割 看起来工作量很大 但我必须这样做 我猜 重要的第一步是理解 DICOM 文件 我一直在读这个教程ht
  • Locale.getDefault() 返回Currency.getInstance 不支持/无效的区域设置

    我的应用程序使用以下代码来获取本地货币 Locale locale Locale getDefault java util Currency localCurrency java util Currency getInstance loca
  • 创建具有预先确定的平均值和标准差的数组

    我正在尝试使用 Numpy 创建一个具有预定平均值和标准差值的数组 该数组需要其中的随机数 到目前为止 我可以生成一个数组并计算平均值和标准差 但无法让数组受值控制 import numpy as np x np random randn
  • 如何将数组设置为mysql用户变量

    我没想到会发现这如此困难 但我试图在 MySQL 中设置一个用户变量来包含一个值数组 我不知道如何做到这一点 所以尝试做一些研究 但很惊讶没有找到答案 我努力了 SET billable types client1 client2 clie
  • 将数据从 csv 转换为动态列表 (Flutter)

    我创建了一个加载 CSV 文件并将其显示为列表视图的应用程序 我使用了以下示例 https gist github com Rahiche 9b4b2d3b5c24dddbbe662b58c5a2dcd2 问题是我的列表不生成行 I flu
  • 如何在另一个 git 存储库中提交 git 存储库

    我正在开发一个使用 git 的应用程序 因此我需要测试它与 git 的集成 在我的 git 存储库中 我需要另一个存储库 my git repo tests another repo 在没有 git 子模块的情况下如何提交它 我不想为一个文
  • 检查 Selenium 中是否存在 Element

    我想检查 Selenium 中是否存在某个元素 如果存在 则为其分配一个名称 现在我有一些看起来像这样的东西 IWebElement size9 driver FindElement By CssSelector a data value
  • 观察者模式与反应器模式

    我一直在研究两者 但找不到任何真正的区别 我错过了什么吗 在网络上 有些人说观察者应该只处理一个事件 而反应器应该处理很多事件 但我不认为这是一个真正的区别 因为反应器可以像许多观察者一样被看到 有什么区别吗 或者新名称 Reactor 只
  • OpenReadStream 允许的最大大小

    OpenReadStream 允许的最大大小是多少 现在 使用 10MB 但我认为必须有一定的上限 可以带GB吗 在 ASP NET Core 5 0 中 上传文件的框架文件大小限制为 2 GB 但是 从 ASP NET Core 6 0
  • C 中的局部结构

    如果一个结构体仅在一个函数中使用 我可以在该函数中声明它吗 我可以这样做吗 int func struct int a b s s a 5 return s a gcc 被它噎住了 但它发出了一个看起来非常奇怪的错误 我无法理解 而不是说
  • 涉及多个表的外键约束

    我在 Postgres 9 3 数据库中有以下场景 表 B 和 C 参考表 A 表 C 有一个引用表 B 的可选字段 我想确保对于表 C 中引用表 B 的每一行 c b a c a 也就是说 如果 C 引用了 B 则两行应指向表 A 中的同
  • Google Calendar V3 REST API 中的批量请求

    如何通过 V3 REST API 使用批量请求获取 添加 更新 Google 日历事件 我已经尝试过 但不起作用 根据文档 https developers google com google apps calendar batch 应该可
  • Chrome 用户脚本是否像 Greasemonkey 脚本一样与全局命名空间分离?

    我知道 Greasemonkey 脚本自动包装在匿名函数中 以某种方式隔离 以防止它们与页面中的脚本发生冲突 Chrome 用户脚本也会发生同样的情况吗 是的 Greasemonkey 脚本是通常封装在匿名函数中 And Chrome 用户
  • C++中NULL和False一样吗

    在 C gcc VS 中 NULL 被视为与 False 相同 或者更重要的是 如果在逻辑语句中 NULL 的计算结果是什么 还有许多其他问题 但没有专门针对 C 的问题 由于某种原因 使用 NULL 控件循环 for 只会冻结程序 表明
  • 在 bash 中指定两个文件扩展名完成

    我正在尝试修改 bash 完整属性 我可以这样排除命令的文件扩展名 complete f X hi vim 我想指定两个文件名进行排除 我该怎么做呢 注意 以下命令不起作用 complete f X hi o vim 一种方法是打开扩展的全
  • 操作系统中的加载程序如何工作? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我知道加载程序是一个将程序加载到主内存的程序 那么 这实际上是如何运作的呢 到底发生了什么 实际上 当加载程序加载程序时 会在 PCB 中创建一个条目 并将程序放入作业池中 程序
  • 在 C++ 中调用 this->get/this->set 方法与直接访问成员变量

    假设我有一堂课Foo 带有私有变量bar 包含一些状态Foo 如果有必要 我可以编写公共 get set 方法bar 当然 我会尽可能避免这种情况以保持封装性 假设我有这些获取 设置方法 每当我必须访问或修改bar 在属于的方法内Foo 我