c++ 友元函数

友元函数(Friend function)是指在 C++ 中可以访问类的私有成员(私有变量和私有函数)的非成员函数或者其他类的成员函数。具体来说,友元函数并不是类的成员函数,但却能够访问类的所有成员,包括私有成员。

  1. 声明友元函数:
    友元函数的声明通常放在类的定义中,但不是类的成员函数。在类的定义中使用 friend 关键字声明友元函数。例如:
class MyClass {
private:
    int x;
    void privateMethod();

    friend void friendFunction(MyClass obj);  // 友元函数声明
};
  1. 声明友元类
class MyClass { // 定义一个类 MyClass
private:
    int privateData;

public:
    MyClass(int x) : privateData(x) {}  // 构造函数

    friend class FriendClass;  // 声明 FriendClass 为友元类
};

class FriendClass { // 定义一个类 FriendClass
public:
    void accessPrivateData(MyClass obj) {
        // 友元类 FriendClass 可以访问 MyClass 类的私有成员 privateData
        std::cout << "Private data in MyClass accessed by FriendClass: " << obj.privateData << std::endl;
    }
};

int main() {
    MyClass obj(5);
    FriendClass friendObj;

    friendObj.accessPrivateData(obj); // FriendClass 调用访问私有数据的函数

    return 0;
}

在上述代码中,FriendClass 被声明为 MyClass 的友元类,因此 FriendClass 可以访问 MyClass 的私有成员privateData。在 FriendClass 的 accessPrivateData 方法中,可以直接访问MyClass对象的私有数据 privateData。

  1. 定义友元函数:
    友元函数的定义不在类体内部,而是在类外部。定义时无需再使用 friend 关键字
void friendFunction(MyClass obj) {
    // 可以访问 MyClass 类的私有成员
    obj.x = 10;
    obj.privateMethod();
}
  1. 使用友元函数:
    友元函数可以直接访问类的私有成员,就像是类的成员函数一样。在友元函数中,可以通过类的对象来访问类的私有成员。

int main() {
MyClass obj;
friendFunction(obj); // 调用友元函数
return 0;
}

注意事项:
访问控制:虽然友元函数可以访问类的私有成员,但这并不意味着所有的函数都应该声明为友元函数。友元函数破坏了封装性原则,因此应当谨慎使用,仅在确实需要访问私有成员而无法通过公有接口实现时才使用。

设计考虑:在设计类时,尽量通过成员函数和成员变量的公有接口来操作对象的状态,避免过多地使用友元函数。友元函数的存在应该有其必要性和合理性。

扩展性:友元函数并不绑定到类的对象,因此无法继承或者重载友元函数。如果需要多态行为或者需要不同参数类型的支持,可能需要其他设计模式来替代友元函数。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值