在 C++ 中,如果你希望一个函数成为一个类的友元函数(即允许该函数访问类的私有成员),需要进行两个步骤:
-
友元函数的声明: 在类的声明中使用
friend
关键字声明友元函数。 -
友元函数的定义: 在类外部实现友元函数时,不需要再使用
friend
关键字,只需正常地定义函数即可。
让我们通过一个简单的示例来说明:
#include <iostream>
using namespace std;
class MyClass {
private:
int num;
public:
MyClass() : num(0) {}
// 友元函数的声明
friend void displayNum(const MyClass& obj);
};
// 友元函数的定义,这里不需要再使用 friend 关键字
void displayNum(const MyClass& obj) {
// 可以直接访问 MyClass 的私有成员 num
cout << "Num in MyClass: " << obj.num << endl;
}
int main() {
MyClass obj;
displayNum(obj); // 调用友元函数 displayNum
return 0;
}
在上面的示例中:
-
friend void displayNum(const MyClass& obj);
是在MyClass
中声明displayNum
函数为友元函数的语法。这表示displayNum
函数可以访问MyClass
的私有成员。 -
在类外部定义
displayNum
函数时,不需要再加上friend
关键字,也不需要类的名称!只需定义函数的签名和实现即可。 -
所以友元函数可以看作已经从类中被独立出来了。
这种设计允许你在需要时仅在类声明中显式指定友元函数,并且在实现时不需要重复指定。