• 南京邮电大学C++实验四(流运算符的重载及文件的使用)


    一、实验原理及内容

    实验题目1:

    文件(可事先用记事本建立)d:\course.txt 中存储有若干门课的课程名称和对应选课人数,存储形式示意如下(真正的记录未必是3 条)。

    高级语言程序设计3018
    面向对象程序设计及c++ 487
    程序设计(实践)2046

    定义类Course,有2 个私有数据成员表达课程名称和对应选课人数,类中重载提取运算符“>>”和插入运算符“<<”,分别用于从文件中读取信息以及向屏幕输出信息。主函数中定义ifstream 对象以及Course 类的对象,通过“>>”依次读取文件记录,再通过“<<”输出至屏幕。最后输出共有多少条记录。

    实验解答:

    (1) 参考实验指导教材中Course类的定义,给出在类外实现重载提取运算符“>>” 的函数定义:

    istream & operator>>(istream & in,Course & p)
    {
    	in>>p.name;
    	in>>p.number;
    	return in;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    (2) 参考实验指导教材中Course类的定义,给出在类外实现重载插入运算符“<<” 的函数定义:

    ostream & operator<<(ostream & out,const Course & p)
    {
    	out<<p.name<<"  "<<p.number<<endl;
    	return out;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5

    实验题目2:

    事先用Windows的记事本建立一个文本文件ff.txt。
    ① 编写一个函数void ReadFile(char* s)实现读取以s串为文件名的文本文件的内容在屏幕上显示。
    ② 编写一个函数void Change(char *s1,char *s2)将文本文件中的小写字母全部改写成大写字母生成一个新文件ff2.txt。
    ③ 主函数中调用ReadFile(“ff.txt”);显示ff.txt的内容,调用Change (“ff.txt” ,“ff2.txt”);根据ff.txt文件作修改生成一个新的文件ff2.txt,最后再调用ReadFile(“ff2.txt”);显示新文件的内容。

    实验解答:
    void ReadFile(char *s)   //请完成代码
    {  
        ifstream inf(s);
            if (!inf)
            {
                cout << "cannot open " << s << endl;
                return;
            }
            char ch;
            while (inf.get(ch))
            {
                cout << ch;
            }
            inf.close();
     
    }
    void Change(char *s1,char *s2)  //请完成代码
    {
       ifstream inf(s1);
        if (!inf)
        {
            cout << "cannot open " << s1 << endl;
            return;
        }
        ofstream ofile(s2);
        if (!ofile)
        {
            cout << "cannot open " << s2 << endl;
            return;
        }
        char ch;
        while (inf.get(ch))
        {
            if (ch >= 'a' && ch <= 'z')
                ch -= 32;
            ofile.put(ch);
        }
        inf.close();
        ofile.close();
        cout << endl;
    return;
    } 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    实验题目3(选做):

    定义学生类,该类包含学生的一些基本信息:学号、姓名、性别、成绩。定义流对象,实现用write函数将学生信息以二进制方式写到磁盘文件stu.dat中。再用read将磁盘中的学生信息读到内存显示在屏幕上。

    二、实验小结(包括问题和解决方法、心得体会、意见与建议等)

    (一)实验中遇到的主要问题及解决方法

    1. 在题目(1)中,要求重载“>>”和“<<”以方便地实现输入和输出,结合第三次实验中这两个运算符的重载,理解为什么“>>”和“<<”既可以用于键盘输入/屏幕输出和文件读写?

      因为 ostreamistream 是输入输出流、文件流、字符串流的基类,实现多态性。

    2. 在题目(2)中如将主函数作如下修改,请补充完整程序:

    int main( )
    {     
    	char s1[20],s2[20];
    	cin>>s1>>s2;                       //从键盘上输入要操作的文件名
    	Change(__s1,s2_); 
    	//调用Change函数将s1串为文件名的内容修改后保存到以s2串为文件名的文本文件中
    	ReadFile(_s2__);  //读取s2串为文件名的文本内容
    	return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    1. 其它问题及解决方法

    (二)实验心得

    文件的处理还不太熟悉,要多加练习。
    实现了文件读写操作,简单地文件处理。

  • 相关阅读:
    C++QT开发——GraphicsView(图形视图)
    win11无法打开chm格式的文件
    cmd常用命令
    pytest自动化测试指定执行测试用例
    【论文阅读】Scene Text Telescope: Text-Focused Scene Image Super-Resolution
    Python字典
    transformers AutoModelForMaskedLM简单使用
    贝锐蒲公英智慧运维方案:实现远程网络监控、管理、维护工业设备
    C语言——动态内存分配
    项目经理如何提高团队的开发效率?
  • 原文地址:https://blog.csdn.net/qq_35500719/article/details/126849256