什么是朋友流
What is friend ostream
我对这行代码在我的头文件中到底是什么意思有点困惑。
friend ostream & operator << (ostream &, const something &);
有人可以为我澄清吗?
这行代码表示运算符<<是某物的朋友(因为它列在某物类定义中)。 这意味着运算符<<函数可以访问其中的变量。
&here作为参数意味着你在调用方法时传入对象,这些参数只是这些参数对象的另一个名称。 返回 ostream &意味着您将返回 ostream 参数,以便您可以将<<表达式连接在一起,避免在使用一个全局 cout 时创建新的"cout"。
正如在许多地方提到的,friend
是绕过C++的正常保护机制 - 它允许有问题的函数访问受保护/私有成员,这通常只有类成员才能做到。
您经常会看到操作员声明为好友,因为运算符从不在类本身内部,但通常需要修改类中的某些内容和/或访问私人信息。 也就是说,您可能不希望外部函数能够处理您的内部指针等,但您可能希望能够将它们打印出来以获取状态等。否则你不会看到它们经常使用——从技术上讲,它破坏了封装——但运算符是一种特例。
C++ class
可以将另一个类或函数声明为friend
。友好类和方法可以访问类的私有成员。 因此,未在任何类中定义的自由运算符方法 <<
可以将something
插入到流中,并查看并使用 something
的私有成员来完成其工作。 假设something
complex
:
class complex {
private:
double re;
double im;
public:
complex(double real = 0.0, double imag = 0.0) : re(real), im(imag) {}
friend ostream & operator<<(ostream& os, complex& c);
};
ostream & operator<<(ostream& os, complex& c){
os << c.re << std::showpos << c.im;
return os;
}
friend
关键字可以命名函数或整个类。在任一情况下,都意味着允许命名函数或命名类的实现访问出现friend
声明的类的private
和protected
成员。
在这种情况下,这意味着允许operator<<
函数的这种特定重载访问something
类的内部,以便写入输出流,例如 std::cout
.
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- 警告处理为错误这里有什么问题
- 什么时候调用组成单元对象的析构函数
- 朋友声明的复杂范围界定规则有什么意义?
- 朋友定义函数的名称空间是什么
- 在这种情况下,我们可以使用静态而不是朋友吗,还有其他解决方案是什么
- 在模板类中编写朋友函数声明的正确方法是什么?
- 我们无法在本地类中定义朋友函数的原因是什么?
- 使用VCPKG与朋友共享您的项目的最佳方法是什么?
- 朋友在课堂和外班上的功能,它有什么区别
- 什么是朋友流
- 类模板中定义的朋友函数范围定义的范围是什么?
- 当作为朋友的类具有相同名称的成员变量时会发生什么
- 朋友调用虚拟私有方法-应该发生什么
- 带有模板的类模板 同学朋友,这里到底发生了什么?
- 请解释一下这个朋友声明是什么意思
- 朋友操作符的代码示例?c++头文件,朋友在这里做什么
- 什么时候应该使用朋友类
- 朋友迭代器和朋友类迭代器在c++中的思想有什么不同
- 朋友功能的安全风险是什么