这里写目录标题

  • 为什么要使用友元
      • 友元的两种使用形式
    • 友元类
      • 使用注意

为什么要使用友元

C++是面向对象的,目的之一:封装

封装:
优点之一,就是安全。
缺点:在某些特殊的场合,不是很方便。

华为与IBM 40亿的咨询故事


IBM需要对华为各级部门做深度咨询分析,
为了提高咨询效率,由任正非直接授权,直接获取各部门的所有权限。

使用前提:
某个类需要实现某种功能,但是这个类自身,因为各种原因,无法自己实现。
需要借助于“外力”才能实现。

友元的两种使用形式

友元函数:
使用全局函数作为友元函数
需求:
计算机和计算机的升级

Computer.h

#pragma once
#include <string>class Computer
{public:Computer();// 使用全局函数作为友元函数friend void upgrade(Computer* computer);std::string description();private:std::string cpu; //CPU芯片
};

Computer.cpp

#include "Computer.h"
#include <sstream>    Computer::Computer()
{cpu = "i7";
}std::string Computer::description()
{std::stringstream  ret;ret << "CPU:" << cpu;return ret.str();
}

main.cpp

#include <stdio.h>
#include <iostream>
#include <Windows.h>#include "Computer.h"void upgrade(Computer* computer) {computer->cpu = "i9";  //直接访问对象的私有数据成员!!!
}int main(void) {Computer shanxing;std::cout << shanxing.description() << std::endl;upgrade(&shanxing);std::cout << shanxing.description() << std::endl;system("pause");return 0;
}

友元类

为什么要使用友元类
一个独立的咨询师, 给其他企业做服务时,这个咨询师作为企业的“友元函数”即可。

一个大型的咨询服务公司,比如IBM(IT事务), 普华永道(会计事务),给其他企业做服务时,使用友元函数就不是很方便了,因为需要设计很多友元函数,不方便。

解决方案:使用“友元类”

友元类的作用
如果把A类作为B类的友元类,
那么A类的所有成员函数【在A类的成员函数内】,就可以直接访问【使用】B类的私有成员。
即,友元类可以直接访问对应类的所有成员!!!

使用注意

友元类,和友元函数,使用friend关键字进行声明即可,与访问权限无关,
所以,可以放在private/pulic/protected任意区域内。

为什么要使用友元,友元类相关推荐

  1. C++知识点13——友元,类的声明

    友元就是允许其他类或函数访问类的非公有成员,打破了类的封装性,友元属性用friend来修饰 1.友元与函数 class friendclass {friend void seeprivatefunc( ...

  2. C++友元(友元函数)

    1.1为何需要友元 我们知道C++的类中访问权限分public,protected,private.当我们想通过类方法进行访问的时候往往是在public的区域写一个函数来访问.但是这种方式过于严格拉, ...

  3. C++知识点61——typename与class、模板编程与继承、模板类和友元、类模板与static成员

    一.typename与class的异同 1.啥时候既可以使用typename,又可以使用class? 当表示模板参数的时候,二者没有区别 2.啥时候只能使用typename,不能使用class? 当模 ...

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

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

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

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

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

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

  7. C++ primer 第七章之 友元函数与友元类

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

  8. C++中友元函数和友元类

    友元函数 友元函数是可以直接访问类的私有成员的非成员函数.它是定义在类外的普通函数,它不属于任何类,但需要在类的定义中加以声明,声明时只需在友元的名称前加上关键字friend,其格式如下: frien ...

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

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

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

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

最新文章

  1. 深入理解指针以及二级指针(指针的指针)
  2. 目标检测评价指标mAP计算
  3. SAP Spartacus RouteGuard路由守卫之CmsPageGuard
  4. 研发协同平台持续集成实践
  5. 知识分享:值得学习的C语言经典开源项目
  6. Cocos2d-x 3.2:通过ClippingNode实现一个功能完善的跑马灯公告(1)
  7. pmp 成本估算准确高_如何更准确地估算JavaScript中文章的阅读时间
  8. LeetCode 988. 从叶结点开始的最小字符串(DFS)
  9. 初级Web前端工程师是什么?初级Web前端工程师的技术体系有哪些?
  10. 文章采集伪原创工具_伪原创文章技巧(如何提高伪原创文章的原创度)
  11. win8/10上的应用程序怎样以兼容模式运行?
  12. 分治法( Divide and Conquer)
  13. 构建企业级推荐系统(05):从零开始入门推荐算法工程师(万文建藏)
  14. 思科路由器和交换机的硬件结构
  15. 20sccm_SCCM 2016 使用PXE 部署操作系统(一)
  16. 微信支付-超详细java开发-小程序对接
  17. excel中利用综合应用len(),lenb(),left() ,find()函数筛选汉字问题
  18. 拒酒词,社交必备!!!
  19. Python基础(类与对象)
  20. 快速的绘制一幅可爱的柯基犬插图教程

热门文章

  1. android跳转!我的阿里春招之路分享,Android篇
  2. 山东大学人工智能专业大数据管理与分析选修考试回忆版
  3. Owin password
  4. MySql错误1045 Access denied for user 'root'@'localhost' (using password:YES) windows下的解决方案(忘记密码)
  5. windows内核开发学习笔记四十四:注册表存储结构-储巢
  6. python运行时不让电脑休眠_如何在不休眠整个程序的情况下以一种功能休眠 - python...
  7. 什么牌子的运动蓝牙耳机好?降噪好的运动蓝牙耳机
  8. [Android]使用自定义SurfaceView实现幸运转盘效果
  9. ireport 导出pdf文件 字体问题
  10. opencv人脸识别总结1