缘起
#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对象
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,如需转载请自行联系原作者