友元函数(friend)

2023-05-16

全局函数 做 友元函数


    类的主要特点之一是数据隐藏,即类的私有成员无法在类的外部(作用域之外)访问。但是,有时候需要在类的外部访问类的私有成员,怎么办?
    解决方法是使用友元函数,友元函数是一种特权函数,C++允许这个特权函数访问私有成员,。
    程序员可以把一个全局函数、某个类中的成员函数、甚至整个类声明为友元。
    
    让全局的好基友函数 变为 我的好朋友 友元函数
    
    友元函数 目的:访问类中的私有成员属性
    
    全局函数做友元函数 
        全局函数 写到类中作声明 并在前面关键字 friend
        

class Building {
    friend void goodGay(Building* building);
public:
    Building() {
        this->m_SittingRoom = "客厅";
        this->m_BedRoom = "卧室";
    }

public:
    string m_SittingRoom;

private:
    string m_BedRoom;
};

void goodGay(Building* building) {
    cout << "A goodGay is visiting " << building->m_SittingRoom << "。" << endl;
    cout << "A goodGay is visiting " << building->m_BedRoom << "。" << endl;

}

void test8() {
    Building* building = new Building;
    goodGay(building);
}

让整个类 做友元类


    friend class 类名
    友元类 是单向, 不可传递的。

成员函数 做 友元函数 


    friend void goodGay::visit();

/*
    只让 visit 可以作 Building 的好朋友
    visit2 不可以访问私有属性
*/
class Building;
class goodGay {
public:
    goodGay();
    void visit();
    void visit2();
private:
    Building* building;
};
class Building {
    //让成员函数 visit 作为友元函数
    friend void goodGay::visit();
public:
    Building();

public:
    string m_SittingRoom;

private:
    string m_BedRoom;
};

goodGay::goodGay() {
    building = new Building;
}

void goodGay::visit() {
    cout << "A good gay is visiting: " << this->building->m_SittingRoom << endl;
    cout << "A good gay is visiting: " << this->building->m_BedRoom << endl;
}

void goodGay::visit2() {
    cout << "A good gay is visiting: " << this->building->m_SittingRoom << endl;
    cout << "A good gay is visiting: " << this->building->m_BedRoom << endl;
}

Building::Building() {
    this->m_SittingRoom == "客厅";
    this->m_BedRoom = "卧室";        
}

void test08() {
    goodGay gg;
    gg.visit();
}

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

友元函数(friend) 的相关文章

  • MacOS Python安装which is required to install pyproject.toml-based projects解决办法

    问题 使用pip安装的时候 xff0c 很多时候报错 xff1a which is required to install pyproject toml based project 使用pip instll pyproject toml无法
  • 自动以版本号命名keil生成的bin文件

    0 前言 在做项目中一直遇到一个小问题 一直也没管 xff0c 最近花了点时间处理了 xff0c 效果还不错 问题是这样的 xff1a 每次编译后的生成的bin文件需要给客户 xff0c 烧录到设备里进行更新 每次生成的bin文件都是固定的
  • protobuf编码格式解析

    示例 假如定义一个如下的protobuf类型 message Person span class token punctuation span required string user name span class token opera
  • 初探STM32掉电复位PDR

    STM32F407 144脚封装的第143脚PDR xff0c 一直没有关注过 xff0c 板子上是直接对其悬空处理 xff0c 悬空到底对系统有没有什么影响 xff0c 查看了STM32F4系列的技术手册也没有发祥有相关说明 只是说明了P
  • keil中自定义输出信息到编译窗口

    写程序的过程中 xff0c 会有不少的条件编译命令 xff0c 但是条件编译过多会导致忘记了定义那些条件 xff0c 排查起来也非常麻烦 xff0c 有没有什么好的方法来查找是否是否有该定义呢 xff1f 答案是有的 xff1a 那就 wa
  • STM32F4 FPU简单设置

    第一步 xff1a 在stm32f4xx h中定义宏 FPU PRESENT FPU USED span class hljs preprocessor span class hljs keyword define span CM4 REV
  • PX4飞控bootloader编译

    以前在使用pix4中 xff0c bootloader是在出厂的时候默认烧写好的 xff0c 我们直接可以通过USB更新固件 xff0c 但是要做二次开发过程中 xff0c 我们需要编译代码并进行烧写 xff0c 我们以前用的编译命令是默认
  • 如何转行游戏行业及我眼中的理想游戏开发团队

    前置内容 xff1a 很久没有写文章啦 xff0c 今天就来继续和大家聊一聊关于游戏制作的一些东西 今天主要聊两个方面 xff0c 一个是其他行业转游戏行业的一些注意事项以及需要具备的东西 xff1b 第二是和大家聊一聊我心目中理想的游戏开
  • W: GPG error: ...the public key is not available: NO_PUBKEY 7EA0A9C3F273FCD8

    在debian10上执行命令 xff1a sudo apt get update 更新清华源时 xff0c 报错如下 xff1a Cannot initiate the connection to mirrors tuna tsinghua
  • 四旋翼无人机的动力学模型

    1 四旋翼无人机UAV unmanned aerial vehicles 简介 四旋翼无人机是一种能够垂直起降的非共轴的多旋翼飞行器 xff0c 同一对角线上的一组旋翼采用逆时针旋转 xff0c 另一组旋翼采用顺时针旋转 xff0c 相互抵
  • 植保无人机PID调参经验

    1 P I D输出要限幅 2 P D是相对的 xff0c 如果系统震荡 xff0c 降低P或者加大D xff0c 在不震荡的条件下 xff0c 尽量让P大 3 I是可以不用的 xff0c 基本上PD控制器就可以控地很稳了 xff0c 如果感
  • 测试环境建设原则和管理实践

    1 问题 测试环境是指为了完成软件测试工作所必需的计算机硬件 软件 网络设备 历史数据等的总称 即够支持完成测试工作所需要的软件和硬件 测试环境是测试活动的基础 正确模拟生产环境 稳定支持测试活动是测试环境的基本要求 稳定可控的测试环境能够
  • ESP8266 WIFI数传 Pixhaw折腾笔记

    最近3DR数传老是断线 xff0c 重连 xff0c 数据刷不出来 xff0c 折腾了几天数传问题 xff0c 总结如下 xff1a 3DR RADIO xff1a 淘宝100多一对的 xff0c 别的无线数传也可以 xff0c 但一定保证
  • PX4的CMake解析

    home yanlei src Firmware cmake common 中定义了其他CMakeLists txt中所使用的一些函数 使用最多的函数px4 add module在px4 base cmake中 ekf2的CMakeList
  • PX4的软件仿真(SITL)环境配置过程

    官方地址 xff1a https dev px4 io en simulation gazebo html 框架图 xff0c 各个UDP端口一目了然 xff0c 仅有连接到模拟器的udp端口是随机的 xff0c 从下图的启动界面可以看出
  • PX4的硬件仿真(HITL)环境配置过程

    官方链接 xff1a https dev px4 io en simulation hitl html 硬件在环仿真 HITL 结构图 A HITL configuration is selected via QGroundControl
  • ubuntu 分区安装

    分配大小 60G 选择安装Ubuntu 安装选项 安装类型 xff1a 选择其他选项 新建分区表 1 swap区 xff1a 设为逻辑分区 xff1b 作用跟电脑内存类似 xff0c 大小也可以和电脑内存一样大 xff1b 一般2G就可以2
  • 飞控

    现在市面上的飞行控制器 xff08 下面简称飞控 xff09 分为两种 一种是由商业公司设计生产的 xff0c 例如DJI的Naze系列飞控 xff0c 一般都是闭源的 xff0c 并且经过正规系统的测试 xff0c 稳定性方面有保障 另外
  • Ubuntu16.04下编译Pangolin时失败的解决方法

    从github上下载了最新版本的Pangolin xff0c 依赖项都安齐了 xff0c 但是编译时提示找不到libopencv core so 2 4和libopencv imgproc so 2 4 xff0c 然后处理libavfil
  • Windows10+Ubuntu16.04LTS双系统,卸载Ubuntu16.04LTS并安装Ubuntu18.04LTS

    1 背景 xff1a 本来是Windows10 43 Ubuntu16 04双系统 xff0c 想直接从Ubuntu16 04升级到18 04 xff0c 点的软件更新器里的更新 xff0c 结果重启之后一直黑屏 xff0c 左上角有光标闪

随机推荐

  • 深度学习环境配置(Ubuntu18.04+PyTorch1.9.0)

    准备一台有GPU的电脑 一个Ubuntu18 04 xff0c 把软件源换成清华源 xff0c 安装gcc xff08 这个若版本不对可以后续再调整 xff09 安装Anaconda xff1a 选取版本3 5 2 0 xff0c 这个版本
  • 拯救者Y9000P2022版安装Ubuntu

    前言 当我们买了一个新电脑 新笔记本时 xff0c 如果型号比较新 xff08 通常为了追求性能 xff0c 我们总会选择新型号 xff09 xff0c 大概率Ubuntu会没有相应的硬件驱动支持 xff0c 通常是显卡和网卡不支持 配置
  • 一页PPT自动生成短视频的研究

    希望通过一些技术 xff0c 将以前自己讲过的PPT转换成有解说的短视频 xff0c 从而进行一些分发 旁白到语音 从文字转换成语音我们首先想到的就是TTS xff0c 这其中我也是用了各式各样的TTS xff0c 发现发音电子音非常强 x
  • 选择Mathtype数学公式编辑器的N个理由

    Mathtype是一款强大的数学公式编辑器 xff0c 是理科 生必备的工具 为什么选择这款软件呢 xff1f 不仅仅是因为它有很强的实用性 xff0c 而且他还有许多公式编辑器无可替代的强大功能 今天就来和大家一起细数细数为什么选 择ma
  • Python中局部变量、全局变量和修改全局变量

    局部变量 1 什么是局部变量 如下图所示 2 小总结 局部变量 xff0c 就是在函数内部定义的变量不同的函数 xff0c 可以定义相同的名字的局部变量 xff0c 但是各用个的不会产生影响局部变量的作用 xff0c 为了临时保存数据需要在
  • 用Python抓包工具查看周边拼车情况

    说起Python爬虫 xff0c 很多人第一个反应可能会是Scrapy或者Pyspider xff0c 但是今天文章里用到是Python下一个叫Mitmproxy的抓包工具 xff0c 对付一些非常规的数据获取还是很有效的 不过凡事都是有利
  • 在Python中定义Main函数

    许多编程语言都有一个特殊的函数 xff0c 当操作系统开始运行程序时会自动执行该函数 这个函数通常被命名为main xff0c 并且依据语言标准具有特定的返回类型和参数 另一方面 xff0c Python解释器从文件顶部开始执行脚本 xff
  • realsense D435i安装及标定遇到的问题

    realsense D435i安装 这里的安装是基于ros的安装 xff0c 前提是要安装ros系统 下载realsense ros包 span class token function mkdir span p catkin ws src
  • 【ROS】使用C++编写简单moveit终态位姿控制以及position数据可视化

    1 前言 这几天主要还是在研究用C 43 43 编写moveit target pose的例程 xff0c 中途出现了各种问题 xff0c 一度怀疑人生 xff0c 好在现在也算是磕磕碰碰的解决了一点 虽然还是不知道why xff0c 不过
  • ERROR Session/line number was not unique in database. History logging moved to new session 18

    ERROR Session span class token operator span line number was span class token keyword not span unique span class token k
  • 关于卫星姿态

    坐标系 注意 xff1a 卫星旋转飞行时 xff0c 主轴也转是一个锥角的形式 转动主轴指向 xff0c 和转动惯量主轴指向是一个 xff08 卫星对称均匀情况下 xff0c 质心在中心 xff09
  • VS Code / CMake创建嵌入式Linux C/C++应用

    VS Code是目前最流行的C C 43 43 程序开发环境之一 xff0c 利用VS Code对CMake工程模式的支持 xff0c 创建面向嵌入式Linux平台的C C 43 43 应用 xff0c 对工程管理非常方便 xff0c 值得
  • ROS消息-数组(固定长度与可变长度)及结构体实例

    ROS消息 数组 xff08 固定长度与可变长度 xff09 及结构体实例 说明 当利用ROS创建节点进行CAN通信时 xff0c 单个can报文的消息格式通常为 xff1a candata msg uint32 id uint8 8 da
  • 通过pixhawk飞行日志读取飞行路线以及对应地图

    px4飞行日志为 bin文件或者 log文件 xff0c 将文件数据导入到flightplot中 xff0c 输出轨迹 xff08 export track xff09 xff0c 下载一个Google地图 xff0c 将保存成的文件在Go
  • 遗留系统的自动化测试策略和实践方法

    1 什么是遗留系统 遗留系统是一种旧的方法 旧的技术 旧的计算机系统或应用程序 属于或与以前的 过时的计算机系统有关 但仍在使用中 通常 将系统称为 遗留系统 意味着它可能已经过时或需要更换 但是系统还在对外提供服务 还在不断的迭代 有新的
  • 总能量控制(TECS)及其在px4中的应用(学习笔记)

    这篇文章首先介绍一下总能量控制算法相关的基础内容 xff0c 再结合PX4代码对PX4代码中RECS部分进行解读 首先是RECS算法相关的基础知识介绍 总能量控制是运用能量控制与分配的方法 xff0c 将速度控制与高度控制 xff08 切向
  • PX4固件飞行日志的采集设置以及数据读取

    px4飞行日志共有四种格式 xff1a log文件 bin文件 ulg文件和 px4log文件 xff0c 其中前两种为早期的PX4固件生成的文件格式 xff0c 其数据记录的相关文件为sd2log xff0c 新版固件生成的文件格式为后面
  • Px4固件新格式ulg日志文件数据处理方法

    最早的px4固件日志文件格式为 bin xff0c 后续又有了 log和 px4log格式的日志文件 较新的px4固件中多了logger日志记录module xff0c 生成的日志格式为 ulg 但是针对这种较新格式日志文件的数据分析资料并
  • PIXHAWK机架类型的的设置选择与电机通道顺序设置

    1 共轴直升机 main1 左侧斜盘电机 xff0c 控制俯仰 main2 xff1a 左侧斜盘电机 xff0c 控制滚转 main3 xff1a 上面旋翼 xff0c 逆时针旋转 main4 xff1a 下面旋翼 xff0c 顺时针旋转
  • 友元函数(friend)

    全局函数 做 友元函数 类的主要特点之一是数据隐藏 xff0c 即类的私有成员无法在类的外部 xff08 作用域之外 xff09 访问 但是 xff0c 有时候需要在类的外部访问类的私有成员 xff0c 怎么办 xff1f 解决方法是使用友