C++程序设计--------输入输出流的复习(一)

C++C++输入输出流 ios是抽象基类,由它派生出istream类和ostream类,iostream类支持输入输出操作,iostream类是从istream类和ostream类通过多重继承而派生的类。根据不同的情况,对文件的读写操作,可以采用不同的文件打开模式。又比如,我们使用打印机打印文档,由于打印机的打印速度相对较慢,我们先把文档输出到打印机相应的缓冲区,打印机再自行逐步打印,这时我们的。比如我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去磁盘中读取,这样就可以。 阅读详情

因为是复习,所以我打算以倒序的章节来复习.

--------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------输入输出流的复习:

-------------------------------------------------------------------------------------------------------------------

以下是课程书上的,我直接摘抄下来的:

C++语言同C语言一样,也不具有内部输入输出能力,这样做的目的是为了最大限度地保证语言与平台的无关性。计算机语言的输入输出功能都是与操作系统相关的,如果C++为某种操作系统实现内部输入输出功能,那它也就被限制在这个操作系统上了,这是我们所不希望的。

如果一个应用程序没有输入和输出,那它也就没有应用价值。C++中,输入输出功能,是通过调用该操作系统的I/O库来实现的。
scanf
printf都是C语言标准输入输出库函数,不能否认,C语言的标准输入输出库函数也是安全、高效的,为什么说C++的输入输出更安全高效呢?关键在于C++的输入输出与C的输入输出实现方法不同
  C++的输入输出是如何实现的?是不是依据面向对象的思想,把C的标准I/O库封装成类,然后进行处理呢?比如操作一个文件,我们想确保文件能够安全地打开,及时地关闭,而不完全依赖用户调用open()close()函数,可以构造一个文件类,定义一个成员变量,作为文件指针,分别在构造函数和析构函数中打开、关闭文件。再进一步,可以在类中实现C的标准输入输出库中所有的I/O函数,并把文件指针置为私有变量。从外面看来,这已经是一个封装得很好的文件类。在某种意义上讲,这种方法是相当有效的,我们也可以为标准I/O和存储块构造类似的类。
  我们已经知道,C++是使用iostream流库,并没有使用C的输入输出库,是不是iostream流库更好呢?答案是肯定的。CI/O库函数主要用来处理基本数据类型(字符、整型、浮点数等),使用参数表进行数据传输,使用格式字符串指定数据类型和输入输出格式。它们在运行时对格式字符串进行语法分析,并据此对变量进行解释。例如:
printf("a=%d/tb=%d/ta+b=%d/n",a,b,a+b);
  C语言I/O库的缺点是:
  1 即使只使用了解释程序的一个功能,也要全部装载。如上面的例子,我们要装载整个包,包括解释浮点数和字符串那部分程序段,无法减少程序的长度。
  2 虽然printf族函数已经优化得很好,但是,它是在运行期间进行解释,如果能在编译期间分析格式字符串里的变量,根据不同的类型调用各自的函数处理,运行会快得多,而且C++编译期间的类型检查会有助于我们发现错误。
  3 对于C++来说,printf不能被扩展是它最大的缺点。我们不能通过重载函数对它进行扩展,因为重载函数要有不同类型的参数,而printf族函数把类型信息隐藏在可变参数表和格式字符串中。
  iostream是通过类的继承,类成员函数的重载来实现的,利用类的可继承性和多态性,使iostream类库使用统一的函数接口操作标准I/O、文件、存储块等输入输出设备。通过函数重载,为每种内部数据类型定义了流输入输出函数,使得用户可以用相同的格式对各种数据类型进行操作,编译程序根据数据的类型自动选择相应的输入输出函数,不必将所有函数一并加载。同时,iostream拥有了很好的扩展性,用户通过重载还可以对自定义对象进行流的操作。因此,与标准C输入输出库的各种各样的函数相比,输入输出流更容易、更安全、更有效。

12.1.1
输入输出流类层次
  iostream是一组C++类,用于实现面向对象模型的输入输出,可以提供无缓冲的(低级)和缓冲的I/O操作。在某些情况下,如果C++编译器提供的iostream库中没有合适的输入输出函数可用,我们还可以利用类的继承和多态特性来改进它们,下图给出了I/O流类之间的继承关系。

I/O流类层次图



对上图的解释:

抽象流基类
ios
        流基类
输入流类
istream
      普通输入流类和用于其它输入流的基类
ifstream
      输入文件流类
istream_withassign
 用于cin的输入流类
istrstream
     输入串流类
输出流类
ostream
      普通输出流类和用于其它输出流类的基类
ofstream
     输出文件流类
ostream_withassign
用于coutcerrclog的流类
ostrstream.
    输出串流类
输入输出流类
iostream
     普通输入输出流类和用于其它输入输出流的基类
fstream
      输入输出文件流类
strstream
     输入输出串流类
stdiostream
    用于标准输入输出文件的输入输出类
缓冲流类
streambuf
     抽象缓冲流基类
filebuf
      用于磁盘文件的缓冲流类
strstreambuf.
   用于串的缓冲流类
stdiobuf
     用于标准输入输出文件的缓冲流类
预定义流初始化类
iostream_init
   预定义流初始化的类
  其中,iosistreamostreamstreambuf类构成了C++iostream输入输出功能的基础。

iostream类库中,streambufiosistreamostreamiostreamistream_withassignostream_withassign这些基本I/O流类和预定义的cincoutcerrclogiostream.h文件中说明。
  filebufifstreamofstreamfstreamfstream.h中说明。
  strstreamistrstreamostrstreamstrstreamstrstrea.h中说明。
  需要注意的是:fstream.hstrstrea.h中都包含了iostream.h,所以如果使用标准输入输出(控制台I/O),只要包含iostream.h头文件即可,如果使用fstream或者strstream,只要包含相应的fstream.hstrstrea.h即可。

四个全局的流对象:coutcerrclogcin,用于标准输出和输入,cerr的数据会被立刻显示出来,非缓冲输出可以迅速把出错信息告知用户。clog也是与标准错误设备连在一起的,但它是缓冲输出。

 

 istream有三个从流中进行非格式化抽取的成员函数:get()getline()read()

成员函数get()的用法

int get()

从流中抽取单个字符并返回。

istream& get(char*,int,char)

从流中抽取字符直到终止符(缺省为'/n')或者抽取字符达到第二个参数给定的数量或者已到文件尾,将其存储在第一个参数指定的字符数组里。

istream& get(char &)

从流中抽取单个字符并存入引用变量中

istream& get(streambuf &,char)

从流中取得字符存入streambuf对象,直到终止符或文件尾

 

成员函数getline()的用法

istream& getline(char*,int,char)

从流中抽取字符直到终止符(缺省为'/n'),或者抽取字符达到参数给定的数量-1,或者已到文件尾,将其存储在第一个参数指定的字符数组里。如果发现终止符,它从流中提取终止符,但只是抛弃掉,并不把它存在结果缓冲区里。

 

成员函数read()的用法

istream& read(char*,int)

从流中抽取字节直到参数给定的数量或者到文件结束,将其存储在第一个参数指定的字符数组里。该函数用于二进制输入流。

 

操纵算子是插入到流中或从流中抽取出来、影响流的格式状态的函数或对象。流的格式状态由ios类定义,其中包括指定数据对象的基数,如十进制、八进制、十六进制等,还有输出宽度、精度、填充字符等等。

操纵算子

作用

endl

输出换行符并刷新流

ends

输出空字符

flush

刷新流

dec

将数值转化为十进制

hex

将数值转化为十六进制

oct

将数值转化为八进制

ws

跳过空白字符(用于输入)

setiosflags(fmtflags n)

设置由n指定的格式标志;设置一直起作用直到下一个变化为止,作用同ios::setf()。格式标志在ios类中定义,参见表12-5

setbase(base n)

把基数改成n,这里n10816(任何别的值结果为0)。如果n0,输出基数为10,但输入使用c语言的约定: 101001080xf15。推荐使用decocthex

setfill(char n)

把填充字符改成n,作用同ios::fill()

setprecision(int n)

把精度改成n,作用同ios::precision()

setw(int n)

把域宽改成n,作用同ios::width(),只影响它后面的要输出的数据,当这个数据打印完毕后,域宽恢复到缺省状态

 

格式标志清单

showbase

在打印一整数值时,标明数字基数(十进制,八进制和十六进制);所用的格式能被c + +编译器读出

noshowbase

 

showpos

显示正值符号加(+)

noshowpos

 

uppercase

显示代表十六进制值的大写字母a - f以及科学记数法中的e

nouppercase

 

showpoint

表明浮点数值的小数点和后面的零

skipws

跳过输入中的空白字符

noskipws

 

left

左对齐,右填充

right

右对齐,左填充

internal

在引导符或基数指示符和值之间填充

scientific

使用科学记数法

fixed

setprecision()ios::precision()设置小数点后面的位数

 

文件打开方式由下面几种:

ios::in

打开一个输入文件,用这个标志作为ifstream的打开方式,以防止截断一个现成的文件

ios::out

打开一个输出文件,当用于一个没有ios::appios::ateios::inofstream时,ios::trunc被隐含

ios::app

以追加的方式打开一个输出文件

ios::ate

打开一现成文件(不论是输入还是输出)并寻找末尾

ios::nocreate

仅打开一个存在的文件(否则失败)

ios::noreplace

仅打开一个不存在的文件(否则失败)

ios::trunc

如果一个文件存在,打开它并删除旧的文件

ios::binary

打开一个二进制文件,缺省的是文本文件

 

文件流打开文件可以利用无参的构造函数,然后调用open():
  ofstream outfile;
  outfile.open("outfile", iosmode);
  也可调用带参数的构造函数,指定文件名和打开方式:
  ofstream outfile("outfile", iosmode);

 

 

 今天复习了输入输出的输入输出流和文件输入输出流.


C++复习题(面向对象程序设计 ##C++复习题(面向对象程序设计、选择题 C++语言属于( C )。 A) 自然语言 B) 机器语言 C)面向对象语言 D) 汇编语言 下面选项中不属于面向对象程序设计特征的是( C ) 。 A)继承性 B)多态性 C)相似性 D)封装性 可用作C++语言用户标识符的组标识符是( B )。 A) void define +WORD B) a3_b3 _123 YN C) for -abc Cas 阅读详情

相关推荐

2022年计算机二级C++语言程序设计复习题及答案

2022年计算机二级C++语言程序设计复习题及答案,根据最新计算机二级C++语言程序设计大纲与历年计算机二级C++语言程序设计真题汇总编写,包含计算机二级C++语言程序设计常考重点题型与知识点,有助于考生复习备考计算机二级C++语言程序设计,取得好成绩。 1、 面向对象方法中,继承是指( D ) A.组对象所具有的相似性质 B.个对象具有另个对象的性质 C.各对象之间的共同性质 D.类之间共享属性和操作的机制 2、 可以用p.a的形式访问派生类对象p的基类成员a,其中a是( D .

a13272463815的博客 2936

C++的输入流问题

照着C++ primer练的,出了个问题 #include <iostream> #include <string> #include <iterator> #include <vector> #include <algorithm> #include <numeric> using std::cout; using std::cin; using std::endl; using std::string; using std::is

comeonow的博客 324

谭浩强c++程序设计复习笔记(全章节)

c++期末复习

ove_z的博客 3785

C++流的输入输出

C++流是读写(输入和输出)逻辑的通用实现,让您能够用统的模式读写数据。不管是磁盘或键盘读取数据,还是将输入写入显示器或磁盘,这些模式都相同。您只需使用合适的流类,类的实现将负责处理与设备和操作系统相关的细节。如std:cout 是 ostream 类的个对象,用于输出到控制台。要使用 std::cout,需要包含提供它的头文件,这个头文件还提供了 std::cin,让您能够从流中读取数据。"

pxxzhk的博客 1519

C++输入输出流(IO流)

文章目录、C语言的输入输出二、什么是流三、C++的IO流1.概览2.标准IO流(1)cin、cout、cerr、clog(2)cin、cout与scanf、printf(3)输入输出重载(4)getline(5)循环输入2.文件流(1)ifstream、ofstream感谢阅读,如有错误请批评指正 、C语言的输入输出 C语言中最常用到的输入输出方式就是scanf()与printf()。 scanf()是从标准输入设备(键盘) 读取数据,并将值存放在个或些变量中;printf()是将指定的文字/字符

weixin_51983604的博客 1万+

C++——标准输入输出

C++输出格式,比C更灵活。

qq_42106610的博客 7238

C++程序设计-练手题集合【期末复习|考研复习

给大家整理了C++程序设计中的练手题,以供大家期末复习和考研复习的时候使用。

bblb的博客 2647

C++语言程序设计》期末复习手记

. 写在前面 使用教材:《C++语言程序设计》(郑莉,第四版) 推荐教材1:《C++ Primer Plus》(很厚,但是比较简单,适合边学边看) 推荐教材2:《Effective C++》(很薄,但是有点难,适合学完再看,否则可能被劝退) Q&A 在Q&A正式开始之前,首先说明点。本文将持续更新,所以章节暂时不全。 小编,你C++考试考哪些章节? 答:第十章不考,第九章只考template用法,其他章节的“深度探索”部分都不考。嘿嘿,不考STL!哈哈哈哈哈…咳咳。 小编,为啥概率

qq_45681057的博客 2901

大学c++复习谭浩强《C++程序设计》第三版

c++复习 ,教材谭浩强《C++程序设计》第三版(以防你们需要这本书的电子版,特意上传到了蓝奏云),这本书好多小错误,而且有些不符合现在的语法,容易编译错误有点烦,但是谭浩强讲的确实很通俗易懂,因为我是自学,虽然已经买了郑莉的书,但是谭浩强的更易懂。下面是我照着抄的代码,作为记录,方便自己复习。 第九章 怎样使用类和对象 友元 #include<iostream> using namespace std; //提前引用声明 class date; class time { publ.

weixin_44717047的博客 5405

04737自考C++程序设计知识点总结、考点串讲、考前复习

04737自考C++程序设计知识点总结引言第章 认识C++的对象1.1 初识C++的函数和对象1.2 认识C++语言面向过程编程的特点1.3 程序的编辑、编译和运行的基本概念第二章 从结构到类的演变2.1 结构的演化2.2 从结构演变个简单的类2.3 面向过程与面向对象2.4 C++面向对象程序设计的特点2.5 使用类和对象2.6 string对象数组与泛型算法更新中~未完待续2020/10/21第三章 函数与函数模板第四章 类与对象第五章 特殊函数和成员第六章 继承和派生第七章 类模板与向量第八章 多

weixin_46287713的博客 1万+

C++程序设计-章 面向对象基础【期末复习|考研复习

给大家整理了C++程序设计中的重点概念,以供大家期末复习和考研复习的时候使用。封装是将相关的概念聚集在个单元内并且用单独的个名字来引用。信息隐藏是指外部不能看到对象内部的信息,实现隐藏是指不能从外部看到对象的实现细节。为了描述组对象在结构和行为上的共性可以创造抽象数据类型称之为类,类是创建对象的模板。继承是在已有类的基础上定义新类,这个新类自动拥有已有类型的属性和操作,并且可以增加特有的功能或者修改所得到的功能。是指个操作名字或属性名字可以在多个类中定义并且在各个类中有不同的实现。

bblb的博客 2557

C++期末考试复习

、选择题(每小题2分,共40分) 1、C++是( )。 A. 面向对象的程序设计语言 B. 面向过程的程序设计语言 C. 既支持面向对象的程序设计又支持面向过程的程序设计的混合型语言 D. 非结构化的程序设计语言 2、面向对象程序设计思想的主要特征中不包括( )。 A. 封装性 B. 多态性 C. 继承性 D. 功能分解,逐步求精 3、若定义:string str; 当语句cin>>str; 执行时,从键盘输入: Microsoft Visual Studio

weixin_44203971的博客 2783

《面向对象程序设计复习提纲(2023/11)

辨析题(对的直接打√,错的打×并改正过来。每小题 2 分,共 20 分) 简答题(3 小题,共 19 分)写程序结果(每小题 6 分,共 36 分) 设计与分析题(3 小题,共 25 分)隐式调用是指程序中找不到相应的调用代码,或者说是编译器自动调用的。显示调用是指在程序中能找到相应的调用代码,或者说是手动调用的。(setw、iomanip 头文件)主要指:函数重载和运算符重载。

qq_52735613的博客 1155

C++语言程序设计复习

  C++语言程序设计复习、数据类型1、整型(1)常量1、短整型。2、整型。      加前导0的数字,表示八进制。        加前导0X,表示十六进制。        数字后跟U(u),表示无符号数3、长整型。后跟字母L(l)。(2)变量变量的定义和初始化:类型修饰符 变量名[=表达式];例: int x;          int x=6;         

caoersss的专栏 2493

C++ 复习总结记录

C 语言是结构和模块化的语言,适合处理较小规模的程序。对于复杂问题,需要高度抽象和建模时,C 则不合适。为了解决问题 20 世纪 80 年代, 计算机界提出 OOP ( object oriented programming 面向对象) 思想。1982 年 Bjarne Stroustrup 在 C 基础上引入并扩充了面向对象概念,为表达该语言与 C 渊源关系,命名为 C++

优质后端技术知识记录 1217

【蓝桥杯复习计划】C++程序设计B组

【蓝桥杯复习计划】C++程序设计B组 引用2020年官网的试题考查范围(标*的部分不在B组考察范围 )。 计算机算法:枚举、排序、搜索、计数、贪心、动态规划、图论、数论、博弈论*、概率论*、计算几何*、字符串算法等。 数据结构:数组、对象/结构、字符串、队列、栈、树、图、堆、平衡树/线段树、复杂数据结构*、嵌套数据结构*等。 计算机算法: ...

石旭先森的博客 3223

C++】基础语法总结复习

c++基础语法笔记进行整理。

越发感受自己知识的渺小,希望能够把自己遇到的问题和大家一起交流,如有不对之处,请斧正。 1192

C++面向对象程序设计期末复习】——多态

为不同数据类型的实体提供统的接口,或使用单符号表示多种类型。

yinan_0916的博客 1322
上一篇: MPI并行程序开发设计-------第一学并行计算机
下一篇: 编译原理------------------------------------编译程序概述
zeroless
博客等级 码龄22年 11粉丝 24原创
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值