友元函数和友元类

C++友元函数和友元类 阅读详情

私有成员只能在类的成员函数内部访问,如果想在别处访问对象的私有成员,只能通过类提供的公有接口(成员函数)间接地进行。

这固然能够带来数据隐藏的好处,利于将来程序的扩充,但也会增加程序书写的麻烦。

一. 友元函数

在定义一个类的时候,可以把一些函数声明为“友元”,这样那些函数就成为该类的友元函数。

友元函数是在类中用关键字friend修饰的非成员函数,可以是一个普通的函数,或是其它类的成员函数。

它不是本类的成员函数,却在它的函数体中却可以访问类的私有成员和保护成员。

将全局函数声明为友元的写法如下:

friend  返回值类型  函数名(参数表);

将其他类的成员函数声明为友元的写法如下:

friend  返回值类型  其他类的类名::成员函数名(参数表);

例如:

#include<iostream>
using namespace std;
class CCar;  //提前声明CCar类,以便后面的CDriver类使用
class CDriver
{
public:
    void ModifyCar(CCar* pCar);  //改装汽车
};
class CCar
{
private:
    int price;
    friend int MostExpensiveCar(CCar cars[], int total);  //声明普通友元
    friend void CDriver::ModifyCar(CCar* pCar);  //声明其他类的友元
};
void CDriver::ModifyCar(CCar* pCar)
{
    pCar->price += 1000;  //汽车改装后价值增加
}
int MostExpensiveCar(CCar cars[], int total)  //求最贵气车的价格
{
    int tmpMax = -1;
    for (int i = 0; i<total; ++i)
        if (cars[i].price > tmpMax)
            tmpMax = cars[i].price;
    return tmpMax;
}

二. 友元类

一个类 A 可以将另一个类 B 声明为自己的友元,类 B 的所有成员函数就都可以访问类 A 对象的私有成员。

class CCar
{
private:
    int price;
    friend class CDriver;  //声明 CDriver 为友元类
};
class CDriver
{
public:
    CCar myCar;
    void ModifyCar()  //改装汽车
    {
        myCar.price += 1000;  //因CDriver是CCar的友元类,故此处可以访问其私有成员
    }
};
友元类和友元函数 文章目录Friend class and function in C++Friend classFriend function注意事项 Friend class and function in C++ Friend class Friend Class. 友元类可以是另一个类访问当前类的私有数据和方法. 如下例: class Node { private: int key; Node *n... 阅读详情

相关推荐

C++友元函数和友元类用法详解

在C++中,我们使用类对数据进行了隐藏和封装,类的数据成员一般都定义为私有成员,成员函数一般都定义为公有的,以此提供类与外界的通讯接口。但是,有时需要定义一些函数,这些函数不是类的一部分,但又需要频繁地访问类的数据成员,这时可以将这些函数定义为该函数的友元函数。除了友元函数外,还有友元类,两者统称为友元。友元的作用是提高了程序的运行效率(即减少了类型检查和安全性检查等都需要时间开销),但它破坏了类

程序猿老樊的博客 7万+

C++友元函数,友元类

1. 友元的声明只能出现在类的内部,但是在类内出现的具体位置不限制,友元函数不是类的成员 也不受所在区域访问控制级别的限值 2. 友元函数的定义可以在类内也可以在类外 3. 友元函数它不是成员函数,它不受作用域的限值,不属于类,也不属于对象,他就是一个普通的函数 友元函数使用典型错误: <wiz_code_mirror> ...

weixin_30457065的博客 273

绝缘检测原理和绝缘电阻计算方法

绝缘检测的目的就是计算绝缘电阻,当绝缘电阻低于某个阈值,则很可能会造成电池短路、漏电,威胁人员安全

m0_56208280的博客 4万+

友元

友元有三种:友元类,友元函数,友元成员。 友元函数 注意: (1)友元函数也可以在类内定义 ,但是友元函数并不是类的成员函数,而是不属于任何类的一般外界函数。 (2)同理友元函数没有this指针,必须使用对象名。成员名进行访问 友元成员: 友元成员可以被认为是一个类的成员函数被声明为另一个类的的成员函数 friend 类名::成员函数名; 注意: (1)友元不具有传递性。(A是B的友元,B是C的友元,A不是C的友元) (2)友元是单向的。 (3)友元的声...

qq_62845624的博客 1630

低电压高效率能源管理芯片BQ25570的基本用法及应用电路实例

BQ25570是一款低电压、高效率、集成了可编程功率追踪(MPPT)功能、BOOST升压功能和BUCK降压功能的综合型能源管理电路。冷启动工作电压为330mV,热启动工作电压为100mV。主要应用于温差发电片TEG、压电、摩擦发电和太阳能板的能量收集,也可以用于人体可穿戴自取能传感设备的能量管理。本文主要介绍了BQ25570相关参数计算、MPPT功能验证、工作逻辑和应用场景,并设计了一版测试电路,给出了不同应用需求的电路配置建议。

weixin_49213602的博客 3455

VOLTE信令流程-IMS注册篇(五)

目录 VOLTE信令流程-IMS 注册 VOLTE信令流程-IMS 注册/注销 VOLTE信令流程-VoLTE呼叫流程 VoLTE-VoLTE VoLTE-CS CS-VoLTE CS-CS VOLTE信令流程 VOLTE信令流程-VOLTE-VOLTE信令 VOLTE信令流程-INVITE详细信息 VOLTE信令流程-eSRVCC信令流程 VOLTE信令流程-IP短信 VOLTE信令流程-IMS 注册 IMS注册流程简述  获取鉴权向量 IMS用户将注...

gender123的博客 2万+

【C++】类和对象:友元函数和友元类

友元函数和友元类

qq_46403377的博客 782

医疗AI知识库更新慢?提示工程架构师用Agentic AI自动更新的策略

我们的目标是用Agentic AI替代传统更新流程中的“重复劳动”,让医疗知识库(以知识图谱为例)能自动跟踪最新医学进展,把“更新周期从数月缩短到数天”。从PubMed/指南数据库自动抓取新文献;用提示工程从文本中提取结构化医学知识;自动校验新知识与旧知识的冲突;将通过校验的知识写入知识图谱。拆问题:先讲医疗知识库更新慢的3大根源;给方案:用Agentic AI设计4个“小助手”解决问题;讲原理:每个小助手的工作逻辑+提示工程技巧;做实战。

AI 原生应用开发的博客 1062

C++中类的友元函数和友元类详解

类的友元函数是定义类外部,但是有权限访问类的所有私有(private)成员和保护(protected)成员。友元函数并不是类成员函数。友元可以是一个函数,也可以是一个类,我们称之为友元类,整个类及其所有成员都是友元。我们通过一个例子来认识友元函数: 1.2 友元类 友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(包括私有成员和保护成员),友元类固然好用,但是它打破了面向对象的封装特性。我建议尽量不要用或者少用。我们举例说明一下:main.cpp 2.说明 友元函数是类外函数,声

weixin_45805339的博客 963

机器学习实战4-教育领域:学生成绩的可视化分析与成绩预测-详细分析

大家好,我是微学AI,今天给大家带来机器学习实战4-学生成绩的可视化分析与成绩预测,机器学习在教育中的应用具有很大的潜力,特别是在学生成绩的可视化分析与成绩预测方面。机器学习可以通过对学生的父母教育情况和学校表现等数据进行分析和挖掘,从而揭示潜在的学习模式和趋势。

微学AI的博客 7679

QML教程04 - Image:搞定界面上的所有图片

本文是QML教程系列的第四篇,重点讲解Image控件的实战用法。文章从图片显示常见的变形、卡顿等问题入手,详细介绍了Image的核心属性和使用技巧。主要内容包括:图片路径的三种写法(相对路径、qrc资源、网络URL)、最重要的fillMode属性解析(PreserveAspectFit、PreserveAspectCrop、Stretch的适用场景)、性能优化方法(sourceSize设置)、异步加载(asynchronous)以及圆形头像的实现方案。

BenBierBa的博客 1609

C++友元 friend

友元 友元的作用 友元,就是类似好朋友一样的存在,其他人进不来你的私密(private)处,但是友元可以。 能做友元的对象 全局函数做友元 类做友元 成员函数做友元 全局函数做友元 平常情况(全局函数不是友元) #include<iostream> #include<string> using namespace std; class Room { public: string public_place; private: string private_place; };

milaiko的博客 227

22、自动化地图制作与Pandas数据处理

本文介绍了在ArcGIS Pro中使用arcpy.mp模块进行自动化地图制作的关键技术,涵盖地图元素的访问、移动与文本修改,以及将布局批量导出为JPEG、PNG和PDF格式的方法。同时,文章深入探讨了Pandas在数据处理和地理空间分析中的应用,特别是Spatially Enabled DataFrames(SEDFs)的使用。通过综合案例展示了地图更新与数据清洗、分析的结合,提升了地图制作与数据处理的效率,为GIS自动化工作流提供了实用指南。

w8x9y0z1的博客 79

[C++]友元函数和友元类

友元函数是非成员函数,但被允许访问类的私有成员。通过friend关键字声明友元函数,它可以访问类的私有数据。友元函数并不是类的成员,它只能访问类的私有和保护成员,而不能访问类的其他成员函数或成员变量。友元函数的访问权限仅限于该类的私有和保护成员。友元类是允许访问另一个类私有成员的类。通过关键字声明友元类,使得友元类的成员函数能够访问被声明类的私有数据。友元类和继承关系不同,它只是授权给一个类访问另一个类的私有成员,不会影响类的继承关系。

2302_80281315的博客 1063

微信小程序 - 最新图片组拖拽排序更换位置功能,类似微信朋友圈九宫格图片的拖动排序效果,微信小程序实现九宫格图片拖拽调换位置,小程序详细实现图像拖曳拖动切换位置排序功能(详细示例代码,一键复制开箱即用

微信小程序,wechat,小程序,图片排序,图像排序,九宫格拖拽排序,拖曳,拖动,拖拽,仿微信朋友圈,朋友圈宫格图片排序,微信朋友圈图片拖动排序效果,实现九宫格图片拖拽,图像拖拽排序组件插件,小程序实现拖拽图片切换图片位置,图片拖动互换位置,图像拖拽切换位置,九宫格图片组合拖动排序,交换九宫格图片的位置,小程序上传图片后,如何实现拖拽排序功能,小程序怎么实现图片拖拽排序,微信小程序图片上传,九宫格拖拽组件,选择图片并拖动_微信小程序图片拖拽,微信小程序长按拖拽排序,图像的拖拽移动,多图拖拽排序功能,实现九宫

✅ 精选推荐文章 4455

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

C++的友元函数和友元类

6.C++的友元函数和友元类 1.什么是友元函数 1.1、外部函数访问类内成员 (1)写一个Person类,内部有private、protected、public的三类访问权限的成员 (2)写一个外部函数disp_info来打印这三类成员 (3)代码实战 (4)总结:可以访问public的,但是protected和private的无法访问 (5)想办法:除非把disp_info挪到Person类内部成为成员函数,否则没办法 1.2、友元函数的引入 (1)将外部函数disp_info声明为Person类的友元

weixin_44705391的博客 764

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

C++友元函数和友元类!

标题看起来有点拗口,但是却很好的解释了,这个友元函数定义和声明的状态?闲话少说,直接看代码public://构造函数public://将show()声明为类Student的友元函数private:int m_age;//非成员函数cout<<pstu->m_name<<"的年龄是 "<<pstu->m_age<<",成绩是 "<<pstu->m_score<<endl;Student stu("小明", 15, 90.6);show(&stu);//调用友元函数。

WE_BIG的博客 730

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

【牛客网】—— 友元函数和友元类

今天在牛客网刷题的时候遇到这样一个题,和大家分享一下 这道题我做错了,看完解析之后还是有些似懂非懂,于是去查看了一些友元函数和友元类的相关资料,给大家分享一下,首先我们先来分析一下这个题: A:在C++中友元函数是独立于当前类的外部函数 B:一个友元函数可以同时定义为两个类的友元函数 C:友元函数既可以在类的内部,也可以在类的外部定义; D:在外部定义友元函数时,不必加关键字friend 友...

chenxiyuehh的博客 2325

c语言的友元函数的用法,C++友元函数和友元类概念解析

一、友元函数友元函数是一种特殊的函数,它需要在类体内进行说明,可以访问类的私有成员和保护成员,但又不是类的成员函数。友元函数的说明如下:friend 数据类型函数名(参数)其中,friend是说明友元函数的关键字,友元声明可以出现在类中的任何地方。通常,将友元声明成组地放在类定义的开始或结尾是个好主意。归纳起来,友元函数是一种能够访问类中私有成员的非类成员函数,友元函数在定义上和调用上与普通函数...

weixin_29596051的博客 2020
上一篇: Linux 学习笔记 (8) —— tty,ulimit -a
下一篇: etc —— (1)
Candyerer
博客等级 码龄7年 20粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值