跳到主要内容

简述C++友元函数和友元类 ?

参考答案:

C++中的友元函数和友元类是一种特殊的访问控制机制,允许特定的非成员函数或非成员类访问类的私有和保护成员。

友元函数(Friend Function)

友元函数是一种特殊的非成员函数,它可以访问一个类的私有成员和保护成员。要在类中声明一个友元函数,需要在类定义中使用friend关键字,并指定函数的原型。例如:

class MyClass {
private:
    int myPrivateVar;

public:
    friend void friendFunction(MyClass& obj); // 声明友元函数
};

void friendFunction(MyClass& obj) {
    obj.myPrivateVar = 10; // 访问私有成员
}

在上面的例子中,friendFunction是一个友元函数,它可以访问MyClass的私有成员myPrivateVar

友元类(Friend Class)

友元类是一种特殊的非成员类,它可以访问另一个类的私有成员和保护成员。要在类中声明一个友元类,需要在类定义中使用friend关键字,并指定类的名称。例如:

class MyClass {
private:
    int myPrivateVar;

public:
    friend class FriendClass; // 声明友元类
};

class FriendClass {
public:
    void setMyPrivateVar(MyClass& obj, int value) {
        obj.myPrivateVar = value; // 访问MyClass的私有成员
    }
};

在上面的例子中,FriendClass是一个友元类,它可以访问MyClass的私有成员myPrivateVar

注意事项

  1. 友元关系不具有传递性。如果类A是类B的友元,类B是类C的友元,这并不意味着类A是类C的友元。
  2. 友元关系不具有交换性。如果类A是类B的友元,并不意味着类B是类A的友元,除非在类B中也声明类A为友元。
  3. 友元函数和友元类可以访问类的私有成员和保护成员,但它们不是类的成员函数,因此不能访问类的非公有成员(如私有继承的成员)。
  4. 使用友元函数和友元类时要谨慎,因为它们可能破坏封装性。在确实需要访问类的私有成员时,才考虑使用友元。