目录

友元到底是什么意思?

什么是友元函数?

什么是友元类?


友元函数和友元类的应用

友元到底是什么意思?

友元在我的理解中是“朋友之间互通有无的一种表现”,只要在类体中声明了某个函数为友元(切记:这个函数为外来函数,并不是类的成员函数),那么无论这个函数声明在类体中那个位置(private,protected,public三者均可)这个外来函数就可以轻松的访问类体中的所有成员,包括所有的成员函数和成员数据。

什么是友元函数?

首先,我要说的是“友元函数是个外部函数,它不是类的成员函数,如果是成员函数,友元函数不可能无视所有成员权限和自身在类体内被声明的权限,任意地在类体外访问类体内的所有东西”!

其次,友元函数可以无视类中所有数据成员以及成员函数的权限以及自身在类中声明的位置,肆无忌惮的调用任意成员函数和成员数据。

代码示例:

#include <iostream>
#include <string>
using namespace std;  class Cperson
{
private:  string name;  float mark;
public:  Cperson(string name, float mark) {  this->name = name;  this->mark = mark;  }  ~Cperson() {};  void ShowInf() {  cout << this->name << endl;  }  friend void AccessName(Cperson &);
};  // 如果把形参改成“sonst person &”那么包含成员数据的成员函数和友元函数全部不可使用,这样做是为了防止无意间改变对象所包含的信息
void AccessName(Cperson &person)
{  cout << person.name << "的分数为" << person.mark << "分" << endl;  person.ShowInf(); // 不但可以访问数据,还可以访问成员函数
}  int main()
{  Cperson person("超级霸霸强", 99.99);  AccessName(person);
}  

什么是友元类?

友元类与友元函数类似,同样是无视任何权限,肆无忌惮的访问类体内的所有东西,只不过友元函数只是一个函数,而友元类则是一个成员的集合体,适用范围更广了,

就好比:友元函数是小明的一个超级好朋友,小明的一切对于友元函数来说都不是秘密,友元函数可以任意使用他家里的任意东西;而友元类是和小明的一群超级好朋友,他们熟知小明的一切,而且他们都可以随意使用小明家里的任何东西。

代码示例:

#include <iostream>
#include <string>
using namespace std;  class Cperson
{
private:  string name;  float mark;  friend class Cstudent;
public:  Cperson(string name, float mark) {  this->name = name;  this->mark = mark;  }  ~Cperson() {};
};  class Cstudent
{
public:  // 声明为const类型后,对象不可在调用包含成员数据的成员函数,以防止对象的值被无意间篡改  void ShowInf(const Cperson &person) // 友元类中所有函数均是Cperson的友元函数,用法与友元函数一致{  cout << person.name << "的成绩为" << person.mark << "分" << endl;  }
};  int main()
{  Cperson person("超级霸霸强", 99.99);  Cstudent stud;  stud.ShowInf(person);
}  

友元函数和友元类的应用相关推荐

  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. LeetCode简单题之二叉树的层平均值
  2. 137.三网?哪三网?139.网络协议三要素?141.网络安全有哪些方面?
  3. 数据中心分布情况和业务占比分析
  4. Go 语言编写 CPython 扩展 goPy
  5. java 8是指什么_java中8个基本数据类型到底是指什么?是什么意思,有什么作用?我需要权威的回答,...
  6. 以后外卖还可以买手机了!饿了么与上海迪信通达成合作
  7. Modelbuilder快速入门
  8. mysql同步一段时间后失败_mysql 主从同步失败后
  9. Python使用 opencv对CT图进行医学处理
  10. php qrcode二维码应用
  11. 多元相关性分析_多元统计分析与R语言建模之相关分析与回归分析
  12. 关于信号发生器的功能和参数介绍(一)
  13. Excel随机 除法 打印版下载
  14. 云原生不可变基础设施
  15. 基础算法----map/reduce的先祖归并排序
  16. 清华大学王观堂先生纪念碑铭----陈寅恪
  17. phpstudy安装php8.0和php8.1的方法(内含VC运行库)
  18. IPad上windows远程桌面软件推荐
  19. letter-shell | 一个功能强大的嵌入式shell
  20. PDF文件怎么复制页面,复制页面工具使用方法

热门文章

  1. __repr__ 方法的作用
  2. 011.练手.Ubuntu下录高清视频
  3. python随机抽号_Python 创建扑克牌,并实现随机抽牌、排序、洗牌等功能
  4. PHP生肖查询顺序错了怎么改,十二生肖的顺序是怎样的?
  5. 目前的智能设备,大致可以划分为哪三类?
  6. jquery阻止冒泡事件行为发生
  7. java开发电脑软件_JAVA开发程序员,开发使用笔记本推荐?
  8. Unity和Hub只能下载到C盘的解决办法
  9. Word控件Spire.Doc 【文档操作】教程(五):在 C#、VB.NET 中合并、设置多个 Word 文档
  10. 女朋友存了好多网上的男明星的照片,我准备用python全部换成我的脸