• 输入操作符重载(读写文件)


    如文章 C加加辅导袁老师:输出操作符重载 中描述的,输出操作符重载可以让类只实现一个函数,就可以无差别的输出类对象到控制台和文件。

    同样的,从控制台或者文件输入类对象,也可以通过重载函数(输入操作符>>函数)来实现:

    准备工作

    为此,我们需要要准备一个文本文件students.txt。

    并打开文本文件students.txt,往里面添加一行数据:

    001 zhangsan 18 1995-09-08

    程序逻辑

    这个文件的内容会被我们的代码读取到。

    读到文件的内容会被存到内存对象中。

    我们接下来再把这个对象的成员数据打印到控制台。

    完整程序

    1. #include
    2. #include
    3. #include
    4. class Student
    5. {
    6. friend std::ostream& operator<<(std::ostream& os, const Student& stu);
    7. //由于输入操作符函数会写(修改)对象的成员变量,所以不可以传const参数
    8. friend std::istream& operator>>(std::istream& os, Student& stu);
    9. public:
    10. std::string m_id;//学号
    11. std::string m_name;//姓名
    12. int m_age;//年龄
    13. std::string m_date;//生日
    14. };
    15. std::ostream& operator<<(std::ostream& os, const Student& stu)
    16. {
    17. os
    18. << stu.m_id << " "
    19. << stu.m_name << " "
    20. << stu.m_age << " "
    21. << stu.m_date;
    22. return os;
    23. }
    24. std::istream& operator>>(std::istream& is, Student& stu)
    25. {
    26. is
    27. >> stu.m_id
    28. >> stu.m_name
    29. >> stu.m_age
    30. >> stu.m_date;
    31. return is;
    32. }
    33. int main(int argc, char** argv)
    34. {
    35. //定义一个学生对象
    36. Student stu;
    37. std::ifstream fin("students.txt");
    38. if (!fin.is_open())
    39. {
    40. std::cout << "error! can not open file students.txt!" << std::endl;
    41. return -1;
    42. }
    43. fin >> stu;//从文件中读取信息赋值给stu
    44. //输出学生信息到文件
    45. std::cout << stu << std::endl;
    46. return 0;
    47. }

    文件students.txt的内容及程序输出:

  • 相关阅读:
    05_css选择器的使用
    Jmeter测试关联接口
    [附源码]java毕业设计超市收银系统论文
    Spring中的AOP翻转的使用与在事务管理中的表现
    Rancher部署K8S集群
    建设网站制作公司的选择标准是什么?
    JVM学习一
    github使用教程
    jmeter学习记录
    JavaScript代码是怎么在浏览器里面运行起来的?
  • 原文地址:https://blog.csdn.net/ClamReason/article/details/126686795