• 第四十六篇,C++中的文件IO函数,类型转换与智能指针


    文件IO
    =====================================================
       1.涉及到的类
            #include <fstream> 
            ifstream  --》读取文件
            ofstream  --》写入文件

       2.读取文件
           第一步:定义ifstream类的对象
                         ifstream (const char* filename, ios_base::openmode mode = ios_base::in);
                                 参数:filename --》文件路径名
                                       mode --》权限  ios_base::in  可读              
                                                      ios_base::out 可写
           第二步:打开文件,如果文件不存在,打开会失败
                         void open(const char* filename,ios_base::openmode mode = ios_base::in);
           第三步:读取文件
                         get()   //一次读取一个字符
                              int get();
                         read()  //读取指定数量的字符
                              istream& read (char* s, streamsize n);
                                      参数:s --》存放读取的内容
                                            n --》你打算读取多少字节数据
                         getline() //一次最多只能读取一行内容,类似于fgets()
                              istream& getline (char* s, streamsize n);
                              istream& getline (char* s, streamsize n, char delim);
                                      参数:delim --》默认情况下getline遇到\n结束读取
                                                      这个参数可以指定getline遇到特定字符结束读取
           第四步:关闭文件
                        void close();

       3.写入文件
          第一步:定义ofstream类的对象
                        ofstream (const char* filename, ios_base::openmode mode = ios_base::out);
          第二步:打开文件,如果文件不存在,可以新建
                        void open(const char* filename,  ios_base::openmode mode = ios_base::out);
          第三步:写入文件
                        ostream& write (const char* s, streamsize n);
          第四步:关闭文件
                        void close();


    类型转换
    =====================================================
       1.C语言只有一种粗暴的转换方式---》强制类型转换
       
       2.C++新增四种常见的类型转换方式
             以下四种类型转换,都是模板函数

             第一种:dynamic_cast  //用于父类指针指向子类对象的转换(多态)(本来可以自动转换,不需要使用这个函数,但是规范写法还是写上)
                     父类 *p=dynamic_cast<父类 *>(子类指针);


             第二种:const_cast    //用于把一个const修改的指针,赋值给一个非const修饰的指针
                        People people1;
                    const People *p=&people1;
                    //People *q=p; 编译语法错误
                    People *q=const_cast<People *>(p); 

             第三种:static_cast  //子类指针指向父类的转换
                        static_cast<类型1>(类型2)  

             第四种:reinterpret_cast //强制转换  


    智能指针
    =====================================================
       1.概念
           为了解决堆空间自动释放这个问题,发明了智能指针
           实际开发中总有程序员忘记释放堆空间 

       2.智能指针的原理
           所谓的智能指针,本质上是个模板类
           使用智能指针,只需要创建模板类的对象即可(对象创建自动调用构造--》分配的堆空间 对象释放自动调用析构--》释放堆空间)
           程序员就不必烦恼堆空间的申请和释放问题
           template<typename T>
           class xxxx  //模板类--》可以匹配任何合法类型
           {
             public:
                   构造函数
                   {
                       给指针分配堆空间
                   }
                   析构函数
                   {
                       给指针释放堆空间
                   }
             private:
                   T *指针;
           };

           xxxx<int> 对象; //对象本身并不是指针

       3.常见的智能指针
           C++11之前:
                   auto_ptr --》智能指针(模板类的名字)
           C++11以后:
                   unique_ptr --》智能指针(模板类的名字)   
                   头文件 #include <memory>
                           公式: unique_ptr<模板类型>  对象();
                           例如: unique_ptr<int> p(new int);  //分配一个int,p本身不是指针,是类的对象
                                      *p=666;
                              unique_ptr<int[]> p(new int[10]);
                              p[0]=15;
                              p[1]=56;
                              p[2]=89;
                           注意:如果是申请一个int大小,使用的使用采用解引用
                                 如果是申请多个int大小,使用的使用采用中括号

  • 相关阅读:
    Dubbo-时间轮设计
    【XGBoost】第 2 章:深度决策树
    200道Java面试题
    google colab上让 python 视觉化套件 matplotlib 显示中文
    Verilig语法之——Generate 结构
    CSS清除浮动的五种方法(超详细)
    [附源码]Python计算机毕业设计SSM家教管理系统(程序+LW)
    BlueBridge---------------BASIC-11 十六进制转十进制
    自定义类似微信效果Preference
    【Transformers】第 4 章:自回归和其他语言模型
  • 原文地址:https://blog.csdn.net/weixin_44651073/article/details/125548161