C++ friend

在C++中,friend是一个关键字,用于声明一个非成员函数或类可以访问另一个类的私有成员。

例如,我们有一个名为ClassA的类:

class ClassA {
public:
    ClassA(int a) : memberA(a) {}

private:
    int memberA;

    friend void friendFunction(ClassA obj);
    friend class FriendClass;
};

其中,friendFunction是一个自由函数,它被声明为ClassA的朋友(即友元函数),FriendClass是一个类,它被声明为ClassA的友元类。

这意味着,friendFunctionFriendClass都可以直接访问ClassA的私有成员(memberA),而不需要通过ClassA的公有接口来进行访问。

下面是一个例子:

void friendFunction(ClassA obj) {
    std::cout << "friendFunction can access ClassA's memberA: " << obj.memberA << std::endl;
}

class FriendClass {
public:
    void doSomething(ClassA obj) {
        std::cout << "FriendClass can access ClassA's memberA: " << obj.memberA << std::endl;
    }
};

int main() {
    ClassA obj(42);
    friendFunction(obj);

    FriendClass f;
    f.doSomething(obj);

    return 0;
}

在上面的代码中,我们创建了一个ClassA的对象obj,并将其传递给friendFunctionFriendClass的成员函数doSomething。这两个函数都可以访问obj的私有成员memberA,因为它们被声明为了ClassA的朋友。

friend关键字允许我们在不暴露类的私有成员的情况下,让其他非成员函数或类可以访问这些私有成员。但是,使用friend关键字可能会破坏封装性和抽象性,因此必须谨慎使用。

[1]
[2]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值