• 【c++】iostreeam中的类为何不可以直接定义一个无参对象呢


    缘起

    #include <iostream>
    #include <fstream>
    #include <sstream>
    using namespace std;
     
    int main()
    {
       ofstream fs;          //输出文件流  (正确)
       ostringstream os;     //输出string流(正确)
       ostream o;            //输出普通流   (错误)
    }

    解惑

    头文件iostream定义了三个类iostream, istream, ostream(三个普通流), 都存在这样的问题:不可以直接定义无参数的对象。原因可以从编译器提示看出

           

    类中无参数的构造函数定义为protected,因此不可直接定义。

    为何这么设计

    iostream头文件定义读写控制窗口的类型,c++是跨平台的语言,不同的系统窗口操作是不同的,用户自己定义有些费劲,于是c++干脆定义了标准的输入对象cin,标准的输出对象cout。反正只是与窗口交互自己再去定义输入输出对象也没那必要。

    非得自己定义一个iostream对象可以吗?

    可以,有有参数的构造函数,两个例子

    #ostream对象

    #include <iostream> 
    #include <fstream> 
    int main () {
      std::filebuf fb;
      fb.open ("test.txt",std::ios::out);
      std::ostream os(&fb); 
      os << "Test sentence
    ";
      fb.close();
      return 0;
    }
    

    #istream对象

    #include <iostream> 
    #include <fstream> 
    int main () {
      std::filebuf fb;
      if (fb.open ("test.txt",std::ios::in))
      {
        std::istream is(&fb); 
        while (is)
          std::cout << char(is.get());
        fb.close();
      }
      return 0;
    } 
    

      

  • 相关阅读:
    Mac-安装Git以及Git的配置
    Mac 安装Maven,并设置环境变量
    Mac Tab自动补全键
    Eclipse 代码快捷键模板(一)
    网易博客迁移(2011-05-27)
    前端JS插件整理
    Ajax请求二进制流并在页面展示
    IDE中使用System.getProperty()获取一些属性
    Spring Boot:快速入门(二)
    c 语言 指针 与地址
  • 原文地址:https://www.cnblogs.com/kaituorensheng/p/3462254.html
Copyright © 2020-2023  润新知