概述

我们知道,C++的类具有封装和信息隐藏的特性。一般情况下,我们会封装public的成员函数供用户调用,而将成员变量设置为private或protected。但在一些比较复杂的业务情况下,可能需要去访问对象中大量的private或protected成员变量。如果为这些private或protected成员变量都封装public成员函数,无疑是比较麻烦的,有时候还会影响程序的执行效率。此时,友元函数就派上了用场。

这就好比我们的房间安装了一个指纹锁,陌生人是无法进入房间内部的。但我们的好朋友有时候需要去一下房间,此时,可以把好朋友的指纹也录入指纹锁里面。这样,好朋友就可以顺利进入房间了。

基本规则

1、一个类的友元可以是函数(称为友元函数),也可以是另一个类(称为友元类)。

2、要为一个类声明友元时,需要在类声明中友元函数或友元类的前面加上friend关键字。类中友元的位置没有关系,放在public、protected和private均可。

class CBase
{friend class CFriend;                    // 友元类friend void FriendFunc(CBase &base);     // 友元函数
public:CBase();private:void Show();protected:std::string m_strText;private:int m_nNumber;
};CBase::CBase() : m_strText("CSDN"), m_nNumber(66)
{NU

11 友元函数的使用大全相关推荐

  1. C++——运算符的重载---以成员函数方式重载---以友元函数方式重载

    一.运算符的重载 1.运算符的重载 允许把标准运算符(如+ - * /等运算符)应用于自定义数据类型的对象,可以提高程序的可读性,运算符的重载本质上还是函数重载.运算符仅仅是语法上的方便,它是另一种函 ...

  2. 练习友元函数,有元类,快排和全排列问题

    写了一小段代码: 练习一下友元类和友元函数的声明和使用: 练习一下最简单的快排算法: 练习一下递归的方法处理全排列问题. 代码: 1 #include <stdlib.h> 2 #incl ...

  3. 友元实例:友元类及友元函数

    学习了c++这么久,一直没有对友元进行了解,据说友元不是特别好用(据说,不是我说的),因此直到今天才去了解.其实友元确实不是很常用,但友元功能确实很实用,它不但能够释放类中的非公有成员,同时还能保证了 ...

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

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

  5. 类模板,多种类型的类模板,自定义类模板,类模板的默认类型,数组的模板实现,友元和类模板,友元函数,类模板与静态变量,类模板与普通类之间互相继承,类模板作为模板参数,类嵌套,类模板嵌套,类包装器

     1.第一个最简单的类模板案例 #include "mainwindow.h" #include <QApplication> #include <QPush ...

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

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

  7. c++友元函数及运算符重载

     c++的类和java的类机制着实不大一样,不仅仅是语法,还包括一些特殊的东西,如c++用友元函数来破坏类的封装性,使得外界(友元函数体)可以访问类的私有属性,而java呢,java则可以通过反射机制 ...

  8. 初入c++(三)this指针,友元函数,友元类

    1.c++中的this指针 指向当前对象,通过它可以访问当前对象的所有成员.当前对象就是正在使用的对象: 在类的内部使用,可以访问所有的成员,public,private,protect this只能 ...

  9. C++友元函数、友元类与类模板

    文章目录 一.普通函数声明为友元涵数 二.声明类的成员函数为其他类的友元函数 三.类模板的使用 一.普通函数声明为友元涵数 #include <iostream> using namesp ...

最新文章

  1. 中文latex去掉图片描述
  2. Warning: Permanently added the RSA host key for IP address '192.30.253.113' to the list of known hos
  3. 贝叶斯定理与贝叶斯估计
  4. 16 --删除排序数组中的重复项
  5. python Authentication plugin ‘caching_sha2_password‘ is not supp
  6. 25+ 个单色背景的网页设计实例
  7. Head First设计模式读书笔记六 第七章上 适配器模式
  8. centos桌面系统使用记录
  9. ofdma技术_数字化领航 | Wi-Fi 6 关键技术剖析
  10. 树莓派安装TeamViewer
  11. DSP技术:基于TMS320F28027芯片的温度测量系统
  12. 国军标要求的产品“六性”到底是什么?
  13. 数学之美:余弦定理和新闻分类
  14. 简单处理点击EditText外部区域关闭软键盘
  15. Bootstrap(三) 网格系统
  16. 众里寻它千百度,原来它在...MSDN处
  17. 如何表示Unicode的字符?
  18. download and build swe
  19. true在php中代表,true是什么意思
  20. 菜鸟与 cef 的邂逅之旅(三):Cef3 中 C++ 与 JavaScript 的互相调用

热门文章

  1. Vue.js——PC端和移动端样式适配方案
  2. android qq右上加号,仿QQ空间点击加号弹出菜单特效
  3. Pycharm搜索快捷键和搜狗快捷键冲突
  4. 搭建一台学习主机 乔思伯U1-Plus
  5. Oppo手机往电脑里拷贝照片时DCIM文件夹里照片显示不全的解决方案
  6. 微信小程序从后台的SQL SERVER取数据
  7. 域名和IP地址的联系
  8. 原生js制作简易DOM拾色器实例教程
  9. 如何在opencv中实现不同程度的锐化
  10. 王者荣耀无双铭文数量计算