友元类

C++友元函数/友元类 (1)在类中用friend关键字去声明函数/类,则这个函数/类就会变成友元函数/友元类;(2)友元函数/友元类的声明位置没有要求,可以在private、protected、public权限区,效果都是一样的;(3)友元函数/友元类是单向的,A在B类中被声明为友元函数/友元类,表示A是B的友元函数/友元类,但B不是A的友元函数/友元类;(4)友元函数/友元类具有和类成员一样的权限,可以访问protected和private权限的成员,但不是类的成员; 阅读详情
class TV
{
public:
    friend class Remote;                     ----1,
    void setTVvalue(){state = 0;}
private:
    int state;
    int volume;
    int maxchannel;
};
class Remote
{
private:
    int mode;
public:
    void changeTVvalue(TV & t){t.state = 1;}  // if no 1,../Chapt9.cpp:18:6: error: ‘int TV::state’ is private../Chapt9.cpp:27:31: error: within this context
};
int main()

{

    Remote a;
    TV b;
    a.changeTVvalue(b);

    return 0;

}


gcc -S Chapt9.c  //error 

gcc -S test.c        //

gcc -S Chapt9.cpp -lstdc++  //ok

g++ -S Chapt9.cpp

    .file    "Chapt9.cpp"
    .section    .text._ZN6Remote13changeTVvalueER2TV,"axG",@progbits,_ZN6Remote13changeTVvalueER2TV,comdat
    .align 2
    .weak    _ZN6Remote13changeTVvalueER2TV
    .type    _ZN6Remote13changeTVvalueER2TV, @function
_ZN6Remote13changeTVvalueER2TV:
.LFB1:
    .cfi_startproc
    pushl    %ebp
    .cfi_def_cfa_offset 8
    .cfi_offset 5, -8
    movl    %esp, %ebp
    .cfi_def_cfa_register 5
    movl    12(%ebp), %eax
    movl    $1, (%eax)
    popl    %ebp
    .cfi_def_cfa 4, 4
    .cfi_restore 5
    ret
    .cfi_endproc
.LFE1:
    .size    _ZN6Remote13changeTVvalueER2TV, .-_ZN6Remote13changeTVvalueER2TV
    .text
    .globl    main
    .type    main, @function
main:
.LFB2:
    .cfi_startproc
    pushl    %ebp
    .cfi_def_cfa_offset 8
    .cfi_offset 5, -8
    movl    %esp, %ebp
    .cfi_def_cfa_register 5
    andl    $-16, %esp
    subl    $32, %esp
    leal    16(%esp), %eax
    movl    %eax, 4(%esp)
    leal    28(%esp), %eax
    movl    %eax, (%esp)
    call    _ZN6Remote13changeTVvalueER2TV
    movl    $0, %eax
    leave
    .cfi_restore 5
    .cfi_def_cfa 4, 4
    ret
    .cfi_endproc
.LFE2:
    .size    main, .-main
    .ident    "GCC: (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3"
    .section    .note.GNU-stack,"",@progbits



微信小程序、H5微信公众号网页JSAPI:解决报错requestMerchantTransfer:fail:internal error(使用wx.requestMerchantTransfer错误) 如何解决requestMerchantTransfer:fail:internal error,微信小程序wx.requestMerchantTransfer报错,微信公众号H5网页使用jssdk调用wx.requestMerchantTransfer报错,JSAPI调起用户确认收款报错errMsg:“requestMerchantTransfer:fail:internal error“,微信小程序/H5 调起确认收款界面,JSAPI调起用户确认收款,微信公众号(H5),用户发起提现,商家转账给用户,用户 阅读详情

相关推荐

Ubuntu 24.04 安装 ROS2 Jazzy

手把手教你在Ubuntu24.04上安装JazzyROS2操作系统。

weixin_74185504的博客 1万+

【C++】友元类 ( 友元类简介 | 友元类声明 | 友元类单向性 | 友元类继承性 | 友元类作用 | 友元类和友元函数由来 | Java 反射机制 | C / C++ 编译过程 )

一、友元类简介 1、友元类引入 2、友元类声明 3、友元类单向性 4、友元类继承性 5、友元类作用 二、友元类和友元函数由来 1、友元类和友元函数引入 2、Java 反射机制 3、C / C++ 编译过程 三、友元类代码示例

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 6724

树莓派4B学习笔记一

树莓派4b烧录Ubuntu20.04&&配置Ubuntu桌面

m0_55202222的博客 3639

【C++】友元类

在 C++ 中,友元类(Friend Class)是指允许其他类访问它的私有成员和保护成员的类。友元类并不继承或派生自另一个类,它通过friend关键字声明,使得指定的类能够访问另一个类的私有或受保护的数据成员和成员函数。打破封装性:友元类允许不同的类直接共享数据,可以让一些类能够直接操作其他类的私有数据。简化代码:在某些场合,友元类可以减少接口的复杂度,使得类之间的操作更直接、高效。实现复杂操作:如重载运算符等功能时,友元类可以访问并修改私有成员,提供更灵活的操作。

Guiat的博客 1797

Flowable前端可视化配置动态审批人:告别硬编码,实现部门领导、项目经理自动分配

本文详细介绍了Flowable前端可视化配置动态审批人的全栈解决方案,通过表达式分配、监听器分配等动态审批人机制,实现从硬编码到智能分配的转变。文章提供了前端扩展bpmn-js设计器、后端动态解析实现方案及性能优化建议,帮助企业应对组织架构变动,提升审批流程的灵活性和效率。

weixin_30352645的博客 473

FPGA 上的 YOLOv8 实时目标检测:从模型优化到硬件加速全解析

本文全面解析了将YOLOv8目标检测模型部署到FPGA进行硬件加速的完整流程。通过模型裁剪、混合精度量化等优化手段,结合HLS设计专用计算引擎与数据流,实现了高能效比的实时推理。文章深入探讨了软硬协同部署、性能调试与优化技巧,为追求极致实时性与低功耗的边缘AI应用提供了从算法到硬件的实战指南。

weixin_29031161的博客 605

【类模板中的友元】友元类

如果我们只需要让类模板的一个实例访问另一个类的内部成员,那么我们可以只指定其特定的类型成为友元类。引入的新标准,注意这里我们的参数必须是在类类模板的,而不是一般类,如。的类型不是类类型,因此友元类的定义对其无效,编译器会自动忽略。如果我们想让类模板全部类型都成为另一个类模板的友元类呢?的所有成员(成员变量,成员函数等),而不管这些成员在类。等,并且必须在类内使用友元内,超出了类内,也就无效了。的内部成员,而其他类型的实例化将被拒绝访问。是无效的,因为其作用域超出了类内。来声明,这是符合友元类语法的。

Antonio915的博客 1268

手把手教你用运放搭建方波三角波发生器(附Multisim仿真文件)

本文详细解析了使用运算放大器搭建方波和三角波发生器的核心原理与设计步骤。通过剖析迟滞比较器与积分器的联动机制,指导读者进行电路设计、元件选型,并借助Multisim仿真进行参数调优与波形优化。文章提供了从理论分析、虚拟仿真到实物焊接调试的完整实践指南,并附有仿真文件,帮助硬件爱好者与初学者深入掌握这一经典模拟电路设计。

weixin_29165725的博客 639

为什么要使用友元,友元类

这里写目录标题为什么要使用友元友元的两种使用形式友元类使用注意 为什么要使用友元 C++是面向对象的,目的之一:封装 封装: 优点之一,就是安全。 缺点:在某些特殊的场合,不是很方便。 华为与IBM 40亿的咨询故事 IBM需要对华为各级部门做深度咨询分析, 为了提高咨询效率,由任正非直接授权,直接获取各部门的所有权限。 使用前提: 某个类需要实现某种功能,但是这个类自身,因为各种原因,无法自己实现。 需要借助于“外力”才能实现。 友元的两种使用形式 友元函数: 使用全局函数作为友元函数 需求: 计算机

m0_46376834的博客 1675

画了多年板子才搞懂:Allegro内电层负片连接,Thermal Relief和Anti-Pad避坑全解析

本文深入解析Allegro内电层设计中Thermal Relief与Anti-Pad的关键技术要点,帮助工程师避免常见设计陷阱。通过六层板实战案例,详细阐述负片连接逻辑、热风焊盘参数设计及隔离盘优化策略,提升PCB设计的可靠性与EMI性能。

weixin_28731223的博客 265

资产会计 Transaction Type 与业务交易的 Post to Affiliated Company 不一致导致的 AAPO176:成因剖析与修复指引

本文解析了SAP资产会计中常见的"AAPO176"错误提示,指出当交易类型(TType)与业务交易(Business Transaction)的"关联公司过账"(Post to Affiliated Company)标志不一致时,系统会拒绝过账。作者详细说明了该标志的作用机制,并提供了四种解决方案:修正交易类型使用、匹配正确的业务交易、调整系统配置或建立映射关系。文章还通过实际案例展示了配置错误对集团合并报表的影响,并附带了用于检查配置一致性的ABAP脚本。该错误通常

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 395

C++友元函数和友元类

友元为什么要友元?怎么用友元?友元函数友元类友元类的指针问题个人感想 为什么要友元? 为了偷懒,程序员可以少写一点代码,并且函数调用频繁的话还可以减少时间开销 怎么用友元? 友元函数 在类申明里面,给函数加上friend就可以了 #include <iostream> using namespace std; //先定义一个类 class BABA() { private: int age; public: //用来改变爸爸的年龄 void setage(int i); //友

skywf的博客 2265

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

友元类的使用方法

学习友元函数之后,我们再来看友元类,也是一样的道理和使用方法,如果把一个类A声明为另一个类B的友元类,则类A中的所有成员函数都可以访问B类中的成员。使用方法也一样,在类B中进行声明即可。 还是上一节的程序功能,我们稍作更改: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

m0_60226024的博客 2854

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

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

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

2302_80281315的博客 1063

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

友元函数、友元类

友元函数 友元函数是可以直接访问类的私有成员的非成员函数。它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend,其格式如下:friend 类型 函数名(形式参数);友元函数的声明可以放在类的私有部分,也可以放在公有部分,它们是没有区别的,都说明是该类的一个友元函数。一个函数可以是多个类的友元函数,只需要在各个类中分别声明。友元函数的调用与一般函数的调用方式和原理一致。 class Date { //友元函数在类内部声明 f

qq_41078889的博客 1091

什么是友元类

======================什么是友元类=======================       当一个类B成为了另外一个类A的“朋友”时,那么类A的私有和保护的数据成员就可以被类B访问。我们就把类B叫做类A的友元。 =======================友元类能做什么=======================       友元类可以通过自己的方法来

qq_32625545的博客 2605

友元函数,友元类

类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。 友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。 #include <iostream> #include <string> ...

gdut17的博客 497

C++--友元类

2014-07-0414:02:53 C++复习时碰到的友元类,由于上课时老师没有讲,所以在这里做一个补充。 看到一位仁兄总结的非常好,在此转载:http://www.cnblogs.com/uniqueliu/archive/2011/08/02/2125590.html (1) 友元关系不能被继承。 (2) 友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一...

dingdi3021的博客 138

C 友元函数与友元类

C++友元函数与友元类 在C++中,一个类中可以有public、protected、private三种属性的成员,通过对象可以访问public成员,只有本类中的函数可以访问本类的private成员。所以,通过友元(friend)能够打破封装性。借助友元(friend),可以使得其他类中的成员函数以及全局范围内的函数访问当前类的private成员。有时需要定义一些函数,这些函数不是类的一部分,但又...

King逍灬遥 1255
上一篇: 模板类例子
下一篇: dynamic_cast
windowsLearner
博客等级 码龄17年 6粉丝 10原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值