📅  最后修改于: 2023-12-03 15:06:16.252000             🧑  作者: Mango
在C++中,<<
运算符通常用于将数据插入到流中以进行输出。事实上,许多C++程序员都习惯于使用<<
运算符来代替cout
。但是,对于某些类来说,即使是正确的使用<<
运算符也可能是不够的。这就是为什么我们需要使用朋友函数访问类中的私有成员变量。
在C++中,类可以将其他函数定义为朋友函数,以便它们可以访问该类中的私有成员变量。如果一个函数是类的朋友函数,那么它就可以访问私有的成员变量和方法。关键字friend
表示函数或类是一个友元。
class MyClass {
private:
int myVar;
public:
friend void myFriendFunction(MyClass& obj);
};
void myFriendFunction(MyClass& obj) {
obj.myVar = 42;
}
在上面的示例中,MyClass
类定义了一个名为myVar
的私有成员变量,并将myFriendFunction
定义为该类的朋友函数。myFriendFunction
可以在访问MyClass
的私有成员变量和方法时自由使用。
对于某些类来说,重载<<
运算符是很有用的,因为它允许将类对象输出到流中。然而,有时候即使是正确的使用<<
运算符也无法访问类的私有成员变量。这时,我们需要定义一个朋友函数作为<<
运算符的重载。这使得<<
运算符可以访问私有变量,从而实现必要的输出。
#include <iostream>
class MyClass {
private:
int myVar;
public:
MyClass(int x) : myVar(x) { }
friend std::ostream& operator<<(std::ostream& os, const MyClass& obj) {
os << obj.myVar;
return os;
}
};
int main() {
MyClass obj(42);
std::cout << obj << std::endl;
return 0;
}
在上面的示例中,我们定义了一个带有构造函数的类MyClass
,它有一个私有的成员变量myVar
。我们还重载了<<
运算符,并将其定义为MyClass
的朋友函数,以便它可以访问myVar
并将其插入到流中。
最后,我们在main
函数中创建了一个MyClass
对象,并使用<<
运算符将其输出到屏幕上。输出结果将是42
。
总之,重载<<
运算符并定义为朋友函数可以让它访问类的私有成员变量,并使类的对象可以直接插入到流中进行输出,这非常有用。