C++ 友元
在C++中,友元(Friend)功能是一个重要的特性,它允许一个类或函数访问另一个类的私有(private)和保护(protected)成员。使用友元特性可以提高程序的灵活性,但同时也要小心管理,因为它破坏了类的封装性。
- 友元函数
- 友元类
- 友元成员函数
友元不具有继承性和传递性。
友元函数
一个类可以将某些非成员函数声明为其友元,这样这些函数就可以访问该类的所有私有和保护成员。声明一个友元函数通常在类定义中用 friend
关键字标识:
class MyClass {
friend void friendFunction(MyClass &obj); // 将friendFunction声明为友元
private:
int value;
};
void friendFunction(MyClass &obj) {
// 可以访问MyClass的私有成员
std::cout << "Value: " << obj.value << std::endl;
}
友元类
一个类也可以将其他类声明为友元,这样友元类的所有成员函数都可以访问原始类的私有和保护成员。例如:
class MyClass {
friend class FriendClass;
private:
int value;
};
// frientClass作为友元类可以访问原始类的所以成员
class FriendClass {
public:
void display(MyClass &obj) {
std::cout << "Value: " << obj.value << std::endl;
}
};
友元成员函数
将某个类的特定成员函数设为另一个类的友元,而不是整个类:
class MyClass;
class AnotherClass {
public:
void show(MyClass &obj);
};
class MyClass {
friend void AnotherClass::show(MyClass &obj);
private:
int value;
};
// AnotherClass类的show成员函数被MyClass类声明为友元,因此,show可以访问MyClass类的所有成员
void AnotherClass::show(MyClass &obj) {
std::cout << "Value: " << obj.value << std::endl;
}
友元函数和友元成员函数的区别
- 友元函数:独立的非成员函数,例如是全局函数,可以访问类的私有和保护成员。
- 友元成员函数:另一个类的成员函数,被允许访问当前类的私有和保护成员。