C++实验4 模板和IO流

这篇博客介绍了C++实验的内容,包括如何重载运算符'<<'和'>>'以实现电话号码的输入输出,标准输入输出流的格式控制,以及磁盘文件的读写操作。实验中通过编写程序实现输入学生数据到文件,按姓名查询等功能,强调了非成员友元函数在重载运算符中的应用。同时,讨论了堆排序的实现和类模板的使用,使数据成员可以存储任意类型的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【实验目的】
掌握运算符重载的基本方法。
掌握标准输入输出的使用及格式控制方法。
掌握磁盘文件(如二进制文件、文本文件)的输入输出的方法。
【实验内容】
1.编写程序,重载运算符“<<”和“>>”,使用户能直接输入和输出固定电话的号码。电话号码以如下形式输入和输出: (027)xxxxxxxx
重载输入输出流进行类对象的输入与输出,固定电话号码类包含区号以及手机号string数据类型
Code:

#include<iostream>
#include<string>
using namespace std;
class Tel {
   
private:
 string _Area;
 string _Tel;
public:
 Tel() {
   }
 //返回is引用 保证只有一个输入流对象
 friend istream& operator>>(istream &in, Tel &tel) {
   
  cout << "请输入正确的电话号码:";
  string Num;
  in >> Num;
  int rightBrack = Num.find(")");
  tel._Area = Num.substr(1, rightBrack);
  tel._Tel = Num.substr(rightBrack + 1, Num.length());
  return in;
 }
 friend ostream& operator<<(ostream &out, Tel &tel) {
   
  //输出带括号的电话号码
  cout << "输出电话号码为:";
  out << "(" + tel._Area + ")" + tel._Tel << endl;
  return out;
 }
};
void main() {
   
 Tel tel;
 cin >> tel;
 cout << tel;
 return;
}

2.编写一个程序,实现以下功能:
(1)输入一系列的学生成绩(包括学号、姓名、成绩等数据)存放在文件stud.dat中。
(2)从stud.dat文件中读出这些数据并显示出来。
(3)在stud.dat文件中按姓名进行查询,如输入“李”,则将所有姓李的学生的数据都显示出来。所编写的程序运行结果示例如下:
选择(1:输入数据 2:输出数据 3:按姓名查找数据 其他退出):1
输入数据
学生人数:5
第1个学生(学号 姓名 成绩):1001 张三 89
第2个学生(学号 姓名 成绩):1002 李四 78
第3个学生(学号 姓名 成绩):1003 王五 92
第4个学生(学号 姓名 成绩):1004 李沅芷 88
第5个学生(学号 姓名 成绩):1005 赵六 56
选择(1:输入数据 2:输出数据 3:按姓名查找数据 其他退出):2
输出数据
学号 姓名 成绩
1001 张三 89
1002 李四 78
1003 王五 92
1004 李沅芷 88
1005 赵六 56
选择(1:输入数据 2:输出数据 3:按姓名查找数据 其他退出):3
输入姓名:李
输出匹配的结果:
学号 姓名 成绩
1002 李四 78
1004 李沅芷 88
选择(1:输入数据 2:输出数据 3:按姓名查找数据 其他退出):3
输入姓名:李四
输出匹配的结果:
学号 姓名 成绩
1002 李四 78
选择(1:输入数据 2:输出数据 3:按姓名查找数据 其他退出):0
【提示】在重载运算符“<<”和“>>”时,不能将其定义为类的成员函数,只能定义为类的友元函数
Code:

#include<iostream>
#include<fstream>
#include<cstring>
using namespace std;
char name[13];
class Student {
   
private:
 char Number[13];
 char Name[13];
 double Grade;
 static int i;
public:
 friend istream& operator>>(istream &in, Student *stuIn) {
    //先写入变量 再写入文件
  ofstream binFile;//写入文件
  binFile
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值