C++类成员函数可以访问同类不同对象的私有成员

2023-11-12

example

如下例:

class Test
{
public:
	Test(int v) : val(v)
	{}
	Test(const Test& t)
	{ val = 100; cout << t.val << endl; }
	void show(Test a) 
	{ cout << a.val << endl; cout << val << endl; }
	
private:
	int val;
};

int main() 
{
	Test v1(99);		//v1.val = 99
	Test v2(v1);		//v2.val = 100
	v1.show(v2);
}

结果如下例:

99		//第一次拷贝构造
100		//传参调用了拷贝构造
100		//执行show()
99		//执行show()

疑问

难道我们不应该提供几个public的接口给Test返回其类内私有成员val么?

引用C++标准原文

A member of a class can be
— private; that is, its name can be used only by members and friends of the class in which it is
declared.
— protected; that is, its name can be used only by members and friends of the class in which it is
declared, and by members and friends of classes derived from this class (see 11.5).
— public; that is, its name can be used anywhere without access restriction.

访问限制标号是针对类而不是针对一个类的不同对象,只要同属一个类就可以不用区分同一个类的不同对象。因为 是类的成员函数,所以有权限访问私有数据成员。如果是在main函数中直接,那肯定就会报错了,不能访问,因为这是在类外不能访问私有数据成员。一个类的成员函数可以访问这个类的私有数据成员,我们要理解这个对类的访问限制,而不是针对对象。


C++的访问控制是类层面的 class-level, 而不是对象级别的object-level,

同一个类可以访问所有自己类实例的私有成员, 数据成员是类私有而不是实例私有, 成员是否可访问是类的性质, 而不是对象的性质

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

C++类成员函数可以访问同类不同对象的私有成员 的相关文章

随机推荐

  • 调试共享几何图形池

    没有这一节的资料 但是代码该调试到这里了 随意调试着玩吧 环境变量本机都没有设置 看这个意思 似乎是只需要一个几何体 所有的瓦片用类似于matrixTransform gt addChild node 的方式 看看创建 上一层 为什么是第0
  • 买卖股票的最佳时机含手续费--贪心算法

    LeetCode 买卖股票的最佳时机含手续费 给定一个整数数组 prices 其中第 i 个元素代表了第 i 天的股票价格 非负整数 fee 代表了交易股票的手续费用 你可以无限次地完成交易 但是你每笔交易都需要付手续费 如果你已经购买了一
  • 利用Google翻译实现网站国际化——js插件

    文章描述了很多作者的思路 显得繁琐和冗余 若无兴趣请直接下载资源 查阅最终解决方案 最终解决方案 代码静态化已经全部完成 包括面板语言文件 已添加完备的注释 请直接查阅 下载插件js谷歌翻译插件 示例请使用 本地静态资源 html 需要修改
  • Spring AutowireCapableBeanFactory

    Spring AutowireCapableBeanFactory接口的使用小结 Spring的ioc容器中有一个接口叫AutowireCapableBeanFactory 我们从名字中可以看出 具有自动装配Bean的能力 而且这里笔者先透
  • 刷脸支付是万亿级支付模式新趋势

    随着5G时代的到来 互联网 AI智能 云计算 物联网等技术的成熟 一种连手机都不需要的新型支付方式诞生了 那就是刷脸支付 扫码支付较现金支付无需找零 无需携带钱包 只需要扫码就可以完成支付 对于商家和顾客来说 支付变得简单多了 如果说 扫码
  • Feign接口Get请求自动转化成POST

    原因 在入参的时候如果没有通过注解指定 此时的参数会自动封装到body中 feign检测到body里面有请求参数就会默认使用post请求 解决方法 解决方法也很简单 只需要在参数前加 SpringQueryMap即可 GetMapping
  • vue模块化

    vue模块化 模块化开发 不使用模块化带来的问题 CommonJS es6的模块化的导出和导入 export的基本使用 export default导出 统一全部导出 模块化开发 不使用模块化带来的问题 初始模块化思想 CommonJS e
  • 拖延症解药

    拖延症解药 完美主义 情绪问题 原谅过去的自己 与自己和解 不做准备工作 在不充分条件下启动 计划 死线 是第一生产力 将 死线 提前 将它分段 分解为几个阶段性 死线 一个一个完成 更易启动 降低不确定性 完成一个小目标后奖励自己 顺序
  • 电影下载资源总结

    电驴电骡 donkey4u com emul软件 BT kickass to kat ph isohunt com www torrentkitty com thepiratebay sx thepiratebay ee 论坛 cmct c
  • python绘制三维图

    一 初始化 假设已经安装了matplotlib工具包 利用matplotlib figure Figure创建一个图框 1 2 3 4 import matplotlib pyplot as plt from mpl toolkits mp
  • Elasticsearch 5.6.5 基础笔记(一) - 概念和安装

    概念 Elasticsearch 分布式 可扩展 实时的搜索与数据分析引擎 建立在全文搜索引擎库 Apache Lucene 基础之上 能胜任上百个服务节点的扩展 并支持 PB 级别的结构化或者非结构化数据 将所有的功能打包成一个单独的服务
  • 动态数组的创建与维护

    说是动态数组 其实就是在满容量时 再创建创建一个一定容量的数组 实例代码中是原数组容量的一倍 并将对数组的引用指向新的数组 而当数组容量比较小时 则创建一个一定容量的数组 示例代码中是原数组容量的1 4 并将对数组的引用指向新的数组 示例代
  • Vulkan-程序结构

    程序结构 一般来说 完整的Vulkan程序包含 创建Vulkan实例 获取物理设备列表创建逻辑设备 创建命令缓冲 获取设备中支持图形工作的队列 初始化交换链 创建深度缓冲 创建渲染通道 创建帧缓冲 创建绘制对象 初始化渲染管线 创建栅栏和初
  • Qt获取wifi列表,连接wifi后获取IP地址

    环境win7 qt5 13 MinGW32 台式机 直接上步骤了 网上看到的略显啰嗦 就是这么简单直接 1 头文件 include windows h include wlanapi h 2 pro设置连接路径 需要根据自己安装路径加载 L
  • 要成为一名成功的网络爬虫开发者,需要了解哪些知识点?

    要成为一名成功的网络爬虫开发者 您需要掌握以下一些关键知识 编程语言 Python 是最常用的编程语言之一 特别适合网络爬虫开发 您需要掌握 Python 的基础语法 数据结构和面向对象编程 HTTP 和网络基础知识 了解 HTTP 请求和
  • React之条件渲染(学习和总结)

    在实际开发中经常会遇到条件渲染 一般都是通过if else 语句 三元运算符 switch case 语句来实现 这里记录并学习一下 1 条件渲染之 IF const users id 1 firstName Robin lastName
  • 高精度加法c语言,C语言实现高精度加法

    免费资源网 https freexyz cn 本篇为高精度加法的计算 接下来我还会去写高精度乘法的计算 一 高精度运算的概念 高精度运算其实就是参与运算的数完全超出基本数据类型所能表示的范围的运算 例如int型范围就是 2147483648
  • 深度卷积神经网络(CNN)

    CNN简述 卷积神经网络 Convolutional Neural Network CNN 它是属于前馈神经网络的一种 其特点是每层的神经元节点只响应前一层局部区域范围内的神经元 全连接网络中每个神经元节点则是响应前一层的全部节点 一个深度
  • 信号完整性分析基础知识之有损传输线、上升时间衰减和材料特性(三):耗散因子Df

    在低频下 介电材料的漏电阻是恒定的 用体积电导率来描述材料的电性能 这种体积电导率与材料中离子的密度和迁移率有关 在高频下 由于偶极子的运动增加 电导率随频率增加 材料中可以旋转的偶极子越多 材料的体积电导率就越高 偶极子可以随着施加的场移
  • C++类成员函数可以访问同类不同对象的私有成员

    example 如下例 class Test public Test int v val v Test const Test t val 100 cout lt lt t val lt lt endl void show Test a co