在C++中,friend
关键字用于声明一个函数或类是另一个类的友元(friend)。被声明为友元的函数或类可以访问包含它的类的私有成员。
使用friend
关键字应当谨慎,因为它破坏了封装性,增加了类之间的耦合性。友元关系应该仅在确实需要访问私有成员的情况下使用。
友元函数:
class MyClass {
private:
int privateMember;
public:
MyClass() : privateMember(42) {}
// 声明友元函数
friend void friendFunction(const MyClass& obj);
};
// 友元函数的定义
void friendFunction(const MyClass& obj) {
std::cout << "Friend Function accessing private member: " << obj.privateMember << std::endl;
}
int main() {
MyClass myObject;
// 友元函数可以访问私有成员
friendFunction(myObject);
return 0;
}
友元类:?
class AnotherClass {
public:
void accessMyClassPrivateMember(const MyClass& obj) {
std::cout << "AnotherClass accessing private member: " << obj.privateMember << std::endl;
}
};
class MyClass {
private:
int privateMember;
// 声明友元类
friend class AnotherClass;
public:
MyClass() : privateMember(42) {}
};
int main() {
MyClass myObject;
AnotherClass anotherObject;
// 友元类的成员函数可以访问私有成员
anotherObject.accessMyClassPrivateMember(myObject);
return 0;
}
?
?C++11对friend关键字进行改进:
?
在C++11中,声明一个类为另外一个类的友元时,不需要使用class关键字。
可以利用这个特性为类模板声明友元
这样可以在模板实例化的时候确定一个模板类是否有友元,以及谁是这个模板类的友元。