为什么同一类的对象可以访问彼此的私有数据?

2024-03-21

为什么同一类的对象可以访问彼此的私有数据?

class TrivialClass {
public: 
  TrivialClass(const std::string& data) :
    mData(data) {};

  const std::string& getData(const TrivialClass& rhs) const {
    return rhs.mData;
  };

private:
  std::string mData;
};

int main() {
  TrivialClass a("fish");
  TrivialClass b("heads");

  std::cout << "b via a = " << a.getData(b) << std::endl;
  return 0;
}

这段代码有效。对象 a 完全有可能访问对象 b 的私有数据并返回它。为什么会这样呢?我认为私人数据是私人的。 (我一开始尝试理解 pimpl 习惯用法中的复制构造函数,但后来我发现我什至不理解这个简单的情况。)


因为这就是 C++ 中的工作原理。在 C++ 中,访问控制适用于每班基础上,而不是每个对象的基础上。

C++ 中的访问控制是作为静态、编译时功能实现的。我认为很明显,在编译时实现任何有意义的每个对象访问控制实际上是不可能的。只有每类控制才能以这种方式实现。

每个对象控制的一些提示存在于受保护的访问规范,这就是为什么它甚至在标准 (11.5) 中拥有自己的专门章节。但其中描述的每个对象的特征仍然相当初级。同样,C++ 中的访问控制是针对每个类进行的。

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

为什么同一类的对象可以访问彼此的私有数据? 的相关文章

  • 打击垃圾邮件机器人

    我的网站中有 C 表单 希望防止垃圾邮件机器人填写它 诀窍是 我想避免 CAPTHA 或任何其他用户输入 以避免丢失单个注册 以下是我心中的一些技巧 隐藏输入栏 问题 这还有效吗 跟踪时间 从第一个用户输入 关注名字 到发布表单 人类需要
  • 对静态成员变量的未定义引用

    我有一个有静态成员的类 它也是我的程序中其他几个类的基类 这是它的头文件 ifndef YARL OBJECT HPP define YARL OBJECT HPP namespace yarlObject class YarlObject
  • C++ 返回值、引用、const 引用

    你能向我解释一下返回值 值引用和值常量引用之间的区别吗 Value Vector2D operator const Vector2D vector this gt x vector x this gt y vector y return t
  • 每次调用新方法时触发事件

    我正在做一个logger for a c 应用程序需要记录每个方法被调用的时间以及每个方法执行时间 我可以通过调用自己的方法来做到这一点EventLogger LogMethodCall方法在每个方法的开头 但我想知道是否有办法使CLR每次
  • 操作/Lambda 表达式内存管理问题

    我将一个操作存储在局部变量中 然后在该局部变量超出范围后使用 使用前是否有被清理的危险 这是一个例子 public List GetMaps Action
  • 在不使用 ncurses 的情况下用 C/C++ 编写“真正的”交互式终端程序,例如 vim、htop...

    不 我不想使用ncurses 因为我想了解如何 终端可以工作 并且我自己编程也很有趣 没有 必须是可移植的 它必须只能在基于 linux xterm 的终端仿真器上工作 我想做的是编写一个交互式终端应用程序 例如 htop 和 vim 我的
  • 使用 size_t 值反向遍历向量

    我想以相反的方向遍历向量的值 如您所知 向量的大小为 size t 当我使用以下代码时 for size t r m size 1 r gt 0 r x r f r for size t c r 1 c lt m size c x r m
  • 在 C++ 中使用表达式模板进行符号微分

    如何在 C 中使用表达式模板实现符号微分 一般来说 您需要一种表示符号的方法 即编码的表达式模板 例如3 x x 42 以及一个可以计算导数的元函数 希望您对 C 中的元编程足够熟悉 知道这意味着什么和需要什么 但可以给您一个想法 This
  • 是否有一种算法可以在线性时间内计算数组反转?

    我知道有多少倒转 en wikipedia org wiki Inversion 28discrete mathematics 29 in an n 元素数组可以在 O n log n 操作使用增强型归并排序 http www geeksf
  • Qt QML 数据模型似乎不适用于 C++

    我一直在使用中的示例http doc qt digia com 4 7 qdeclarativemodels html http doc qt digia com 4 7 qdeclarativemodels html这是 QML 声明性数
  • 函数参数评估顺序[重复]

    这个问题在这里已经有答案了 在 C 和 C 中 函数参数的求值是否有固定的顺序 我的意思是 标准怎么说 是吗left to right or right to left 我从书中得到的信息令人困惑 是否有必要function call应该使
  • 如何填充两个样条线或直线系列之间的区域

    我有这个Chart 如何填充两个之间的区域Series S0 and S1 说蓝色和黄色Series 为此 我们编写了其中之一Paint事件 这里的ValueToPixelPosition https msdn microsoft com
  • C++ 错误:从“char”到“const char*”的转换无效

    我对 C 完全陌生 我创建了这个函数 bool guessWord string compWord cout lt lt Guess a letter string userLetter cin gt gt userLetter for u
  • Visual Studio Code 调试默认 ASP.NET Core MVC WebApp:不起作用

    我正在使用 Manjaro linux 并尝试调试默认的 ASP NET Core MVC 项目 但调试停止 没有任何错误 我创建了该项目 dotnet new mvc in a Meow文件夹 没什么特别的 然后添加了新的配置 NET C
  • 带有自定义鉴别器的 EntityFramework Code First 继承

    我正在尝试在 EntityFramework Code First 中映射以下继承 public class Member public string ProjectName get set public string AssemblyNa
  • 数组与映射的性能

    我必须循环一个大数组中的元素子集 其中每个元素都指向另一个元素 问题来自于检测大图中的连接组件 我的算法如下 1 考虑第一个元素 2 将下一个元素视为前一个元素所指向的元素 3 循环直到没有发现新元素 4 考虑1 3中尚未考虑的下一个元素
  • EWS - 给予预约,获取预约的所有者副本

    在 EWS 中进行预约后 是否可以获得所有者的副本 例如 如果我登录为user1 我有user1创建的约会的副本user2 我有冒充权 我要编辑user2预约的副本 我怎样才能获得user2 s copy 您可以使用 PidLidClean
  • 未找到 _sqlite3_open 等符号错误

    您好 我收到此错误 Undefined symbols sqlite3 open referenced from main in ccRlWVer o sqliite3 close referenced from main in ccRlW
  • 如何在给定点停止线程?

    我试图停止一些线程 阅读一些有关优雅地执行此操作的正确方法的内容 但我一定做错了什么 因为它根本不起作用 起初我尝试不使用lock with IsRunning不稳定 然后尝试使用锁 这是我所拥有的 private volatile boo
  • OpenGL 计算着色器调用

    我有一个与新计算着色器相关的问题 我目前正在研究粒子系统 我将所有粒子存储在着色器存储缓冲区中 以便在计算着色器中访问它们 然后我派遣一个一维工作组 define WORK GROUP SIZE 128 shaderManager gt u

随机推荐

  • 如何从终端运行 mvim (MacVim)?

    我安装了 MacVim 并尝试将其设置为 Git 版本控制 的编辑器 但我无法从命令行运行 mvim 因为它无法识别 如何设置 mvim 以便可以从终端运行它 我不认为我会在路径中添加任何东西 是的 brew install macvim
  • 如何编写按日期接收数据的查询?

    我写了一个简单的查询 SELECT date count user as count FROM sessions GROUP BY date 回应是这样的 但是 我想查看每个日期 如果日期不存在 行必须是这样的 2018 02 01 0 2
  • 使用 Cordova 3.1 CLI 构建 Android 应用程序时出错

    我正在尝试通过 Mac 上的终端通过phonegap CLI 运行 cordova build android 首先我下载了 Android SDK 然后我设置了项目并添加了android 然后我尝试 cordova build andro
  • 增长 NSTextView 以适应内容会剪切最后一行文本

    我正在尝试创建一个 NSTextView 它随着用户键入而垂直增长 并在高度达到最大值后滚动 这类似于消息作品中的文本视图 我的第一次尝试使用委托来侦听文本更改并调整与 NSTextView 的滚动视图关联的高度约束 void textDi
  • 在 codeigniter 中卷曲

    我想在我的 codeigniter 应用程序中使用curl 但我得到的是空数组 我的代码是这样的 this gt load gt library curl url http url checkweb php post data array
  • JWT 和签名 cookie 有什么区别?

    我正在调查JWT http jwt io作为传统 Cookie 会话的替代方案 但我看不出它们与签名 Cookie 有何根本区别 例如 Express 通过中间件提供的签名 Cookiecookie解析器 https www npmjs c
  • 如何在 Olingo V4 中创建有界动作 (java)

    我尝试到处寻找 但无法弄清楚如何在 olingo V4 java 中实现有界操作 处处给出无界动作教程 我尝试调整这段代码 final CsdlAction action new CsdlAction action setName test
  • 收到“Stream 不支持写入。”以下代码中出现异常

    我正在尝试将图像上传到 Amazon S3 但在此之前我正在调整图像大小 为了调整大小 我必须传递流对象 并且在某一时刻 注释为 Error 的行 我收到 Stream 不支持写入 例外 请帮忙 public ActionResult Ad
  • Vim 中可以有特定于文件类型的键绑定吗?

    In my vimrc文件中 我有一个用于注释的键绑定 用于插入双斜杠 在一行的开头 the mappings below are for commenting blocks of text map
  • 扩展 AbstractAnnotationConfigDispatcherServletInitializer 时的 getServletConfigClasses() 与 getRootConfigClasses()

    有什么区别getServletConfigClasses vs getRootConfigClasses 延伸时AbstractAnnotationConfigDispatcherServletInitializer 从今天早上开始我已经阅
  • 管理中自定义 Magento 配置出现 404 错误

    我正在 Magento 1 6 中开发自定义 SMS 模块 我已经设置了system xml文件来管理相关的自定义配置字段 菜单条目显示出来 但当我单击它时 会显示 404 错误页面 而不是预期的配置字段列表 你能看到我的代码中有任何错误吗
  • 如何在 iPhone 应用程序中实现密码恢复?

    我想在我正在开发的 iPhone 应用程序中添加简单的密码保护 我可能会使用 crypt 将密码存储在我的数据库中 该数据库采用 CoreData sqlite 格式 我认为我对如何创建和存储密码有很好的了解 但如果用户忘记密码 我想添加密
  • do-while 循环的目的是什么? [复制]

    这个问题在这里已经有答案了 我知道 do 的作用 以及它如何与 while 循环配合 但是无论 do 是否存在 while 循环代码不会相同吗 考虑以下 while condition myFunction and do myFunctio
  • 在 NodeJS 中,如何将 HTTP 请求包装到 Promise 中?

    NodeJS 6 9 3 我编写了一个简单的 NodeJS 应用程序 它发出如下所示的请求 var http request require request http request method GET uri https search
  • 持续检测互联网连接

    我希望我的应用程序能够自动检测互联网连接丢失 所以我使用以下代码 void applicationDidBecomeActive UIApplication application Reachability networkReachabil
  • 跟踪未登录的用户

    是否可以在不使用会话或 cookie 的情况下跟踪未登录的用户 有没有更靠谱的方法呢 就像www filefactory com或其他类似的下载空间网站一样 他们可以跟踪您是否是免费用户并发送下载请求 在开始下一次下载之前您必须等待x次 我
  • 如何使用R表函数获取比例? [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我有一个犯罪数据集 其中变量很少 如 ID Year Date Arrest 现在我试图获取特定年份中逮捕的比例 例如多
  • 检查数组中的值

    我需要检查数组以查看用户输入是否已存在 并显示一条消息以确定用户输入是否存在 第一部分正在工作 但我尝试创建一种单词检查方法 我不确定我是否走在正确的道路上 干杯 import java util Scanner public class
  • 如何检测文本文档之间的重复项并返回重复项的相似度?

    我正在编写一个爬虫来从某个网站获取内容 但是内容可以重复 我想要 以避免这种情况 所以我需要一个函数可以在两个文本之间返回相同的百分比来检测两个可能重复的内容示例 文本 1 我正在编写一个爬虫 文本2 我正在编写一些文本爬虫来获取 比较函数
  • 为什么同一类的对象可以访问彼此的私有数据?

    为什么同一类的对象可以访问彼此的私有数据 class TrivialClass public TrivialClass const std string data mData data const std string getData co