C++——友元函数与友元类

本文介绍了C++中的友元函数和友元类,这两种机制允许外部类访问私有或保护成员,以解决深度耦合类之间的交互问题。虽然友元提供了便利,但同时也破坏了类的封装性。通过对比三种不同的访问私有成员的方法,展示了友元在特定情况下的优势。示例代码演示了如何使用友元类来实现特定功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++——友元函数与友元类

  • 定义

友元提供了一种 普通函数或者类成员函数 访问另一个类中的私有或保护成员的机制。

优点:可以访问类的私有成员

缺点:破坏了类的封装性

  • 使用场景

当两个类之间深度耦合,A类需要访问B类的私有成员变量此时有以下几种方法

  1. 方法一:将B的私有成员变量改为public属性,但这明显不合理,要求是只想让A可以访问到
  2. 方法二:给每个成员加一个set和get方法,不好的地方变相的把私有成员变成了公有,set和get的方法代码量也不小
  3. 方法三:将A声明为B的友元类

三种方法可以看出第三种会更符合要求一点

  • 代码示例

#include<iostream>
#include<string>
using namespace std;
class person;
class dog{
    private:
        string behav;
    public:
    friend class person;
        dog(){
            behav = "跑步";
        }   
};

class person{
    private:
        dog *m_dog;
    public:
        person() {
            m_dog =  new dog();
        }
        void per_behav() {
            cout<<"遛狗 dog"<<m_dog->behav;
        }
};

int main() {
    person p;
    p.per_behav();
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值