📜  C++中的Friend类和函数(1)

📅  最后修改于: 2023-12-03 14:59:50.261000             🧑  作者: Mango

C++中的Friend类和函数

在C++中,可以使用friend关键字来访问类的私有成员。一个友元可以是一个函数、另一个类或整个类的所有成员。在本文中,我们将讨论如何使用friend来创建友元类和函数。

友元函数

一个友元函数可以访问包含该函数的类的私有成员。为了让一个函数成为一个类的友元函数,我们需要在类中声明该函数的原型,并在该函数的定义前面添加friend关键字,如下所示:

class MyClass {
public:
    void publicFunction();
private:
    int privateMember;
    friend void friendFunction(MyClass&);
};

void friendFunction(MyClass& instance) {
    instance.privateMember = 42;
}

void MyClass::publicFunction() {
    friendFunction(*this);
}

在上面的代码示例中,friendFunctionMyClass的一个友元函数。该函数可以访问privateMember私有变量。我们可以通过类的公共成员函数(publicFunction)来调用该函数。

友元类

一个友元类可以访问包含该类的所有私有成员。要创建一个友元类,我们需要在该类的定义中将要访问该类的类声明为友元类,如下所示:

class MyClass {
public:
    void setPrivateMember(int x) { privateMember = x; }
private:
    int privateMember;
    friend class FriendClass;
};

class FriendClass {
public:
    void setPrivateMember(MyClass& instance, int x) {
        instance.privateMember = x;
    }
};

int main() {
    MyClass instance;
    FriendClass friendObj;
    friendObj.setPrivateMember(instance, 42);
}

在上面的代码示例中,FriendClassMyClass的一个友元类。该类可以访问MyClass中的所有私有成员(包括privateMember私有变量)。在main函数中,我们实例化了MyClassFriendClass的对象,并调用setPrivateMember函数来设置privateMember的值。

总之,友元类和友元函数是一种灵活的机制,可以允许类的外部代码访问类的私有成员。然而,它们应该被谨慎使用,因为它们破坏了数据封装的概念。