重载插入运算符"<<"必须采用成员重载
时间: 2023-07-19 13:13:54 浏览: 50
重载插入运算符`<<`并不一定必须采用成员函数重载,也可以采用友元函数重载。但是,如果我们要将重载插入运算符`<<`用于输出一个类对象的信息,那么我们通常会选择采用成员函数重载,因为成员函数可以访问类的私有成员,更方便地输出类对象的信息。
例如,我们可以将`<<`运算符重载为该类的成员函数,其原型如下:
```cpp
class MyClass {
public:
// 类定义中的其他成员函数和数据成员
friend ostream& operator<<(ostream& os, const MyClass& obj);
// 友元函数重载插入运算符<<,参数为输出流对象和该类的常量引用,返回值为输出流对象
};
ostream& operator<<(ostream& os, const MyClass& obj) {
// 输出该类对象的信息
os << "MyClass object with data: " << obj.data << endl;
// ...
return os;
}
```
在这个例子中,我们将`<<`运算符重载为`MyClass`类的友元函数,其参数包括一个`ostream`类型的输出流对象和一个`MyClass`类型的常量引用。这样,我们就可以通过`cout << obj`的形式来输出一个`MyClass`对象的信息。
虽然友元函数重载`<<`运算符也是可行的,但它需要在类定义之外定义,看起来不如成员函数重载直观。因此,通常我们会优先考虑将`<<`运算符重载为该类的成员函数。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)