iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++中友元函数friend该怎么解析
  • 300
分享到

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

2023-06-22 07:06:26 300人浏览 八月长安
摘要

这期内容当中小编将会给大家带来有关c++中友元函数friend该怎么解析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。我们知道C++控制对象的私有部分的访问,只能通过公共的接口。这样的设计当然没错,但有的

这期内容当中小编将会给大家带来有关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,分别是doubleTime类型,返回一个Time类型。

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

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

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

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

它有两个含义:

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

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

由于友元函数不是成员函数,所有我们在实现的时候不需要使用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;}

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

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

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

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

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

--结束END--

本文标题: C++中友元函数friend该怎么解析

本文链接: https://www.lsjlt.com/news/303385.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C++中友元函数friend该怎么解析
    这期内容当中小编将会给大家带来有关C++中友元函数friend该怎么解析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。我们知道C++控制对象的私有部分的访问,只能通过公共的接口。这样的设计当然没错,但有的...
    99+
    2023-06-22
  • C++中友元函数(friend)解析
     文章转自公众号:Coder梁(ID:Coder_LT) 我们知道C++控制对象的私有部分的访问,只能通过公共的接口。这样的设计当然没错,但有的时候也会显得过于严格,产生一...
    99+
    2024-04-02
  • C++中友元函数与友元类的示例分析
    小编给大家分享一下C++中友元函数与友元类的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、问题背景对类的封装是C++三大特性中的一个重要特性,封装好的...
    99+
    2023-06-29
  • C++之友元:友元函数和友元类详解
    一、友元介绍我们知道,类的成员函数可以访问同类的其他成员函数,包括公有、私有和保护成员。而类的外部函数只能访问类的公有成员。友元是一种允许非类成员函数访问类的非公有成员的一种机制。可...
    99+
    2022-11-15
    友元函数 友元类
  • C++ 友元函数详解:友元函数在STL中的应用?
    在 c++++ 中,友元函数是一种特殊函数,可以访问其他类的私有成员。友元函数的声明使用 friend 关键字,定义时需要注意访问权限。stl 中广泛使用友元函数,以允许容器类与算法相交...
    99+
    2024-04-30
    c++ 友元函数
  • C++ 友元函数详解:如何调用友元函数?
    友元函数允许跨类访问私有或受保护成员,语法为:class classname {protected: // 私有或受保护成员};friend 声明友元函数;。要调用友元函数,使用点运算符...
    99+
    2024-04-28
    c++ 友元函数
  • C++ 友元函数详解:友元函数在多继承中的作用?
    友元函数允许非成员函数访问私有成员,并在多继承中发挥作用,允许派生类函数访问基类的私有成员。 C++ 友元函数详解:友元函数在多继承中的作用 友元函数介绍 友元函数是一种特殊函数,被赋...
    99+
    2024-04-29
    多继承 友元函数 c++
  • C++ 友元函数详解:友元函数在模板类中的使用?
    在 c++++ 中,友元函数可以访问类的私有成员,而无需成为该类的成员函数。在模板类中,友元函数的声明与普通类中的声明类似,且必须在类的定义外部进行声明。例如,要在模板类 myclass...
    99+
    2024-04-29
    c++ 友元函数
  • C++ 友元函数详解:何时需要使用友元函数?
    友元函数是一种非成员函数,拥有访问私有或受保护成员的权限。使用友元函数可方便实现跨类数据共享、访问私有成员以实现特定功能、允许外部函数访问类私有数据等。 C++ 友元函数详解:何时使用...
    99+
    2024-04-29
    c++ 友元函数 封装性
  • C++ 友元函数详解:友元函数和函数指针的结合?
    将友元函数与函数指针结合将友元函数与函数指针结合使用,提供以下好处:动态绑定,允许在运行时更改友元函数的执行。泛型编程,使友元函数能够处理不同类型的对象。 C++ 友元函数详解:将友元...
    99+
    2024-04-30
    c++ 指针 友元
  • C++ 友元函数详解:友元函数和全局函数的区别?
    友元函数可访问类私有和受保护数据成员,而全局函数不行,友元函数在类声明中声明,全局函数在类外声明,使用 friend 关键字声明友元函数,用 extern 关键字声明全局函数。友元函数通...
    99+
    2024-04-28
    c++ 友元函数 作用域
  • C++ 友元函数详解:友元函数和成员函数的区别?
    友元函数允许外部函数访问类中的私有或受保护成员,通过在类定义中用 friend 关键字声明。与成员函数不同,友元函数声明在类外部,可访问类的私有和保护成员,而成员函数在类内部声明,可访问...
    99+
    2024-04-29
    c++ 友元函数 作用域
  • C++中的友元函数与友元类详情
    目录一、问题背景二、友元函数三、友元类一、问题背景 对类的封装是C++三大特性中的一个重要特性,封装好的数据在类的外部是访问不到的但是一旦出了问题,想要操作被封装的数据怎么办呢?由此...
    99+
    2024-04-02
  • C++友元函数怎么调用
    在C++中,友元函数可以直接调用,不需要通过对象或类的实例来调用。友元函数可以在类的内部声明和定义,它可以访问类的私有成员和保护成员...
    99+
    2023-10-11
    C++
  • C++ 友元函数详解:友元函数的优点和缺点?
    友元函数是一种特殊函数,可以访问另一个类的私有和受保护成员,优点包括跨类访问私有数据、增强封装、提高代码可重复性。缺点则包括破坏封装、增加耦合度、降低代码可读性。 C++ 友元函数详解...
    99+
    2024-04-28
    c++ 友元函数 封装性 代码可读性
  • C++ 友元函数详解:如何声明友元类?
    在 c++++ 中,友元类允许一个类的所有成员函数访问另一个类的私有成员。声明友元类时,使用 friend class 关键字,例如:outerclass 声明 内层类 为友元类:fri...
    99+
    2024-04-28
    c++ 友元函数 敏感数据
  • C++ 友元函数详解:友元函数用于解决哪些问题?
    友元函数是 c++++ 中可访问其他类私有成员的特殊函数。它们解决类封装带来的访问限制,用于解决类间数据操作、全局函数访问私有成员、跨类或编译单元代码共享等问题。用法:使用 friend...
    99+
    2024-04-28
    c++ 友元函数
  • C++ 友元函数详解:友元函数的潜在安全隐患?
    友元函数允许访问类中的私有成员,虽然便利,但同时也存在以下安全隐患:破坏封装性:友元函数可访问私有成员,破坏类的封装。交叉污染:多个类声明同一个友元函数,导致意外的数据修改或错误。 C...
    99+
    2024-04-30
    c++ 友元函数 封装性
  • C++ 友元函数详解:友元函数和类模板的交互?
    友元函数可访问类的私有成员,通过在类声明中使用 friend 声明。类模板允许创建通用类和友元函数,适用于不同类型数据。实战案例中,友元函数模板 printdata() 可打印任何类型 ...
    99+
    2024-04-30
    c++ 友元函数 封装性
  • C++中任何事与友元函数和友元类
    本篇文章为大家展示了C++中任何事与友元函数和友元类,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。友元可以是一个函数,该函数被称为友元函数;友元也可以是一个类,该类被称为友元类。类具有封装和信息隐藏...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作