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



