📅  最后修改于: 2023-12-03 14:39:54.069000             🧑  作者: Mango
在C++中,friend
是一个关键字,用于允许外部类或函数访问一个类的私有成员或保护成员。在本文中,我们将深入探讨friend
关键字以及与其相关的问题2。
friend
关键字的基本用法当我们声明一个类中的函数或类作为另一个类的friend
时,它会被视为另一个类的友元函数或友元类。友元函数或友元类可以访问其他类的私有成员或保护成员,这使得类的设计变得更加灵活。
下面是一个例子,它演示了如何将一个函数声明为一个类的友元函数:
#include <iostream>
class MyClass {
private:
int x;
public:
MyClass(int x) : x(x) {}
friend void printX(MyClass obj);
};
void printX(MyClass obj) {
std::cout << "x is " << obj.x << std::endl;
}
int main() {
MyClass obj1(10);
printX(obj1);
return 0;
}
在上面的例子中,printX
函数被声明为MyClass
类的友元函数,它可以直接访问MyClass
类的私有成员x
。在main
函数中,我们创建一个MyClass
对象,并将其传递给printX
函数。
下面是一个例子,它演示了如何将一个类声明为另一个类的友元类:
#include <iostream>
class MyClass {
private:
int x;
public:
MyClass(int x) : x(x) {}
friend class MyClassFriend;
};
class MyClassFriend {
public:
void printX(MyClass obj) {
std::cout << "x is " << obj.x << std::endl;
}
};
int main() {
MyClass obj1(10);
MyClassFriend obj2;
obj2.printX(obj1);
return 0;
}
在上面的例子中,MyClassFriend
类被声明为MyClass
类的友元类。MyClassFriend
类的成员函数printX
可以直接访问MyClass
类的私有成员x
。在main
函数中,我们创建一个MyClass
对象和一个MyClassFriend
对象,并将MyClass
对象传递给MyClassFriend
对象的printX
函数。
友元函数或友元类可以访问私有成员的原因是,它们被视为该类的扩展,可以访问类的私有成员和保护成员。这允许我们在一定程度上突破类的封装,使类的设计变得更加灵活。然而,需要注意的是,在使用友元函数或友元类时,应该尽量避免滥用它们,遵循最小化访问原则,以保证类的封装性。
本文介绍了friend
关键字的基本用法。我们演示了如何声明一个函数为友元函数,以及如何声明一个类为友元类。我们还解释了为什么友元函数或友元类可以访问私有成员。请记住,在设计类时,友元函数或友元类应该谨慎使用,以确保类的封装性。