C++学习day04

一、文件操作 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();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值