C++友元函数和友元类的使用与区别

 更新时间:2023年07月05日 09:07:17   作者:誰能久伴不乏  
本文主要介绍了C++友元函数和友元类的使用与区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1.友元介绍

在C++中,友元(friend)是一种机制,允许某个类或函数访问其他类的私有成员。通过友元,可以授予其他类或函数对该类的私有成员的访问权限。友元关系在一些特定的情况下很有用,例如在类之间共享数据或实现特定的功能。

友元可以分为两种类型:类友元和函数友元。

2.类友元

类友元(Friend Class):

  • 可以将一个类声明为另一个类的友元。这样,在被声明为友元的类中,就可以直接访问另一个类的私有成员。
  • 类友元关系在类之间共享数据或实现特定功能时很有用。
  • 友元关系是单向的,不具有传递性。如果类A是类B的友元,类B不一定是类A的友元。
  • 友元关系通常在类的声明部分使用 friend 关键字来声明。

2.1示例代码

class FriendClass {
private:
    int privateData;
public:
    FriendClass() : privateData(0) {}
    friend class OtherClass;  // 声明 OtherClass 是 FriendClass 的友元类
};
class OtherClass {
public:
    void accessPrivateData(FriendClass& obj) {
        obj.privateData = 42;  // 可以直接访问 FriendClass 的私有成员
    }
};

3.函数友元

函数友元(Friend Function)

  • 可以将一个函数声明为一个类的友元函数。这样,在友元函数中可以直接访问该类的私有成员。
  • 友元函数可以是非成员函数,也可以是其他类的成员函数。
  • 友元函数通常在类的声明部分或声明外部使用 friend 关键字来声明。

3.1示例代码

class MyClass {
private:
    int privateData;
public:
    MyClass() : privateData(0) {}
    friend void friendFunction(MyClass& obj);  // 声明 friendFunction 是 MyClass 的友元函数
};
void friendFunction(MyClass& obj) {
    obj.privateData = 42;  // 可以直接访问 MyClass 的私有成员
}

4.总结

友元的使用场景包括但不限于以下情况:

  • 当两个或多个类需要共享私有数据时,可以使用类友元来实现数据的直接访问,而无需通过公有接口。
  • 当某个类需要提供特定函数或操作给其他类使用,但这些函数需要访问类的私有成员时,可以使用函数友元。
  • 在重载运算符或实现某些特定功能时,友元可以提供对类私有成员的直接访问。
  • 需要注意的是,友元机制破坏了封装性,因为其他类或函数可以直接访问被授予友元权限的类的私有成员。因此,应谨慎使用友元,只在必要的情况下使用,并且仅将其授予最少的访问权限。

到此这篇关于C++友元函数和友元类的使用与区别的文章就介绍到这了,更多相关C++友元函数和友元类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • c++验证哥德巴赫猜想

    c++验证哥德巴赫猜想

    这篇文章主要介绍了c++验证哥德巴赫猜想,哥德巴赫猜想就是任一大于2的偶数,都可表示成两个素数之和,需要的朋友可以参考下
    2014-04-04
  • C语言数据结构中堆排序的分析总结

    C语言数据结构中堆排序的分析总结

    堆是计算机科学中一类特殊的数据结构的统称,通常是一个可以被看做一棵完全二叉树的数组对象。而堆排序是利用堆这种数据结构所设计的一种排序算法。本文将通过图片详细介绍堆排序,需要的可以参考一下
    2022-04-04
  • 嵌入式C语言二级指针在链表中的应用

    嵌入式C语言二级指针在链表中的应用

    这篇文章主要为大家介绍了嵌入式C语言二级指针在链表中的应用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • C语言中数组作为函数的参数以及返回值的使用简单入门

    C语言中数组作为函数的参数以及返回值的使用简单入门

    这篇文章主要介绍了C语言中数组作为函数的参数以及返回值的使用简单入门,这里以一维数组作为基本条件进行例子讲解,需要的朋友可以参考下
    2015-12-12
  • C++中实现调试日志输出

    C++中实现调试日志输出

    在 C++ 编程中,调试日志对于定位问题和优化代码至关重要,本文将介绍几种常用的调试日志输出方法,并教你如何在日志中添加时间戳,希望对大家有所帮助
    2025-01-01
  • c语言阶乘之和问题示例详解

    c语言阶乘之和问题示例详解

    这篇文章主要给大家介绍了关于c语言阶乘之和问题的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用c语言具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-08-08
  • C语言中回调函数的使用详情

    C语言中回调函数的使用详情

    这篇文章主要介绍了C语言中回调函数的使用详情,阅读下文我们将学习到架构的核心理念和需、回调函数的作用、回调函数的程序编写等内容,需要的小伙伴可以参考一下
    2022-03-03
  • C++结构体数组详细解析

    C++结构体数组详细解析

    定义结构体数组和定义结构体变量类似,定义结构体数组时只需声明其为数组即可
    2013-10-10
  • VSCODE调试RDKit内核的方法步骤(C++)

    VSCODE调试RDKit内核的方法步骤(C++)

    本文主要介绍了VSCODE调试RDKit内核的方法步骤,这个过程可以分为三个部分:安装 RDKit 所需环境,安装 VSCode 相应插件, 写调试代码编译,感兴趣的可以了解一下
    2021-08-08
  • C++实现文件逐行读取与字符匹配的示例详解

    C++实现文件逐行读取与字符匹配的示例详解

    这篇文章主要为大家详细介绍了如何溧阳C++实现文件逐行读取与字符匹配的功能,文中的示例代码讲解详细,具有一定的借鉴价值,需要的可以参考一下
    2023-03-03

最新评论