类的友元函数是定义在类外部,但有权访问类的所有私有(private)成员和保护(protected)成员。

尽管友元函数的原型有在类的定义中出现过,但是友元函数并不是成员函数。

友元可以是一个函数,该函数被称为友元函数;

友元也可以是一个类,该类被称为友元类,在这种情况下,整个类及其所有成员都是友元。

如果要声明函数为一个类的友元,需要在类定义中该函数原型前使用关键字 friend,如下所示:

class Box
{double width;
public:double length;friend void printWidth( Box box );void setWidth( double wid );
};

声明类 ClassTwo 的所有成员函数作为类 ClassOne 的友元,需要在类 ClassOne 的定义中放置如下声明:

friend class ClassTwo;

请看下面的程序:

实例

#include <iostream>using namespace std;class Box
{double width;
public:friend void printWidth( Box box );void setWidth( double wid );
};// 成员函数定义
void Box::setWidth( double wid )
{width = wid;
}// 请注意:printWidth() 不是任何类的成员函数
void printWidth( Box box )
{/* 因为 printWidth() 是 Box 的友元,它可以直接访问该类的任何成员 */cout << "Width of box : " << box.width <<endl;
}// 程序的主函数
int main( )
{Box box;// 使用成员函数设置宽度box.setWidth(10.0);// 使用友元函数输出宽度printWidth( box );return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

Width of box : 10

https://www.runoob.com/cplusplus/cpp-friend-functions.html

C++ 友元函数 友元类 friend class相关推荐

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

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

  2. 友元函数 友元类 友元成员函数

    友元 一般来说,类内的私有数据是对外不可见的,但在有些情况下,我们需要在类外对该类的私有数据进行访问,这就需要用到一种新技术--友元(friend),即在声明前添加关键字friend. 友元关系是单向 ...

  3. C++笔记 友元函数 友元类

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

  4. 友元函数、类的非静态成员函数、静态成员函数的区别

    类中申明的函数相对于类来说有三层意思: 1.有this指针 2.函数在类的作用区域中 3.可以访问类中私有部分 4.可以被继承 非静态成员函数具有1234 静态成员函数具有234 友元函数具有3 静态 ...

  5. 【C++ 语言】面向对象 ( 成员函数 | 常量函数 | 友元函数 | 友元类 | 单例类 )

    文章目录 成员函数 常量函数 友元函数 new 创建对象 友元类 单例类 成员函数 此处继续上一篇博客继续向后讲解C++面向对象 类成员方法 , 除了定义构造方法与析构方法之外 , 还可以定义普通的成 ...

  6. c++ 友元函数,友元类

    友元函数破坏了类的封装特性,它可以在类的外部访问类的私有属性 #include "iostream" using namespace std; class A1 { public: ...

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

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

  8. public 函数_Chapter18:友元函数和友元类

    这一章的问题从"如何畅通无阻的访问另一个类"开始,类的属性有private.protected.public,根据继承权限有不同的访问方式.但是类之间的关系不一定是继承,有时一个类 ...

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

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

  10. C++ 类的知识 | 构造函数再探、匿名对象、友元函数、内部类、类的const成员、类的static成员

    文章目录 构造函数再探 以下代码共调用多少次拷贝构造函数 委托构造函数 概念 形式 匿名对象 友元 友元的声明 友元类 令成员函数作为友元 函数重载和友元 注意 内部类 特性 类的const成员 可变 ...

最新文章

  1. C#2.0实例程序STEP BY STEP--实例二:数据类型
  2. windows PHPStudy Apache 配置支持HTTPS
  3. java获取当前系统时间毫秒_java 获取当前系统时间简写 | 学步园
  4. c#如何跳出一个函数_C#初学者教程系列9:类和对象
  5. Codevs 1689 建造高塔
  6. jzoj3086,luogu3831-[SHOI2012]回家的路【最短路,拆点】
  7. 深入剖解linux逻辑卷LVM
  8. Java—Queue队列详解(Deque/PriorityQueue/Deque/ArrayDeque/LinkedList)
  9. 快速计算Distinct Count
  10. 动态设置HTML:v-html
  11. Apache Flink Meetup 8.7 深圳站改为线上
  12. 猴子数据让你深刻了解微信富媒体
  13. BMP测试图片及显示源码
  14. java公路中轴_技术帖 自行车中轴的种类 入门车友请细读
  15. 技术前沿与经典文章22:继牛顿以后最伟大的物理学家——詹姆斯·克拉克·麦克斯韦
  16. 小红书用户画像分析_用户行为研究:如何做用户画像分析
  17. 注册域名dns服务器,dns服务器有什么用?如何用贝锐注册域名?
  18. 计算机网络atm功能,现代计算机网络原理4ATM交换技术.ppt
  19. 如何搭建用户体验指标体系?
  20. Windows 利用Anaconda创建pytorch等环境

热门文章

  1. LINUX下多路径(multi-path)介绍及使用
  2. 关于LeNet-5卷积神经网络 S2层与C3层连接的参数计算的思考???
  3. 四大猛壳之一的VMProtect轻松保护你的程序
  4. 经典算法题随机从连续的100个不重复数中取出100个不重复随机数
  5. IOS开发笔记 IOS如何访问通讯录
  6. Form表单只提交field的值,而不进行页面跳转
  7. 算法导论8-5习题解答(平均排序)
  8. 拓端tecdat荣获腾讯云+社区年度最佳作者奖
  9. 拓端tecdat|机器学习:在SAS中运行随机森林
  10. 拓端tecdat|Python Monte Carlo K-Means聚类实战研究