友元(frend)机制允许一个类将对其非公有成员(包括私有成员和保护成员)的访问权授予指定的函数或者类,友元的声明以friend开始,它只能出现在类定义的内部,友元声明可以出现在类中的任何地方。

1.友元函数

友元函数是指某些虽然不是类成员函数却能够访问类的所有成员的函数。类授予它的友元特别的访问权,这样该友元函数就能访问到类中的所有成员。友元函数可以在类内实现也可以在类外实现。

友员函数不含this指针,所以友元函数是类函数,不是成员函数。而类函数不能直接访问成员变量,必须通过具体对象去访问。

2.友元类

友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的隐藏信息(private,protected)。当希望一个类可以存取另一个类的私有成员时,可以将该类声明为另一类的友元类。

关于友元类的注意事项:

(1) 友元关系不能被继承。

(2) 友元关系是单向的,不具有交换性。若类B是类A的友元,类A不一定是类B的友元,要看在类中是否有相应的声明。

(3) 友元关系不具有传递性。若类B是类A的友元,类C是B的友元,类C不一定是类A的友元,同样要看类中是否有相应的申明。

【C/C++】友元函数和友元类相关推荐

  1. C++ 笔记(30)— 友元函数与友元类

    我们知道类的私有成员只能在类的成员函数内部访问,如果想在别处访问对象的私有成员,只能通过类提供的接口(成员函数)间接地进行.这固然能够带来数据隐藏的好处,利于将来程序的扩充,但也会增加程序书写的麻烦. ...

  2. C++友元函数和友元类(C++ friend)详解

    在看VISP视觉库的时候遇到友元函数: Friends void swap (vpDetectorAprilTag &o1, vpDetectorAprilTag &o2) 在定义一个 ...

  3. 模板类中使用友元函数的方式,派生类友元函数对基类的成员使用情况

    在一般友元函数的前面加上 template<typename T),注意在函数的声明和定义处都要加这个模板 例如: //模板类,长方体类 template <typename Elemen ...

  4. c++友元函数与友元类

    友元函数和友元类的需要: 类具有封装和信息隐藏的特性.只有类的成员函数才能访问类的私有成员,程序中的其他函数是无法访问私有成员的.非成员函数可以访问类中的公有成员,但是如果将数据成员都定义为公有的,这 ...

  5. C++友元函数和友元类(一)

    在 C++ 中,一个类中可以有 public.protected.private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员.现在,我们 ...

  6. friend之友元函数和友元类

    // friend_func.cpp : Defines the entry point for the console application. 写一个函数求两个点的中点 //友元函数可以访问类的私 ...

  7. C++语言基础(15)-友元函数和友元类

    一个类中可以有 public.protected.private 三种属性的成员,通过对象可以访问 public 成员,只有本类中的函数可以访问本类的 private 成员.现在,我们来介绍一种例外情 ...

  8. C++ 友元(友元函数和友元类)

    友元的作用:提高了程序的运行效率(使得普通函数可以直接访问类的保护数据,避免了类成员函数的频繁调用,即减少了类型检查和安全性检查等都需要时间开销),但它破坏了类的封装性和隐藏性,使得非成员函数可以访问 ...

  9. C++:友元(非成员友元函数、成员友元函数、友元类)

    3.8  友元:友元函数和友元类 友元函数 :既可以是不属于任何类的非成员函数,也可以是另一个类的成员函数,统称为友元函数.友元函数不是当前类的成员函数,而是独立于类的外部函数,但它可以访问该类所有的 ...

  10. c++远征之模板篇——友元函数、友元类

    以下内容源于慕课网的学习整理,如有侵权,请告知删除. 一.友元函数 1.分类 全局函数-->友元全局函数 成员函数-->友元成员函数 2.关键字friend 友元全局函数 如下,利用fri ...

最新文章

  1. Linux 文件大小跟踪命令
  2. i2s传输中左右声道数据格式
  3. 2015年北京国电通面试题
  4. linux捕捉信号sigint失败,为shell布置陷阱:trap捕捉信号方法论
  5. C# 分割字符串方法
  6. 均方根误差有没有单位_1千万年仅误差一秒,这台钟直接影响北斗卫星的导航定位精度...
  7. FPGA不积跬步(目录篇)
  8. 【剑指offer】调整数组顺序使奇数位于偶数前面
  9. 实现web版用户注册(可以上传头像)
  10. anroid Remote Service 使用注意事项
  11. 数据介绍 | 长序列归一化植被指数NDVI
  12. 编译器优化:何为SLP矢量化
  13. Chrome OS:“比 Linux 更好的 Linux”,这样你就可以忘记 Windows
  14. 【操作系统】GPT和MBR分区的区别
  15. java 变量监听_java main函数里面的变量i怎么获取addActionListener监听里jtf_username.getText()的值?...
  16. 北京工商银行业务分析
  17. linux三剑客-sed命令的学习笔记
  18. 数组——sort排序、reverse倒序
  19. 保监会:大数据对保险业改革创新及保险监管影响研究
  20. 问题描述:分布式防火墙能管控东西向的流量,是否对进入虚拟机的所有流量都能够管控,例如外部访问虚拟机的流量。因为我现在的防火墙默认策略是允许,我像知道如果我默认策略改成阻止,外部流量会不会阻止

热门文章

  1. 作业3_interview_傅志阳_1101210634
  2. 荷兰研制出世界最小U盘:长度不到2厘米
  3. java 自己写一个模板_写一个java生成模板
  4. 蓝桥杯 ADV-212 算法提高 3-1课后习题2
  5. 【iOS】使用SQLite3的时候Swift3.、XCode8报错:Unsupported architecture - 'arm/arch.h'file not found - Could not
  6. python实现文件编码转换_Python实现批量转换文件编码的方法
  7. k8s 安装_二进制安装k8s集群总结
  8. San 3.7.3 发布,百度开源的 MVVM 组件框架
  9. Ubuntu把家目录文件夹名称改为英文
  10. CentOS 7下使用chkconfig添加的服务无法使用/etc/profile里面的环境变量