首页 > 编程语言 >C++中的友元函数和友元类&友元的作用及注意事项

C++中的友元函数和友元类&友元的作用及注意事项

时间:2024-11-19 13:15:19浏览次数:3  
标签:友元 函数 私有 成员 C++ 访问 友元类

1. C++中的友元函数和友元类

友元函数

友元函数是指某些虽然不是类成员却能够访问类的所有成员的函数。类授予它的友元特别的访问权。通常,同一个开发者会出于技术和非技术的原因控制类的友元和成员函数,否则在更新类时,还需要征得其他部分的拥有者的同意。友元函数在定义上和调用上与普通函数一样,但它需要在类体内进行说明,为了与该类的成员函数加以区别,在说明时前面要加以关键字“friend”。

友元类

友元类是一个可以访问另一个类的私有和保护成员的类。如果一个类将另一个类声明为友元类,那么友元类的所有成员函数都可以访问该类的私有成员和保护成员。这种机制允许不同类之间互相访问其私有数据,从而实现了更高的灵活性和效率。

2. 友元的作用及注意事项

友元的作用

友元的主要作用是允许一个类或函数访问另一个类的私有成员和保护成员,从而提高了程序的运行效率和灵活性。通过使用友元,可以避免在类的公有接口中暴露过多的实现细节,同时仍然允许外部类或函数访问必要的私有数据。

注意事项

  1. 友元关系的声明

    • 友元函数的声明可以在目标类的任何位置,不受访问限定符限制。
    • 友元类的声明也需要使用“friend”关键字,并指出哪个类是其友元类。
  2. 友元关系的单向性

    • 友元关系是单向的,即如果类B是类A的友元,那么类A不一定是类B的友元。这种单向性使得友元关系更加灵活和可控。
  3. 友元关系的非传递性

    • 如果类B是类A的友元,类C是类B的友元,那么类C不一定是类A的友元。这种非传递性避免了友元关系的过度扩散和滥用。
  4. 友元函数的调用

    • 友元函数不是类的成员函数,因此它不能通过类的对象或指针来调用。相反,它应该像普通函数一样被调用,但其参数可以包括类的对象或指针,以便访问类的私有成员。
  5. 友元函数的定义

    • 友元函数的定义与普通函数相同,但它可以访问类的私有成员。由于友元函数不是类的成员函数,因此在定义时不需要使用“::”作用域运算符来指定它属于哪个类。
  6. 友元类的成员函数

    • 友元类的所有成员函数都是另一个类的友元函数,因此它们都可以访问该类的私有成员和保护成员。这种机制使得友元类可以像类的成员函数一样访问私有数据,但同时又保持了类的封装性和隐藏性。
  7. 避免过度使用友元

    • 虽然友元可以提高程序的灵活性和效率,但过度使用友元会破坏类的封装性和隐藏性,使得类的内部实现细节暴露给外部代码。因此,在使用友元时应该谨慎考虑其必要性和合理性。

综上所述,C++中的友元函数和友元类是一种强大的机制,允许类或函数访问另一个类的私有成员和保护成员。然而,在使用这种机制时需要遵守一定的规则和注意事项,以确保程序的正确性、可读性和可维护性。

标签:友元,函数,私有,成员,C++,访问,友元类
From: https://blog.csdn.net/rujiran/article/details/143882587

相关文章

  • 打卡信奥刷题(264)用C++信奥P2010[普及组/提高] [NOIP2016 普及组] 回文日期
    [NOIP2016普及组]回文日期题目背景NOIP2016普及组T2题目描述在日常生活中,通过年、月、日这三个要素可以表示出一个唯一确定的日期。牛牛习惯用888位数字表示一......
  • 详解 C++ 的内存序模型
    详解C++的内存序模型C++提供了内存序模型来控制多线程程序中不同线程对共享内存的访问顺序。最常用的是顺序一致性内存模型(memory_order_seq_cst),但它也提供了其他模型(如memory_order_relaxed)以优化性能。一、顺序一致性内存模型(memory_order_seq_cst)定义顺序一致性......
  • Python 基于C++ & python的键盘记录器发送指定邮箱
    Python基于C++&python的键盘记录器发送指定邮箱1.简介:采用c++与python语言相结合的方法,c++负责采集键盘操作记录到文本,python脚本实时将文本内容发送至指定邮箱。资源文件已打包,可设置开机自启动。2.kb.cpp键盘记录实现代码:#include<iostream>#include<stdio.h>......
  • 实现简易计算器 网格布局 QT环境 纯代码C++实现
    问题:通过代码完成一个10以内加减法计算器。不需要自适应,界面固定360*350。"="按钮90*140,其它按钮90*70。参考样式#defineDEFULT_BUTTON_STYLE"\QPushButton{\color:#000000;\border:1pxsolid#AAAAAA;\border-radius:0;\background-color:#FFFFFF;......
  • (分享源码)计算机毕业设计必看必学 上万套实战教程手把手教学JAVA、PHP,node.js,C++、pyth
     摘 要21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认知向理性认知提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存储达到准确、快速、完善,并能提高工作管理效率,促进其发展。论文主要是对医疗门诊管理......
  • (分享源码)计算机毕业设计必看必学 上万套实战教程手把手教学JAVA、PHP,node.js,C++、pyth
     摘 要随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,校园跳蚤市场管理系统被用户普遍使用,为方便用户能够可以随时进行校园跳蚤市场管理系统的数据信息管理,特开发了基于spri......
  • 解锁C++第二大特性,代码也玩“父子”游戏——继承
    解锁C++第二大特性,代码也玩“父子”游戏——继承文章目录解锁C++第二大特性,代码也玩“父子”游戏——继承前言——封装封装的本质是什么?封装的总结一、继承的基本概念1.1继承的定义二、继承的三种方式2.1私有不可见2.2公有、保护的继承2.3基类和派生类对象赋值......
  • C++---智能指针和内存泄露
    文章目录智能指针**发展历史****C++11前****C++11引入的智能指针****智能指针的使用及原理**shared_ptr的循环引用**循环引用的场景**通过weak_ptr来解决shared_ptr的循环引用智能指针的模拟实现内存泄露内存泄露的概念和危害内存泄露分类如何检测内存泄露如何避免内存......
  • C++ -class -默认成员函数
    博客主页:【夜泉_ly】本文专栏:【C++】欢迎点赞......
  • C++ 虚函数探讨
    文章目录1.虚函数表指针位置分析1.1、虚函数表指针的定义1.2、虚函数表指针的位置2.父类虚函数的手动调用2.1通过虚函数表查看虚函数地址2.2通过虚函数表手动调用虚函数3.继承关系下子类的虚函数手动调用3.1通过虚函数表查看虚函数的地址3.2通过虚函数表手动调用......