如文章 C加加辅导袁老师:输出操作符重载 中描述的,输出操作符重载可以让类只实现一个函数,就可以无差别的输出类对象到控制台和文件。
同样的,从控制台或者文件输入类对象,也可以通过重载函数(输入操作符>>函数)来实现:
准备工作
为此,我们需要要准备一个文本文件students.txt。
并打开文本文件students.txt,往里面添加一行数据:
001 zhangsan 18 1995-09-08
程序逻辑
这个文件的内容会被我们的代码读取到。
读到文件的内容会被存到内存对象中。
我们接下来再把这个对象的成员数据打印到控制台。
完整程序
#include <iostream>
#include <fstream>
#include <string>
class Student
{
friend std::ostream& operator<<(std::ostream& os, const Student& stu);
//由于输入操作符函数会写(修改)对象的成员变量,所以不可以传const参数
friend std::istream& operator>>(std::istream& os, Student& stu);
public:
std::string m_id;//学号
std::string m_name;//姓名
int m_age;//年龄
std::string m_date;//生日
};
std::ostream& operator<<(std::ostream& os, const Student& stu)
{
os
<< stu.m_id << " "
<< stu.m_name << " "
<< stu.m_age << " "
<< stu.m_date;
return os;
}
std::istream& operator>>(std::istream& is, Student& stu)
{
is
>> stu.m_id
>> stu.m_name
>> stu.m_age
>> stu.m_date;
return is;
}
int main(int argc, char** argv)
{
//定义一个学生对象
Student stu;
std::ifstream fin("students.txt");
if (!fin.is_open())
{
std::cout << "error! can not open file students.txt!" << std::endl;
return -1;
}
fin >> stu;//从文件中读取信息赋值给stu
//输出学生信息到文件
std::cout << stu << std::endl;
return 0;
}
文件students.txt的内容及程序输出:

本文介绍了如何在C++中通过重载输出操作符`<<`和输入操作符`>>`,实现在控制台和文件中无差别地读写Student对象。通过实例演示了如何读取文件内容并操作Student对象,展示了面向对象编程中此类操作符的重要应用。
9475

被折叠的 条评论
为什么被折叠?



