分析C++中友元实现数据共享

C++ 友元(共享数据) 目录 一、    为什么用友元 二、    何时用友元 三、    友元优缺点 四、    友元函数的分类:                 A、友元普通函数                 B、友元成员函数                 C、友元类(这个类中的所有成员函数都可以成员友元函数) 五、友元函数和类的成员函数的区别 -------------------- 阅读详情

   在C++中,为什么要引入友元的概念呢?主要是为了实现数据共享,提高程序效率,方式就是避免过多的函数调用。请看以下实例:

#include<iostream.h>
#include<math.h>
class Point
{
public:
 Point(int xx,int yy)
 {
  X=xx;
  Y=yy;
 }
 int GetX()
 {
  return X;
 }
 int GetY()
 {
  return Y;
 }
 friend float fDist(Point &a,Point &b);//友元函数声明
private:
 int X,Y;
};
float fDist(Point &p1,Point &p2)
{
 double x = double(p1.X - p2.X);//外部函数可以访问类的私有成员
 double y = double(p1.Y - p2.Y);
 return float(sqrt(x*x+y*y));
}
void main()
{
 Point myp1(1,1),myp2(4,5);
 cout<<"The distance is:";
 cout<<fDist(myp1,myp2)<<endl;
}

    从上面代码可以看出,加入我们不使用友元函数,那么该函数就不能使用类里面的私有成员,这样就要调用大量的函数来获取该私有成员,如要获取p1,X,我们要调用GetX(),造成开销。但是如果私有成员结构如果发生变化,友元函数就要随着改变,如果程序比较大型,那改动也比较大,所以使用起来需要权衡好。

    以上是友元函数的情况,当然友元函数也可以在其他类中实现。下面介绍友元类。如在B类中声明A类为他的友元类,那么在B类的成员函数都可以访问A类中的所有私有和保护成员。如下列代码:

#include<iostream.h>
class A
{
 friend class B;//声明B是A的友元,B中可以使用A中所有属性

public:
 void Display()
 {
  cout<<x<<endl;
 }
 int Getx()
 {
  return x;
 }
private:
 int x;
};

class B
{
 
public:
 void Set(int i);
 void Display();
 
private:
  A a;
};
void B::Set(int i)
{
 a.x=i;//可以访问A中的私有成员
}

    最后2点需要注意的:

    一:友元关系是不能传递的。如B是A的友元类,C是B类的友元类,不能说明A和C有任何关系。

    二:友元关系是单向的, B是A的友元类不能说明A也是B的友元类。

 

 

C++类对象共享数据的5种实现方法 C++中类对数据与行为做了封装,使得私有数据成员不能在类体外被访问,同时类对象之间也不能互相访问对方的私有成员,而在有些情况下,数据既需要保持其私有性,又需要其有共享性,以下将给出两种方式的实现。 一、静态成员变量 #include using namespace std; class sample { private: static char m_sA 阅读详情

相关推荐

发票OFD格式转换成PDF

发票OFD格式转换成PDF

Be_insighted的博客 931

关于C++中的友元函数的总结++++++++++++==数据共享的另一种方式static

1.1为什么要使用友元函数 如果类A中的函数要访问类B中的成员(例如智能指针类的实现) 那么类A中该函数要是类B的友元函数 为了其他类的成员函数直接访问该类的私有变量: 即允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数 实际上具体大概有下面两种情况需要使用友元函数 1)运算符重载的某些场合需要使用友元 2)两个类要共享数据的时候 1.2

lusic01的专栏 864

Vitis HLS 学习指南与实践教程

Vitis HLS 学习指南与实践教程摘要:本文系统介绍了AMD Vitis HLS工具及其应用。HLS技术将C/C++代码自动转换为硬件描述语言,显著提升FPGA开发效率(5-10倍)。文章对比了HLS与传统RTL设计的优势,包括抽象级别高、开发周期短、代码重用性强等特点。详细讲解了Vitis HLS工具链的核心功能,包括支持的C/C++特性(如任意精度数据类型)、开发流程(项目创建-代码编写-仿真-综合)以及关键优化技术(流水线、循环展开、数组分割等编译指示)。通过具体代码示例展示了HLS设计方法,为F

weixin_44707118的博客 1401

第七周任务 项目三友元类

/* * Copyright (c) 2013, 烟台大学计算机学院 * All rights reserved. * 文件名称:test.cpp * 作 者:张中华 * 完成日期:2013 年 4 月 16 日

zzh 999

网工实验笔记:SNMP的配置

简单网络管理协议SNMP(Simple Network Management Protocol)是广泛应用于TCP/IP网络的网络管理标准协议。SNMP提供了一种通过运行网络管理软件的中心计算机(即网络管理工作站)来管理设备的方法。

2301_76170756的博客 2114

AI 生成 CAN 通信测试用例实战

本文分享了AI辅助汽车电子测试用例编写的实战经验。通过某车企CAN网络测试项目案例,对比传统方式(需27天)与AI辅助方式(仅5天)的效率差异,展示81%的效率提升。文章详细介绍了从DBC文件提取信号信息的方法,包括DBC文件结构解析、信号定义说明,并提供了完整的Python解析脚本代码,可将信号信息导出为JSON或Excel格式,为后续AI批量生成测试用例奠定基础。

小明的博客 691

10 C++ 友元

C++友元机制摘要 友元(friend)允许外部函数或类访问当前类的私有和保护成员,主要分为友元函数、友元类和友元成员函数三种类型。关键特性包括: 单向非传递:友元关系不可逆且不传递 灵活声明:可在类任意位置声明,不受访问控制符限制 典型应用:运算符重载(如<<)、跨类数据共享、单元测试 优势在于提供高效访问和自然语法,但会破坏封装性。建议优先使用成员函数,仅在必要场景(如流操作符重载)使用友元,并严格限制友元范围。 示例场景:设备控制器(友元类)访问设备温度数据(私有成员)

17208955的博客 1680

海思Hi3516CV610开发实战:在Ubuntu 22.04上从零构建嵌入式Linux开发环境

本文详细介绍了在Ubuntu 22.04上为海思Hi3516CV610开发板搭建嵌入式Linux开发环境的完整流程。从虚拟机配置、系统安装到基础环境设置,提供了实用技巧和常见问题解决方案,帮助开发者高效构建适用于智能视觉处理的开发环境。

weixin_29197699的博客 509

C++ 笔记 友元(面向对象)

友元:使用friend关键字声明的外部函数或外部类,可以直接访问当前类的所有成员(包括 private、protected)。友元是friend声明的外部函数 / 类,可访问类的私有成员;友元全局函数友元成员函数友元类;特点:单向、不传递、不是类成员;优点:灵活高效;破坏封装,谨慎使用。

堇荼如饴风禾尽起~ 380

陷波滤波器设计以及Simulink仿真

离散型陷波滤波器设计以及simulink仿真

hmq252198885的博客 3165

YOLOv8自定义训练:车牌识别全流程(从标注到推理,附可视化代码)

车牌检测全流程实践指南 摘要:本文详细介绍了基于YOLOv8的车牌检测完整实现方案。针对车牌检测中的三大难点(小目标、多角度、光照变化),提供了从数据准备到模型部署的全流程解决方案。重点包括:1)数据采集与标注规范;2)针对小目标的YOLOv8模型优化配置;3)K-means锚框聚类方法;4)训练参数调优策略。通过实际验证,该方法可获得95%以上的检测准确率,并附有完整的代码实现和可视化工具,便于开发者快速复现应用。 (字数:149字)

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 849

【高性能C++设计必修课】:如何用模板友元实现高效的数据封装与跨类协作

掌握C++模板友元(template friends)实现高效数据封装与跨类协作的方法,解决泛型编程中的访问权限难题。适用于容器与算法解耦、智能指针等场景,提升代码复用性与性能,值得收藏。

ByteVein的博客 268

Camera HAL 多线程管理详解

本文摘要:Camera HAL 采用双线程管理体系(CAMX与CHI-CDK)实现高效并发处理。CAMX ThreadManager负责HAL内部及框架交互,采用线程池+任务调度机制,将节点处理、回调等封装为Job异步执行;CHI ThreadManager专注于OEM定制逻辑,支持异步/同步两种作业模式。两套系统通过函数指针解耦但共享地址空间,共同实现硬件流水线的强实时性。文章详细解析了两者的类层次架构、核心数据结构及典型应用场景,并提供了问题排查的代码切入点,为Camera HAL开发与性能优化提供指导

DU_YULIN的博客 55

友元函数

1.友元的作用是什么? 友元提供了在不同类的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。通过友元,一个普通函数或另一个类中的成员函数可以访问类中的私有成员和保护成员。C++中的友元为封装隐藏这堵不透明的墙开了一个小孔,外界可以通过这个小孔窥视内部的秘密。 友元的正确使用能提高程序的运行效率,但破坏了类的封装性和数据的隐蔽性,导致程序可维护性变差,因此一定要谨慎使用。

WINCOL的专栏 1360

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

友元的作用

1.友元的作用是什么? 友元提供了在不同类的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。通过友元,一个普通函数或另一个类中的成员函数可以访问类中的私有成员和保护成员。C++中的友元为封装隐藏这堵不透明的墙开了一个小孔,外界可以通过这个小孔窥视内部的秘密。 友元的正确使用能提高程序的运行效率,但破坏了类的封装性和数据的隐蔽性,导致程序可维护性变差,因此一定要谨慎使用。 作

chen825919148的专栏 5752

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C++中的友元函数的总结

(1)友元函数: 1)C++中引入友元函数,是为在该类中提供一个对外(除了他自己意外)访问的窗口; 2)这个友元函数他不属于该类的成员函数,他是定义在类外的普通函数,只是在类中声明该函数可以直接访问类中的private或者protected成员。 1 2 使用友元函数声明的一般形式: friend &lt;返回类型&gt; &lt;函数名&gt; (&lt;参数列表&gt;); 1 使用友元函...

雪雪 599

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

C++基础知识友元friend、友元函数和友元类

为了在类之间进行数据共享时,提高效率,C++引入了友元的概念。友元主要有三个方面的应用:将普通函数声明为类的友元函数;将一个类声明为其他类的友元类;将一个类中的成员函数声明为其他类的友元函数。下面分别介绍。1、普通函数声明为友元函数将一个普通函数,声明为某个类的友元函数后(在函数声明前加上“friend”关键字),该函数就可以访问类中的任何成员。观察下面的代码:#include&lt;iostre...

constantin_的博客 431

什么场景下会用到友元函数?

什么场景下会用到友元函数,友元函数的作用是什么,友元函数和普通成员函数又有怎样的区别?这都是C++当中的一些基本概念,掌握好了无论是维护项目还是做项目开发都大有裨益。本文主要浅谈一下C++中的友元函数,如有不足或者疏漏之处,烦请读者朋友及时指出,大家一起改进。 一、概述 友元函数在实现类之间数据共享时,可以减少系统开销,调高效率。比如:类A中的函数需要访问类B中的成员,那么类A中该函数要是类B的

syeming的编程专栏 7754

友元函数和友元类(friend)

关键字 friend(破坏了类的封装性) class MyFriend { //友元类(破坏了类的封装性) friend class MyClass; public: MyFriend(int a=0, int b=0) { m_a = a; m_b = b; } //友元函数通过对象参数访问私有数据成员 friend void FriendFun(MyFriend *f...

代码黑洞 1066

友元函数 和 友元类 讲解和使用

关于C++中的友元函数的总结 1.友元函数的简单介绍 1.1为什么要使用友元函数 在实现类之间数据共享时,减少系统开销,提高效率。如果类A中的函数要访问类B中的成员(例如:智能指针类的实现),那么类A中该函数要是类B的友元函数。具体来说:为了 使其他类的成员函数直接访问该类的私有变量。即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数。 实际上具体大概有

我是guyue,guyue就是我O(∩_∩)O 1368

C++友元函数的分析和理解

参考链接 [url]http://blog.youkuaiyun.com/insistgogo/article/details/6608672[/url] [url]http://www.cnblogs.com/fzhe/archive/2013/01/05/2846808.html[/url] [b]1、为什么要引入友元函数:在实现类之间数据共享时,减少系统开销,提高效率[/b] 具体来...

Jacky_Dai的专栏 565

C++基础知识复习与总结(6)---友元friend、友元函数和友元类

为了在类之间进行数据共享时,提高效率,C++引入了友元的概念。友元主要有三个方面的应用: 将普通函数声明为类的友元函数; 将一个类声明为其他类的友元类; 将一个类中的成员函数声明为其他类的友元函数。 下面分别介绍。 1、普通函数声明为友元函数 将一个普通函数,声明为某个类的友元函数后(在函数声明前加上“friend”关键字),该函数就可以访问类中的任何成员。观察下面的代码: ...

Hello~~~ 529

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

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

chenxiyuehh的博客 2325

友元函数和友元类

在类中,有public和private,在实际调用时会有访问限制,友元函数可以用不属于这个类的非成员函数来访问一个类中的私有成员。1、用普通函数来作为友元函数:2、用另一个类的成员函数做友元函数:3、友元类:     类也可以声明为另一个类的友元类:                         class A                        {friend B;}即B是A的友元类...

ukston_C的博客 582

友元函数分析

一句话理解: 友员是一种“权限”,我把A设置为我的friend (权限任意public,private),A就可以在类外对我进行访问; A访问朋友,通过的媒介是 引用 & 。 场景:使其他类的成员函数直接访问该类的私有变量。即:允许外面的类或函数去访问类的私有变量和保护变量,从而使两个类共享同一函数,数据共享。 优点:够提高效率,表达简单、清晰。 缺点:友元函

small house 319
上一篇: const修饰对象,成员函数,成员变量
下一篇: MySpace&FaceBook和我的论文
burningcpu
博客等级 码龄20年 13粉丝 83原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值