重载插入运算符和流提取运算符
时间: 2023-12-03 22:43:47 浏览: 43
重载插入运算符(<<)和流提取运算符(>>)是C++中常见的运算符重载操作。插入运算符用于将对象的数据成员插入到输出流中,流提取运算符则用于从输入流中提取数据,并将其赋值给对象的数据成员。
下面是一个示例代码,演示如何重载插入运算符和流提取运算符:
```c++
#include <iostream>
#include <string>
using namespace std;
class Person {
public:
string name;
int age;
friend ostream& operator<<(ostream& os, const Person& p) {
os << "Name: " << p.name << ", Age: " << p.age;
return os;
}
friend istream& operator>>(istream& is, Person& p) {
cout << "Enter name: ";
is >> p.name;
cout << "Enter age: ";
is >> p.age;
return is;
}
};
int main() {
Person p1;
cin >> p1;
cout << p1 << endl;
return 0;
}
```
在上面的代码中,我们定义了一个名为Person的类,并在其中重载了插入运算符和流提取运算符。插入运算符使用了友元函数的形式,接受一个输出流和一个常量引用的Person对象作为参数,并将对象的数据成员写入输出流中,最后返回输出流。流提取运算符同样使用了友元函数的形式,接受一个输入流和一个Person对象的引用作为参数,并从输入流中读取数据,将其分别赋值给对象的数据成员,最后返回输入流。
在主函数中,我们创建了一个Person对象p1,并使用流提取运算符从标准输入流中读取数据并赋值给p1的数据成员。随后,我们又使用重载的插入运算符将p1对象的数据成员输出到标准输出流中。
需要注意的是,上面的代码中使用了友元函数来重载流运算符。这是因为流运算符本质上是对流对象进行操作,而不是对类中的成员函数进行操作。因此,为了能够访问流对象的私有成员,我们需要使用友元函数来实现运算符重载。