如文章 C加加辅导袁老师:输出操作符重载 中描述的,输出操作符重载可以让类只实现一个函数,就可以无差别的输出类对象到控制台和文件。
同样的,从控制台或者文件输入类对象,也可以通过重载函数(输入操作符>>函数)来实现:
为此,我们需要要准备一个文本文件students.txt。
并打开文本文件students.txt,往里面添加一行数据:
001 zhangsan 18 1995-09-08
这个文件的内容会被我们的代码读取到。
读到文件的内容会被存到内存对象中。
我们接下来再把这个对象的成员数据打印到控制台。
- #include
- #include
- #include
-
- 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的内容及程序输出:
