友元函数
时间: 2023-11-19 14:08:42 浏览: 41
友元函数是指在一个类中,可以让其他不属于这个类的函数访问该类的私有成员和保护成员。友元函数可以是全局函数、另一个类的成员函数或者是其他类的非成员函数。在C++中,可以通过在类的定义中声明友元函数来实现这一功能。
友元函数的声明需要在类的定义中进行,可以通过关键字“friend”来声明。例如:
```
class MyClass {
private:
int a;
public:
friend void friendFunction(MyClass& obj);
};
void friendFunction(MyClass& obj) {
obj.a = 10; // 可以访问 MyClass 中的私有成员 a
}
```
在上面的例子中,friendFunction是MyClass类的友元函数,它可以访问MyClass中的私有成员a。在函数中,我们可以直接使用obj.a来访问MyClass的私有成员a。
需要注意的是,友元函数并不属于类的成员函数,因此不能直接使用类的成员名称,必须通过传递一个对象的引用来访问类的成员。另外,友元函数并不具有类的访问权限,也就是说,它不能访问类的静态成员。
相关问题
友元函数定义
友元函数是指在类的定义中,声明在类外部的非成员函数,但是可以访问类的私有成员和保护成员。其定义方式为在类的定义中通过关键字 `friend` 来声明该函数。
友元函数的一般形式为:
```
class MyClass {
// 声明友元函数
friend void MyFriendFunction(MyClass &obj);
// 成员变量和函数
private:
int x;
public:
MyClass(int val) : x(val) {}
};
// 友元函数的定义
void MyFriendFunction(MyClass &obj) {
// 可以访问 MyClass 中的私有成员和保护成员
cout << obj.x << endl;
}
```
注意,友元函数虽然可以访问类的私有成员和保护成员,但是它并不是类的成员函数,因此在函数中不能使用 `this` 指针来访问成员变量和成员函数。
友元函数代码
下面是一个示例代码,展示了如何在C++中定义和使用友元函数:
```cpp
#include <iostream>
using namespace std;
class MyClass {
private:
int x;
public:
MyClass(int a) {
x = a;
}
friend void printX(MyClass obj); //声明友元函数
};
void printX(MyClass obj) {
cout << "The value of x is: " << obj.x << endl; // 可以访问私有成员x
}
int main() {
MyClass obj1(10);
printX(obj1); //调用友元函数
return 0;
}
```
在上面的代码中,我们定义了一个名为`MyClass`的类,在类中定义了一个私有成员变量`x`和一个公有构造函数。我们还声明了一个友元函数`printX`,该函数可以访问`MyClass`类的私有成员变量`x`。在主函数中,我们创建了一个`MyClass`对象`obj1`,并将其作为参数传递给`printX`函数,从而打印出了`x`的值。