友元函数可访问类的私有成员,需在类内用friend声明,常用于运算符重载等场景。

在C++中,友元函数(friend function)是一种特殊的函数,它不是类的成员函数,但可以访问该类的私有(private)和保护(protected)成员。通过使用friend关键字,可以在类内部声明一个非成员函数为友元,从而赋予其对类内部数据的访问权限。
友元函数的定义方式
要在类中定义一个友元函数,需要在类内部用friend关键字声明该函数。这个函数可以在类外部定义,就像普通函数一样。
基本语法如下:
class MyClass {private:
int data;
public:
MyClass(int d) : data(d) {}
// 声明友元函数
friend void display(const MyClass& obj);
};
// 定义友元函数
void display(const MyClass& obj) {
std::cout }
友元函数的使用场景
友元函数常用于以下几种情况:
立即学习“C++免费学习笔记(深入)”;
- 重载运算符时,比如让operator能输出类对象内容
- 需要多个类之间共享数据访问权限
- 某些工具函数需要直接访问类的内部状态,但又不适合成为成员函数
例如,实现cout 输出自定义类对象:
class Person {private:
std::string name;
int age;
public:
Person(std::string n, int a) : name(n), age(a) {}
friend std::ostream& operator };
std::ostream& operator os return os;
}
// 使用:
// Person p("Tom", 25);
// std::cout
注意事项与限制
使用友元函数时需要注意几点:
- 友元函数不属于类的成员函数,因此不能使用this指针
- 友元关系不具有继承性,也不能传递
- 友元函数的声明可以在类的private或public区域,效果相同
- 过度使用友元会破坏封装性,应谨慎使用
基本上就这些。友元函数提供了一种灵活机制,在保持封装的同时允许特定函数深入访问类内部。只要合理使用,是C++中非常实用的特性。











