一、文件操作 fstream
#include <fstream>
* 类对象: ofstream , ifstream , fstream
* 第一步:打开 open(文件名,
第二步:操作 读写
//内部含有流的读写指针(偏移) seek
//写: 块write 格式化fprintf << 行fputs 字符putc put
//读: 块read 格式化fscanf >> 行fgets getline 字符getc get
//判断结尾:eof
//流缓存区刷新:flush
*
第三步:关闭文件
fd.close();
二、模板
#include <typeinfo>
* 本质:使用一个万能的虚拟类型
* 单类定义:template <class 类型名称>
* 多类定义:template <class 类型名称1,class 类型名称2>
* 多个虚拟类型则使用逗号隔开
* 注意事项:虚拟类型只有后一句代码有效(if,for,while)
* 函数模板案例:
* 1.检测类型 typeid(value).name() 检测参数类型
* 2.自动以排序
* 同学们的疑问:
* 1.如果函数模板 和 普通函数形成重载条件,那么它优先调用谁?
* 答:优先调用普通的,如果没有则自动推导
* 2.既然优先调用普通函数,能不能显示指定调用模板函数呢?
* 答: 可以,使用参数模板即可(显示指定类型),调用时 "函数名<参数类型>(参数)"
* 优点:减少CPU推导的时间,所以推荐使用显示指定类型
* 结论:有了函数模板就可以不用写普通函数重载了,除非类型不满足
三、类模板
* 本质:使用一个万能的虚拟类型
* 单类定义:template <class 类型名称>
* 多类定义:template <class 类型名称1,class 类型名称2>
* 多个虚拟类型则使用逗号隔开
* *******************************
* 注意事项:虚拟类型只有后一句代码有效(if,for,while)
* 1.实例化模板类的时候必须使用<类型>指定显示类型
* 2.模板类成员类外实现的时候需要再加上 虚拟类型声明才可以
* 3.模板函数的创建时机 - (运行)调用的时候
*
* 4.类模板尽量不要分文件编写
* 4.1 如果硬要分文件编写,则只能引入源文件,不能引入头文件
* 4.2 我们可以定义一个 .hpp 的一个文件存放模板类的所有代码
* 直接引入 .hpp 文件即可
#include <iostream>
#include <string.h>
#include <fstream>
using namespace std;
int main()
{
fstream fd;
fd.open("text.txt",ios::in |ios::out);
if(fd.is_open() == false)
{
cout << "文件打开失败" << endl;
fd.open("text.txt",ios::trunc|ios::in |ios::out);
}
cout << "文件打开成功" << endl;
#if 0
char buf_name[20] = "张三";
char buf_pass[20] = "1234";
fd.write(buf_name,sizeof(buf_name));
fd.write(buf_pass,sizeof(buf_pass));
#endif
#if 0
char buf_name[20] = "张三";
char buf_pass[20] = "1234";
fd << buf_name << " " << buf_pass << endl;
#endif
#if 0
fd.put('W');
return 0;
#endif
//读取
#if 0
char buf_read_name[20];
char buf_read_pass[20];
fd.read(buf_read_name,sizeof(buf_read_name));
fd.read(buf_read_pass,sizeof(buf_read_pass));
cout << "姓名" << buf_read_name << endl;
cout << "年龄" << buf_read_pass << endl;
#endif
#if 1
char buf_read_name[20];
char buf_read_pass[20];
fd >> buf_read_name;
fd >> buf_read_pass;
cout << "姓名" << buf_read_name << endl;
cout << "年龄" << buf_read_pass << endl;
#endif
#if 0
char buf_ch;
while(fd.eof() == false)
{
buf_ch = fd.get();
cout << buf_ch;
}
cout << endl;
#endif
#if 0
char buf_read_lind[40];
fd.getline(buf_read_lind,sizeof(buf_read_lind));
cout << "行数据" << buf_read_lind << endl;
#endif
fd.close();
}