iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >C++ 友元函数详解:友元函数在不同编译单元的使用?
  • 388
分享到

C++ 友元函数详解:友元函数在不同编译单元的使用?

c++友元函数 2024-04-28 13:04:11 388人浏览 泡泡鱼
摘要

友元函数允许函数访问其他类的私有成员。当友元函数和它访问的类不在同一编译单元中时,有两种场景:友元函数声明在头文件中:友元函数的声明位于类的头文件中,类的定义位于不同的源文件中,友元函数

友元函数允许函数访问其他类的私有成员。当友元函数和它访问的类不在同一编译单元中时,有两种场景:友元函数声明在头文件中:友元函数的声明位于类的头文件中,类的定义位于不同的源文件中,友元函数可以访问私有成员。友元函数声明在源文件中:友元函数的声明和定义都位于独立的源文件中,在头文件中需要声明友元函数,然后才能在其他编译单元中使用它。

C++ 友元函数详解:友元函数在不同编译单元的使用

友元函数是 c++ 中一种特殊类型的函数,它可以访问其他类的私有成员。这允许友元函数执行其他类无法执行的操作,例如修改 private 数据或调用 private 方法。

不同编译单元中的友元函数

当您将代码组织到不同的编译单元(例如源文件或头文件)时,友元函数的使用会变得更加复杂。要使友元函数能够访问另一个类的私有成员,该类必须在友元函数声明之前声明。

如果友元函数和它访问的类不在同一编译单元中,则存在两种不同的场景:

场景 1:友元函数声明在头文件中

在这种情况下,友元函数的声明位于类的头文件中,而该类的定义则位于不同的源文件中。这是最常见的情况:

// header.h
class MyClass {
    // ...
    friend void myFriendFunction();
};

// source.cpp
#include "header.h"
void myFriendFunction() {
    MyClass obj;
    // 可以访问 MyClass 的 private 成员
    obj.privateMember = 10;
}

场景 2:友元函数声明在源文件中

在这种不太常见的情况下,友元函数的声明和定义都位于单独的源文件中:

// class.cpp
class MyClass {
    // ...
    friend void myFriendFunction();
};

// friend.cpp
#include "class.h"
void myFriendFunction() {
    MyClass obj;
    // 可以访问 MyClass 的 private 成员
    obj.privateMember = 10;
}

对于场景 2,还需要在头文件中声明友元函数,以便在其他编译单元中使用:

// header.h
class MyClass;  // 前向声明
extern void myFriendFunction();

实战案例

考虑以下使用友元函数操作私有成员的示例:

#include <iOStream>

class MyClass {
    int privateMember;
public:
    MyClass(int val) : privateMember(val) {}
    friend void printPrivate(MyClass& obj);
};

void printPrivate(MyClass& obj) {
    std::cout << "Private member: " << obj.privateMember << std::endl;
}

int main() {
    MyClass obj(10);
    printPrivate(obj);  // 可以访问 privateMember

    return 0;
}

在这个例子中,printPrivate() 友元函数可以访问 MyClass 的私有成员 privateMember,并将其打印到控制台。

注意事项

  • 友元函数应谨慎使用,因为它会破坏类封装。
  • 仅在真正需要访问私有成员时才使用友元函数。
  • 清楚地记录友元函数的目的和用法。

以上就是C++ 友元函数详解:友元函数在不同编译单元的使用?的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: C++ 友元函数详解:友元函数在不同编译单元的使用?

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

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

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

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

下载Word文档
猜你喜欢
  • C++之友元:友元函数和友元类详解
    一、友元介绍我们知道,类的成员函数可以访问同类的其他成员函数,包括公有、私有和保护成员。而类的外部函数只能访问类的公有成员。友元是一种允许非类成员函数访问类的非公有成员的一种机制。可...
    99+
    2022-11-15
    友元函数 友元类
  • C++中的友元函数与友元类详情
    目录一、问题背景二、友元函数三、友元类一、问题背景 对类的封装是C++三大特性中的一个重要特性,封装好的数据在类的外部是访问不到的但是一旦出了问题,想要操作被封装的数据怎么办呢?由此...
    99+
    2022-11-13
  • C++实例代码详解友元函数
    目录友元概述普通全局函数作为类的友元类的某个成员函数作为另一个类的友元一个类整体作为另一个类的友元友元的注意事项封装电视机 和遥控器的类友元函数 可以直接操作类的私有数据。 frie...
    99+
    2022-11-13
  • C++中如何使用友元函数
    本篇文章为大家展示了C++中如何使用友元函数,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。定义:允许一个类将对其非公有成员的访问权授予指定的类或函数(分别是友元类和C++友元函数)。说明:友元是非成...
    99+
    2023-06-17
  • C++中成员函数和友元函数的使用及区别详解
    为什么使用成员函数和友元函数 这个问题至关重要,直接影响着后面的理解: 程序数据: 数据是程序的信息,会受到程序函数的影响。封装是面向对象编程中的把数据和操作数据的函数绑定在一起的一...
    99+
    2022-11-13
  • C++友元函数的作用是什么
    C++友元函数的作用是允许一个函数访问一个类的私有成员和保护成员。通常情况下,只有类的成员函数可以访问类的私有成员和保护成员,但是有...
    99+
    2023-10-11
    C++
  • C++友元函数怎么定义和使用
    C++友元函数是指一个非成员函数可以访问类的私有成员和保护成员。以下是定义和使用C++友元函数的步骤:1. 在类的声明中声明友元函数...
    99+
    2023-10-11
    C++
  • C++中的成员函数和友元函数怎么使用
    成员函数是定义在类中的函数,它可以访问类中的成员变量和其他成员函数。成员函数使用类的对象来调用,并且隐式地访问该对象的成员。友元函数...
    99+
    2023-08-16
    C++
  • C++类和对象中友元函数怎么使用
    这篇文章主要介绍“C++类和对象中友元函数怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C++类和对象中友元函数怎么使用”文章能帮助大家解决问题。友元用到关键字 friend浅解概念举一个非...
    99+
    2023-07-02
  • C++简单又轻松的讲解类和对象中友元函数
    目录友元浅解概念友元目的友元的三种实现全局函数做友元类做友元成员函数做友元注意事项总结友元 用到关键字 friend 浅解概念 举一个非常实际的例子,假如端午节到了你煮了两种粽子,一...
    99+
    2022-11-13
  • 详解C++类的成员函数做友元产生的循环依赖问题
    目录类的声明类的成员函数做友元以及可能产生的循环依赖问题情况一:B类的成员函数func是A类的友元,且B类不依赖A类情况二:类B的成员函数func成员函数是类A的友元,且B类依赖于不...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作