日志12
在C++中,友元函数(friend function)是一种可以访问类的私有成员和保护成员的特殊函数。友元函数并不是类的成员函数,而是定义在类外的普通函数。但由于被声明为友元,它可以直接访问类的私有和保护成员。
友元函数的特点
- 访问权限:友元函数可以访问类的私有和保护成员。
- 非成员函数:友元函数是类外的普通函数,不属于类的成员函数。
- 需要显式声明:友元函数必须在类的内部通过关键字
friend
声明。
友元函数的使用场景
- 当需要某些外部函数对类的私有成员进行操作时,可以使用友元函数。
- 两个类之间需要共享数据时,可以通过友元函数实现。
友元函数的声明与实现
示例代码
以下是一个友元函数的简单示例:
#include <iostream> using namespace std; // 定义一个类 class Box { private: double length; // 私有成员 double width; double height; public: // 构造函数 Box(double l, double w, double h) : length(l), width(w), height(h) {} // 声明友元函数 friend double calculateVolume(const Box& b); }; // 定义友元函数 double calculateVolume(const Box& b) { // 直接访问类的私有成员 return b.length * b.width * b.height; } int main() { Box box(2.0, 3.0, 4.0); cout << "Box volume: " << calculateVolume(box) << endl; return 0; }
输出结果
Box volume: 24
注意事项
- 友元函数的声明:必须在类内部进行,但实现可以在类外部。
- 友元关键字的使用:友元函数通过
friend
声明,它是类对外的一种“友好行为”,但要谨慎使用,过多的友元可能破坏封装性。 - 友元函数与继承:友元关系不能继承,子类不会自动成为友元函数的友元。