📜  C ++ |朋友关键字|问题2(1)

📅  最后修改于: 2023-12-03 15:29:42.421000             🧑  作者: Mango

C++ | 朋友关键字 | 问题2

在C++中,friend关键字用于声明类的友元。友元函数或友元类可以访问指定类的私有成员和保护成员,这使得友元成员可以更加方便地访问私有成员而无需通过公共接口。

友元函数

在类声明中使用friend关键字声明一个函数,该函数可以访问该类的私有成员和保护成员。在类外定义这个友元函数时,函数名前不需要加类名限定符。

class MyClass {
private:
    int a;
    friend void myFunction(MyClass& obj); // 友元函数声明
};

void myFunction(MyClass& obj) {
    obj.a = 1; // 可以访问MyClass类的私有成员a
}

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

友元类

在类声明中使用friend关键字声明一个类,该类可以访问该类的私有成员和保护成员。在类外定义这个友元类时,类名前需要加类名限定符。

class MyClass {
private:
    int a;
    friend class MyFriendClass; // 友元类声明
};

class MyFriendClass {
public:
    void myFunction(MyClass& obj) {
        obj.a = 1; // 可以访问MyClass类的私有成员a
    }
};

MyClass obj;
MyFriendClass myFriend;
myFriend.myFunction(obj);

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

需要注意的是,友元关系不能被继承。如果BA的友元类,CB的派生类,则C不能访问A的私有成员。

总结

friend关键字可以用于声明友元函数和友元类,使其可以访问指定类的私有成员和保护成员。需要注意友元关系不能被继承。