C++11新特性:拓展的friend语法

news2024/10/7 4:26:42

在C++中,friend关键字用于声明一个函数或类是另一个类的友元(friend)。被声明为友元的函数或类可以访问包含它的类的私有成员。

使用friend关键字应当谨慎,因为它破坏了封装性,增加了类之间的耦合性。友元关系应该仅在确实需要访问私有成员的情况下使用。

友元函数:

class MyClass {
private:
    int privateMember;

public:
    MyClass() : privateMember(42) {}

    // 声明友元函数
    friend void friendFunction(const MyClass& obj);
};

// 友元函数的定义
void friendFunction(const MyClass& obj) {
    std::cout << "Friend Function accessing private member: " << obj.privateMember << std::endl;
}

int main() {
    MyClass myObject;
    
    // 友元函数可以访问私有成员
    friendFunction(myObject);

    return 0;
}

友元类: 

class AnotherClass {
public:
    void accessMyClassPrivateMember(const MyClass& obj) {
        std::cout << "AnotherClass accessing private member: " << obj.privateMember << std::endl;
    }
};

class MyClass {
private:
    int privateMember;

    // 声明友元类
    friend class AnotherClass;

public:
    MyClass() : privateMember(42) {}
};

int main() {
    MyClass myObject;
    AnotherClass anotherObject;
    
    // 友元类的成员函数可以访问私有成员
    anotherObject.accessMyClassPrivateMember(myObject);

    return 0;
}

 


 C++11对friend关键字进行改进:

 

在C++11中,声明一个类为另外一个类的友元时,不需要使用class关键字。

可以利用这个特性为类模板声明友元

这样可以在模板实例化的时候确定一个模板类是否有友元,以及谁是这个模板类的友元。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1405667.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring中Bean对象的存储与读取

创建 Maven 项目 添加 Spring 框架支持 在项目的 pom.xml 中添加 Spring 支持 如何选定版本环境&#xff1a;打开官网&#xff0c;点击github图标 jdk8最后一个Spring版本是5.3.x&#xff0c;Spring6.0.x最低需要jdk17 <dependencies><dependency><groupId&…

QT upd测试

QT upd测试 本次测试将服务器和客户端写在了一个工程下&#xff0c;代码如下 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QUdpSocket> #include<QTimer>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACE…

Windows下RocketMQ搭建

RocketMQ安装 注&#xff1a;Windows必须先安装64bit的 JDK1.8 或以上版本及Maven 。 1.官网下载&#xff1a;下载 | RocketMQ 2.将下载下的安装文件解压到本地磁盘 3.配置环境变量 &#xff1a; 变量名&#xff1a;ROCKETMQ_HOME 变量值&#xff1a;G:\RocketMQ\rocketmq…

常用电子器件学习——MOS管

MOS管介绍 MOS&#xff0c;是MOSFET的缩写。MOSFET 金属-氧化物半导体场效应晶体管&#xff0c;简称金氧半场效晶体管&#xff08;Metal-Oxide-Semiconductor Field-Effect Transistor, MOSFET&#xff09;。 一般是金属(metal)—氧化物(oxide)—半导体(semiconductor)场效应晶…

SpringBoot 中配置处理

1、简介 本文介绍一些 springboot 配置管理相关的内容&#xff0c;如何自定义配置&#xff0c;导入配置&#xff0c;配置绑定和基于 profiles 的配置。 2、springboot 配置管理 2.1、自定义配置类 在 spring 中使用 Configuration 注解定义配置类&#xff0c;在 springboot 中…

利用GPU加速自定义风格图像生成-利用GPU加速结合了ControlNet/ Lora的Stable Diffusion XL

点击链接完成注册&#xff0c;参加本次在线研讨会 https://www.nvidia.cn/webinars/sessions/?session_id240124-31319 随着AI技术的发展, 数字内容创建业务也变得越来越火热。生成式AI模型的发布, 让我们看到了人工智能在各行各业的潜力。您只需要用语言简单描述自己希望看…

【Python】FastApi框架搭建部署

FastApi 是一个现代、快速&#xff08;高性能&#xff09;的 web 框架&#xff0c;用于基于标准Python构建的API。 官方网址&#xff1a;FastAPI 1.安装 1.1 环境信息 # Python版本 3.8.0 1.2 安装 FastApi pip install fastapi # uvicorn 作为服务启动fastapi框架 pip i…

【牛客】几何糕手、国际裁判带师、数位dp?、灵异背包、矩阵快速幂签到、第一次放学

文章目录 《几何糕手》题目描述思路代码 《国际裁判带师》题目描述思路代码 《数位dp?》题目描述思路代码 《灵异背包》题目描述思路代码 《矩阵快速幂签到》题目描述思路代码 《第一次放学》题目描述思路代码 《几何糕手》 题目链接 题目描述 “芝士肾么&#xff1f;” 地…

Mysql的骚操作说明

Mysql的常规操作 记录些不常用,但是很实用的操作,旨在在MySQL语言能解决的批量操作的问题,不动用其他动态或静态语言的辅助。 1、FROM_UNIXTIME 时间戳转时间格式 select scode,sid,gender,type,FROM_UNIXTIME(report_time) as report_time,FROM_UNIXTIME(add_time) as add…

基于SpringBoot的教务管理系统设计与实现(源码+调试)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。今天给大家介绍一篇基于SpringBoot的教务管…

finalshell连接linux的kali系统

kali的ssh服务似乎是默认关闭的&#xff0c;笔者在玩CentOS系统时可以直接用finalshell完成连接&#xff0c;但kali不行&#xff0c;需要先手动开启ssh服务。 开启kali的ssh服务 输入【ssh start】命令开启ssh服务&#xff0c;可以用【ssh status】命令查看ssh状态&#xff0c…

【Linux】vim 操作指令详解

Linux 1 what is vim &#xff1f;2 vim基本概念3 vim的基本操作 &#xff01;3.1 vim的快捷方式3.1.1 复制与粘贴3.1.2 撤销与剪切3.1.3 字符操作 3.2 vim的光标操作3.3 vim的文件操作 总结Thanks♪(&#xff65;ω&#xff65;)&#xff89;感谢阅读下一篇文章见&#xff01;…

API协议设计的十种技术

文章目录 前言一、REST二、GraphQL三、gRPC&#xff08;google Remote Procedure Calls&#xff09;四、Webhooks五、服务端的事件发送——SSE&#xff08;Server-sent Events&#xff09;六、EDI&#xff08;Electronic Data Interchange&#xff09;七、面向API 的事件驱动设…

【.NET Core】深入理解异步编程模型(APM)

【.NET Core】深入理解异步编程模型&#xff08;APM&#xff09; 文章目录 【.NET Core】深入理解异步编程模型&#xff08;APM&#xff09;一、APM概述二、IAsyncResult接口2.1 BeginInvoke2.2 EndInvoke2.3 IAsyncResult属性2.4 IAsyncResult异步演示 三、通过结束异步操作来…

【Linux】yum本地配置

配置将来是在干什么&#xff1f; yum会根据/etc/yum.repos.d/该路径下面的配置文件&#xff0c;来构成自己的下载路径&#xff0c;&#xff08;根据OS版本&#xff0c;根据你要下载的软件&#xff09;&#xff0c;yum帮助我们下载&#xff0c;安装 一般的机器&#xff0c;内置…

Operation

contents 服务器一、相关概念1.1 云服务器与实例1.2 关于域名解析延时与80端口1.3 关于备案1.4 关于SSL证书1.5 关于SSL证书的签发1.6 关于SSL证书的部署1.7 关于LNMP和LAMP1.8 关于bt面板 二、单服务器单一级域名多网站2.1 创建多个二级域名2.2 解析二级域名绑定到服务器上2.3…

【QML COOK】- 011-动画插值设置

QML中内置了一些动画插值类型。不同的插值类型可以通过Animation的easing属性设置。具体可见&#xff1a;PropertyAnimation QML Type | Qt Quick 6.6.1 1. 创建工程在Main.qml&#xff0c;中编写如下代码 import QtQuickWindow {width: 1000height: 100visible: truetitle: …

数字人直播系统跟无人直播系统的区别是什么?如何选择呢?

有媒体预测&#xff0c;未来几年&#xff0c;数字人工智能将呈现爆发式的增长&#xff0c;数字人系统将广泛应用于各个行业&#xff0c;比如数字人直播&#xff0c;数字人短视频播报&#xff0c;数字人制作的海报宣传等等&#xff0c;当然&#xff0c;这其中应用最广的当属数字…

Python实现离散选择Logit模型(Logit算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 Logit模型&#xff08;Logit model&#xff0c;也译作“评定模型”&#xff0c;“分类评定模型”&…

从想象到现实:Midjourney的AI图像生成之旅

从想象到现实&#xff1a;Midjourney的AI图像生成之旅 继ChatGPT之后&#xff0c;Midjourney作为AI艺术的璀璨明珠&#xff0c;吸引了全球范围内的广泛关注。这款工具通过先进的AI技术&#xff0c;将用户输入的文字描述转化为精美绝伦的图像。无论是风景画、肖像画还是抽象艺术…