zoukankan      html  css  js  c++  java
  • 【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;
    } 
    

      

  • 相关阅读:
    定位 -CLGeocoder
    定位
    定位
    定位- 汽车导航
    定位
    SVN
    githubRepository -- 使用
    git 常用指令
    ipad ------ 与iPhone的差别
    总结
  • 原文地址:https://www.cnblogs.com/kaituorensheng/p/3462254.html
Copyright © 2011-2022 走看看