千家信息网

C++中友元函数friend该怎么解析

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这期内容当中小编将会给大家带来有关C++中友元函数friend该怎么解析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。我们知道C++控制对象的私有部分的访问,只能通
千家信息网最后更新 2026年11月03日C++中友元函数friend该怎么解析

这期内容当中小编将会给大家带来有关C++中友元函数friend该怎么解析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

我们知道C++控制对象的私有部分的访问,只能通过公共的接口。这样的设计当然没错,但有的时候也会显得过于严格,产生一些问题。

因此C++提供了另外一种形式的访问权限,叫做友元(friend)。

友元有三种,分别是友元函数、友元类和友元成员函数。

通过让函数成为类的友元,可以赋予该函数与类成员函数一样的访问权限,也就是说我们可以在友元函数当中访问类的私有成员变量。

在介绍友元函数的使用之前,我们需要先了解为什么需要友元函数。C++ Primer中给了一个非常不错的例子,在之前运算符重载的例子当中,我们实现了一个类Time。用来记录时间,假设我们需要重载它的*运算符,能够允许一个时间对象和一个浮点数相乘。

很明显,我们只需要重载运算符*即可:

Time Time::operator*(const double x) {    // todo}

我们在使用的时候大概是这样:

Time a, b;a = b * 32.5;

但是这里有一个小问题,我们写成a = b * 32.5;可以,但如果反过来写成32.5 * b就不行了。因为对于b * 32.5来说本质上是b调用了operator*函数,等价于a = b.opeartor*(32.5);。但后者就不行了,要怎么解决呢,只能另外实现一个函数来解决了,这个函数有两个input,分别是double和Time类型,返回一个Time类型。

Time operator*(double m, const Time &t);

但这又有了新的问题,由于这不是一个成员函数,不能直接访问类的私有数据。为了破例让它能够访问,我们需要将它设置成友元。

创建友元的方法很简单,我们只需要在函数签名之前加上关键字friend。

friend Time operator*(double m, const Time &t);

它有两个含义:

  • 它不是成员函数,因此不能使用成员函数运算符来调用

  • 它与成员函数的访问权限相同,即可以访问所有private和public数据

由于友元函数不是成员函数,所有我们在实现的时候不需要使用Time::限定符,也不用在实现当中加上关键字friend,

函数的实现如下:

Time operator*(double m, const Time &t) {    Time result;    long totalminutes = t.hours * m * 60 + t.minutes * m;    result.hours = totalminutes / 60;    result.minutes = totalminutes % 60;    return result;}

我们在函数当中直接访问了hours和minutes成员变量,因此函数必须是友元函数。

当然我们可以把函数稍微变换一下,就可以不必是友元函数了:

Time operator*(double m, const Time &t) {    return t * m; //  调用了t.operator*(m)}

在这个函数当中,我们没有显式地访问私有变量,因此可以不必是友元。

上述就是小编为大家分享的C++中友元函数friend该怎么解析了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

函数 成员 C++ 运算符 私有 运算 变量 时候 权限 问题 中友 不行 两个 例子 关键 关键字 内容 对象 数据 时间 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 咖啡豆 互联网络科技 博彦科技互联网金融 广州万易互联网科技有限公司 互联网科技财经 齐家互联网科技 互联网科技革命 广西互联网科技公司 互联网养老 桔豆科技 丰台科技园 互联网公司 华中科技有哪些互联网大佬 富国互联网科技创新基金 上海电发互联网科技有限公司 互联网系的金融科技公司 贵州叶脉互联网科技有限公司所属行业 武汉健翔互联网络科技有限公司 健康食品互联网创新科技园项目 广州千川互联网科技有限公司 安徽九吞吴互联网科技有限公司 东风日产互联网科技公司叫什么 互联网加科技 百单网互联网科技有限公司 广东万易互联网科技有限公司惠州分公司 广东猪兼强互联网科技有限公司 互联网电商科技 疫情对互联网科技公司影响 互联网女皇 腾讯科技 天扬科技互联网广告 互联网科技有哪些公司 广东鹅鹅鹅互联网科技有限公司
0