开发者社区> 问答> 正文

什么是友元函数?

什么是友元函数?

展开
收起
三分钟热度的鱼 2024-05-17 14:49:20 57 0
2 条回答
写回答
取消 提交回答
  • 某政企事业单位安全运维工程师,主要从事系统运维及网络安全工作,多次获得阿里云、华为云、腾讯云征文比赛一二等奖;CTF选手,白帽,全国交通行业网络安全大赛二等奖,全国数信杯数据安全大赛银奖,手握多张EDU、CNVD、CNNVD证书。

    友元函数(Friend Function)是C++中的一种特殊机制,它允许一个函数访问另一个类的私有(private)和保护(protected)成员。尽管通常情况下,类的成员访问权限是为了实现数据封装和隐藏内部实现细节,但有时为了提高效率或方便操作,需要让某些非成员函数能够直接访问类的内部。这时就可以将这些非成员函数声明为该类的友元。

    友元函数不是类的成员,但在类的定义中通过关键字friend进行声明。一旦声明为友元,该函数就可以自由地访问该类的所有成员,无论它们的访问权限如何。

    例如,假设有一个类ClassA,我们想让一个全局函数func成为它的友元函数,可以这样定义:

    class ClassA {
    private:
        int secretData;
    
    public:
        // 声明func为友元函数
        friend void func(ClassA&);
    };
    
    // 实现func函数,可以直接访问ClassA的私有成员
    void func(ClassA& obj) {
        obj.secretData = 42; // 访问并修改私有成员
    }
    
    int main() {
        ClassA obj;
        func(obj); // 调用友元函数
        return 0;
    }
    

    在这个例子中,func函数虽然是在类的外部定义的,但它被声明为ClassA的友元,因此可以直接访问和修改ClassA的私有成员secretData。

    2024-05-17 23:06:11
    赞同 展开评论 打赏
  • 友元函数是定义在类外部的普通函数,被某个类声明为其“友元”。友元函数可以访问该类的所有成员,包括私有和受保护的成员。它不是类的成员函数,因此不受类的封装性约束。

    2024-05-17 15:23:37
    赞同 1 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载