当前课程知识点:C++语言程序设计进阶 >  第十一章 流类库与输入/输出 >  输出流 >  输出流概述

返回《C++语言程序设计进阶》慕课在线视频课程列表

输出流概述在线视频

输出流概述

输出流概述

最重要的三个输出流

预先定义的输出流对象

标准输出换向

ofstream fout("b.out");
streambuf*  pOld  =cout.rdbuf(fout.rdbuf());  
//…
cout.rdbuf(pOld);

构造输出流对象

文件输出流成员函数的三种类型

文件输出流成员函数

把流与一个特定的磁盘文件关联起来。
需要指定打开模式。

把一个字符写到输出流中。

把内存中的一块内容写到一个文件输出流中

操作文件流的内部指针

关闭与一个文件输出流关联的磁盘文件

在写到一个流时进行错误处理



下一节:向文本文件输出

返回《C++语言程序设计进阶》慕课在线视频列表

输出流概述课程教案、知识点、字幕

大家好

欢迎继续学习C++语言程序设计

在这一节

我首先将输出流

给大家作一个简要地介绍

在C++中

有三种最重要的输出流

ostream ofstream

和ostringstream

而且还有三个预定义好的

输出流对象

我们知道

大家已经习惯用这个cout

就是一个预定义好的输出流对象

另外呢

还有cerr和clog

cout叫做标准输出流对象

通常我们用它来输出

程序的正常运行结果

正常需要显示给用户看的东西

那么cerr呢

叫做标准错误输出

它是没有缓冲的

发送给它的内容呢

就立即被输出

通常我们用它来输出

一些紧急的错误信息

还有clog

它类似于ceer

但是它有缓冲

只有当缓冲区满的时候

才被输出

比如说一些不是说

在第一时间紧急马上

需要用户看到的东西

但是又是我们运行过程中

需要被记录下来的一些运行状态

或者一些不那么急的错误信息

都可以用clog来输出

那么大家可能会有疑问了

都是向标准设备输出

干吗要分成三个输出对象呢

这三个输出流对象

在某些时候可以根据需要

各自被定向到不同的地方去

默认情况下

它们都是指向标准输出设备的

但是有的时候

我们可能希望

正常的运行输出结果

不要放在显示器上了

因为结果太多

忽忽忽跑

一大屏一大屏地跑

看不太清

这个时候我们可以把cout

定向到某个磁盘文件去

不要让它显示在显示器上了

但是呢

紧急的错误信息

可能我们希望用户第一时间看见

你要是把它

定向到某个文件里面去了

那用户根本就不知道出错了

也不知道程序为什么停下来

到底现在发生了什么

所以这样的信息呢

往往我们用cerr

我们可以让它保留

显示在显示器上

还有一些错误信息呢

可能我们希望把它存到

日志文件中去

我们可以用另外一个clog

把它存到

与正常输出结果不同的

另外一个文件中去

总而言之

在你写程序的时候

你可以根据需要

将这三个标准输出流对象

重新定向到不同的地方去

它们不是必须

总指向标准输出设备的

那么大家可能有些好奇了

到底我用什么办法

可以将这些标准输出流

定向到不同的地方去呢

不管你在任何操作系统底下

一般来说呢

操作系统都会有相应的命令

可以重新指定标准输出设备

如果你不想在操作系统

这一级别将

标准输出设备指定到一个

不同的设备去

去影响所有的程序

那么你可以在你的程序内部

通过C++程序

暂时地重新定向某个标准输出流

我们来看一下程序代码怎么写

那么在这儿呢

我们可以首先构造一个

文件输出流对象

一个ofstream对象

稍后我会仔细介绍文件输出流的

现在大家先大概知道

这个是怎么做的就可以了

构造这样一个文件输出流对象

让这个fout这个对象

绑定到某一个磁盘文件上面去

比如说b.out

然后呢

再调用cout

它的rdbuf这个函数

将当前的这个输出流的指向

暂存起来

然后把它定向到fout

所向的b.out这个文件去

接下来的cout输出

就将信息都送到b.out文件里

就不送到显示器上了

那么当这一段输出内容

完成了以后

你觉得觉得又需要恢复

原来的标准输出的时候

你再次调用rdbuf

用原来暂存的这个pOld作参数

就可以把原来的标准输出

又恢复了

用这种办法呢

我们可以把三个标准输出流

对象的任何一个

进行重新定向

我们知道了要进行数据地输出

我们就要通过输出流对象

来完成这项工作

那么我们如何去构造

一个输出流对象呢

接下来我们就来看

构造输出流对象的语法

构造输出流对象

需要构造ofstream对象

这个类它支持磁盘文件地输出

那构造方法呢

可以选择不同的构造方法

一种呢就是

在构造函数中

我们直接指定一个文件名

这样的话当构造这个对象的时候

构造这个文件输出流对象的时候

这个对象就直接跟文件关联起来

而且这个文件

就自动打开了

我们也可以

在构造文件输出流对象的时候

不给文件名作初始化参数

就按照默认构造

比如这里构造一个myFile

但是不给它初始化参数

那这个时候呢

如果我们需要用这个对象

去向文件中输出任何东西的话

首先就要调用它的open方法

去打开一个指定的文件

打开的过程呢

这个流对象就跟文件关联起来了

这样我们也同样

可以用这个流对象

向文件中输出信息

不管我们是在构造流对象的时候

直接指定文件名

还是在事后打开文件

我们都可以指定打开文件的模式

比如说这个例子里面

我们用这个ios_base

它作用域里面的out

还有ios_base作用域里面的binary

这两个预定义好的常量

来指定文件打开模式

表示打开一个用于输出的文件

而且是个二进制文件

打开文件的时候的指定模式

有好多预定义的常量

这些常量也可以同时使用

需要同时使用的时候

用按位或运算符

把它连接在一起就可以了

那ofstream它是一个输出流类

这个类的对象

默认情况下

它打开就是为了输出的

所以呢

这个ios_base out不写也可以

默认的就是用了ios_base out

构造了文件输出流对象

将输出流对象

与文件关联起来以后

我们就可以通过这些对象

对文件进行操作了

那么怎么样通过文件输出流对象

向文件中写信息呢

很重要的就是

利用文件输出流提供的函数

那么文件输出流相关的函数呢

一共有三种

一种是与操纵符等价的成员函数

还有就是

执行非格式化写操作的成员函数

另外就是

其他的会修改流的状态

但是又不同于操纵符

或者插入运算符的

这样的成员函数

那么什么是操纵符呢

在后面例子中我们会看到的

这里列出了常用的

文件输出流的成员函数

open函数

我们在前面讲解中已经看到了

它可以将流

与一个特定的磁盘关键关联起来

使用open函数

去打开文件的时候呢

可以指定文件的打开模式

另外就是put函数

它可以将一个字符

写到输出流里面去

还有write函数

write函数是实现

低级的二进制写操作的函数

它可以把内存中的一块内容

以原样的二进制形式

直接写到文件输出流里面

那seekp和tellp函数呢

都是操作文件流内部指针的函数

seekp可以移动

文件流内部的写指针

我们知道

为什么我们每一次

不断地往文件里头写啊写啊

添加内容

这些内容不会覆盖原来的内容

会自动追加在文件尾呢

都是因为

在文件流内部隐含的有一个指针

它指向文件中下一个应该

写入的位置

那么我们用seekp呢

就可以移动这个指针的位置

这样可以指定

在文件的第多少个字节的位置

去写入信息

teelp函数呢

会返回当前这个

文件流内部指针的指向的位置

close函数是非常重要的

当我们打开了文件以后

可以对文件进行操作

但是完成了所有的操作

当我们不再需要

操作这个文件的时候

一定要记得及时关闭这个文件

关闭的时候呢

就要用到close函数

除此而外呢

还有错误处理函数

C++语言程序设计进阶课程列表:

第七章 继承与派生

-导学

--导学

-继承的基本概念和语法

--继承的基本概念和语法

-第七章 继承与派生--继承的基本概念和语法习题

-继承方式

--继承方式简介及公有继承

--私有继承和保护继承

-第七章 继承与派生--继承方式

-基类与派生类类型转换

--基类与派生类类型转换

-第七章 继承与派生--基类与派生类类型转换

-派生类的构造和析构

--派生类的构造函数

--派生类的构造函数举例

--派生类的复制构造函数

--派生类的析构函数

--第七章 继承与派生--派生类的构造和析构

-派生类成员的标识与访问

--访问从基类继承的成员

--虚基类

-第七章 继承与派生--派生类成员的标识与访问

-小结

--小结

-综合实例

--第七章综合实例

-实验七

--实验七

-第七章讲义

第八章 多态性

-导学

--导学

-第八章 多态性--导学

-运算符重载

--运算符重载的规则

--双目运算符重载为成员函数

--单目运算符重载为成员函数

--运算符重载为非成员函数

-第八章 多态性--运算符重载

-虚函数

--虚函数

--虚析构函数

--虚表与动态绑定

-第八章 多态性--虚函数

-抽象类

--抽象类

--第八章 多态性--抽象类

-override与final

--override与final

-第八章 多态性--override与final

-小结

--第八章小结

-综合实例

--第八章综合实例

-实验八

--实验八

- 第八章讲义

第九章 模板与群体数据

-导学

--导学

-模板

--函数模板

--类模板

-第九章 模板与群体数据--模板

-线性群体

--线性群体的概念

-第九章 模板与群体数据--线性群体

-数组

--数组类模板

--例9-4数组类应用举例

-链表

--链表的概念与结点类模板

--链表类模板

-第九章 模板与群体数据--链表

-栈

--栈类模板

--栈类模板课后习题

--例9-9 栈的应用

--例9-9 栈的应用课后习题

-队列

--队列类模板

-第九章 模板与群体数据--队列

-排序

--排序概述

--插入排序

--选择排序

--交换排序

-第九章 模板与群体数据--排序

-查找

--查找

--查找课后习题

-小结

--小结

-综合实例

--综合实例

-实验九

--实验九

- 第九章讲义

第十章 泛型程序设计与C++标准模板库

-导学

--导学

-泛型程序设计及STL的结构

--泛型程序设计的基本概念

--STL简介

-第十章 泛型程序设计与C++标准模板库--泛型程序设计及STL的结构

-迭代器

--迭代器

-第十章 泛型程序设计与C++标准模板库--迭代器

-容器的基本功能与分类

--容器的基本功能与分类

-第十章 泛型程序设计与C++标准模板库--容器的基本功能与分类

-顺序容器

--顺序容器的基本功能

--顺序容器的特征

--顺序容器的插入迭代器与适配器

--第十章 泛型程序设计与C++标准模板库--顺序容器

-关联容器

--关联容器分类和基本功能

--集合

--映射

--多重集合和多重映射

-第十章 泛型程序设计与C++标准模板库--关联容器

-函数对象

--函数对象

--函数适配器

-算法

--算法

-小结

--第十章小结

-综合实例

--综合实例

-实验十

--实验十

- 第十章讲义

第十一章 流类库与输入/输出

-导学

--导学

-I/O流的概念及流类库结构

--I/O流的概念及流类库结构

-第十一章 流类库与输入/输出--I/O流的概念及流类库结构

-输出流

--输出流概述

--向文本文件输出

--向二进制文件输出

--向字符串输出

-第十一章 流类库与输入/输出--输出流

-输入流

--输入流概述

--输入流应用举例

--从字符串输入

-第十一章 流类库与输入/输出--输入流

-输入/输出流

--输入/输出流

-第十一章 流类库与输入/输出--输入/输出流

-小结

--小结

-综合实例

--综合实例

-实验十一

--实验十一

- 第十一章讲义

第十二章 异常处理

-导学

--第12章导学

-异常处理的思想与程序实现

--异常处理的思想与程序实现

-第十二章 异常处理--异常处理的思想与程序实现

-异常处理中的构造与析构

--异常处理中的构造与析构

-第十二章 异常处理--异常处理中的构造与析构

-标准程序库异常处理

--标准程序库异常处理

-第十二章 异常处理--标准程序库异常处理

-小结

--第12章小结

-综合实例

--综合实例

-实验十二

--实验十二

- 第十二章讲义

输出流概述笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。