C++友元函数和友元类

C++允许使用friend关键字声明友元函数或友元类,以访问其他类的私有成员。这包括对私有变量的直接操作,例如在示例中,foo函数和类B都得以修改类A的私有成员a_。然而,友元关系破坏了封装原则,应谨慎使用,仅在必要时采用。

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

在 C++ 中,我们可以通过使用 friend 关键字来将一个函数或类声明为另一个类的友元,从而获得访问该类中私有成员的权限。

友元函数:

在一个类中,如果某个函数被声明为该类的友元函数,就能够访问该类中所有的成员(包括私有成员)。下面是一个简单的例子:

class A {
private:
    int a_;

    friend void foo(A& obj);
};

void foo(A& obj) {
    obj.a_ = 10;    // 可以访问 A 类的私有成员变量
}

在上述示例中,我们定义了一个类 A,其中包含一个私有成员变量 a_,并将全局函数 foo 声明为 A 类的友元函数。函数 foo 可以直接访问 A 类对象的私有成员变量 a_

友元类:

在一个类中,如果另一个类被声明为其友元,则该类中的所有成员函数都可以访问该友元类中的所有成员(包括私有成员)。下面是一个简单的例子:

class B;

class A {
private:
    int a_;

    friend class B;
};

class B {
public:
    void foo(A& obj) {
        obj.a_ = 10;    // 可以访问 A 类的私有成员变量
    }
};

在上述示例中,我们定义了两个类 AB,其中 A 中包含一个私有成员变量 a_,并将 B 声明为 A 类的友元类。类 B 中的成员函数 foo 可以直接访问 A 类中的私有成员变量 a_

需要注意的是,友元关系是单向的,即如果类 A 是类 B 的友元,则不一定意味着类 B 也是类 A 的友元。此外,友元关系破坏了封装性,应该慎用。只有当必须进行跨类访问时,才应该使用友元函数或友元类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Alen.Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值