博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【c++】iostreeam中的类为何不可以直接定义一个无参对象呢
阅读量:5980 次
发布时间:2019-06-20

本文共 1074 字,大约阅读时间需要 3 分钟。

缘起

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

解惑

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

       

 

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

为何这么设计

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

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

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

#ostream对象

1
2
3
4
5
6
7
8
9
10
#include <iostream>
#include <fstream>
int 
main () {
  
std::filebuf fb;
  
fb.open (
"test.txt"
,std::ios::out);
  
std::ostream os(&fb);
  
os << 
"Test sentence\n"
;
  
fb.close();
  
return 
0;
}

#istream对象

1
2
3
4
5
6
7
8
9
10
11
12
13
#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;
}

  

本文转自jihite博客园博客,原文链接:http://www.cnblogs.com/kaituorensheng/p/3462254.html,如需转载请自行联系原作者

你可能感兴趣的文章
代码生成工具Database2Sharp中增加视图的代码生成以及主从表界面生成功能
查看>>
关于在VS2005中编写DLL遇到 C4251 警告的解决办法
查看>>
提高信息安全意识对网络勒索病毒说不
查看>>
我的友情链接
查看>>
IDE---Python IDE之Eric5在window下的安装
查看>>
基本安装lnmp环境
查看>>
logstash消费阿里云kafka消息
查看>>
Oracle——条件控制语句
查看>>
day-6 and day-7:面向对象
查看>>
CSU Double Shortest Paths 湖南省第十届省赛
查看>>
webgl像机世界
查看>>
php正则怎么使用(最全最细致)
查看>>
javascript数学运算符
查看>>
LC.155. Min Stack(非优化,两个stack 同步 + -)
查看>>
交互设计[3]--点石成金
查看>>
SCCM TP4部署Office2013
查看>>
redis主从配置<转>
查看>>
bootloader功能介绍/时钟初始化设置/串口工作原理/内存工作原理/NandFlash工作原理...
查看>>
利用console控制台调试php代码
查看>>
讲解sed用法入门帖子
查看>>