c++11-流类库与输入输出
《C++程序设计》电子教案第10章 流类库与输入输出
C++中所有流都是相同的 , 但文件可以不同 。 中所有流都是相同的, 但文件可以不同。 中所有流都是相同的 使用流以后, 使用流以后 , 程序用流统一对各种计算机设备 和文件进行操作,使程序与设备、 和文件进行操作 , 使程序与设备 、 程序与文件 无关,从而提高了程序设计的通用性和灵活性。 无关 , 从而提高了程序设计的通用性和灵活性 。 也就是说, 也就是说 , 无论与流相联系的实际物理设备差 别有多大,流都采用相同的方式运行。 别有多大 , 流都采用相同的方式运行 。 这种机 制使得流可以跨越物理设备平台, 制使得流可以跨越物理设备平台 , 实现流的透 明运作,而与实际的物理设备无关。例如, 明运作 , 而与实际的物理设备无关 。 例如 , 往 显示器上输出字符和向磁盘文件或打印机输出 字符,尽管接受输出的物理设备不同, 字符 , 尽管接受输出的物理设备不同 , 但具体 操作过程是相同的。 操作过程是相同的。
返回本节
10.2 格式化 格式化I/O
10.2.1 10.2.2 10.2.3 10.2.4 ios类中的枚举常量 类中的枚举常量 使用ios成员函数 使用 成员函数 使用I/O操作符 使用 操作符 检测流操作的错误
返回首页
10.2.1 ios类中的枚举常量 类中的枚举常量
在根基类ios中定义有三个用户需要使用的枚举类型, 在根基类 中定义有三个用户需要使用的枚举类型,由 中定义有三个用户需要使用的枚举类型 于它们是在公用成员部分定义的, 于它们是在公用成员部分定义的,所以其中的每个枚举类 型常量在加上ios::前缀后都可以为本类成员函数和所有外 型常量在加上 前缀后都可以为本类成员函数和所有外 部函数访问。 部函数访问。 在三个枚举类型中有一个无名枚举类型, 在三个枚举类型中有一个无名枚举类型,其中定义的每个 枚举常量都是用于设置控制输入输出格式的标志使用的。 枚举常量都是用于设置控制输入输出格式的标志使用的。 该枚举类型定义如下: 该枚举类型定义如下: enum { skipws,left,right,internal,dec,oct,hex,sh owbase,showpoint, uppercase,showpos,scientific,fixed,unitbuf, stdio };
《面向对象程序设计C++》课程标准
《面向对象程序设计》课程标准一、课程概述《面向对象程序设计》是计算机科学与技术专业的重要专业课程。
当前面向对象方法已逐渐取代面向过程方法成为程序设计领域的主流技术,这是程序设计发展历史的一个里程碑。
本课程的教学目标是以C++语言为工具,向学生介绍面向对象程序设计语言与面向对象程序设计方法。
通过课堂教学、课外练习与上机实习相结合,使学生在程序设计方法、程序设计语言与程序设计工具三方面受到严格、系统的训练,培养学生更系统、更严密地分析问题和解决问题的思维能力,从而能熟练地利用计算机解决实际问题,为后续专业课程打下扎实的基础。
通过本课程的教学,要求学生:(1)牢固掌握C++语言基本数据类型、复合数据类型、基本控制结构、函数以及面向对象程序设计中类与对象、继承、多态性等基本概念;(2)掌握类属机制、C++输入输出机制、程序断言、异常处理等高级机制;(3)对面向对象程序构造方法、抽象数据类型、软件重用思想、其他程序设计风范,其他面向对象程序设计语言有所了解。
本课程的先修课程为“计算机导论”、“C语言”,后续课程主要是“数据结构与算法”、“编译原理”与“软件工程”。
二、课程目标1.知道《面向对象程序设计》这门学科的性质、地位、研究范围、学科进展和未来方向等。
对面向对象程序构造方法、抽象数据类型、软件重用思想、其他程序设计风范、其他面向对象程序设计语言有所了解。
2.理解该门学科的主要概念、基本原理和策略等。
3.掌握C++语言基本数据类型、复合数据类型、基本控制结构、函数以及面向对象程序设计中类与对象、继承、多态性等基本概念;掌握类属机制、C++输入输出机制、程序断言、异常处理等高级机制。
4.能够把所学的原理应用到具体的实践中去,如能利用C++语言编写程序解决一些具体的问题,培养学生发现、分析和解决问题的能力等。
三、课程内容和教学要求这门学科的知识与技能要求分为知道、理解、掌握、学会四个层次。
这四个层次的一般涵义表述如下:知道———是指对这门学科和教学现象的认知。
C++:流类库与输入输出
C++:流类库与输⼊输出7.2.1 C++的输⼊输出流ios:流基类(抽象类)istream:通⽤输⼊流类和其他输⼊流的基类ostream:通⽤输出流类和其他输出类的基类iostream:通⽤输⼊输出流类和其他输⼊输出流类的基类(以下的派⽣类对象有cin、cout、cerr、clog)ifstream:输⼊⽂件流类ofstream:输出⽂件流类fstream:输⼊输出⽂件流istrstream:输⼊字符串流类ostrstream:输出字符串流类strstream:输⼊输出字符串类iostream_withassign: 通⽤输⼊输出流类和其他输⼊输出流类iostream的的派⽣类7.2.2 预定义的流对象C++中包含⼏个预定义的流对象,它们是标准输⼊流对象cin、标准输出流对象cout、⾮缓冲型的标准出错流对象ceer、缓冲型的标准出错流对象clogcin是istream的派⽣类istream_withassign的对象,它与标准输⼊设备(通常是键盘)相联系。
cout是ostream的派⽣类ostream_withassign的对象,它与标准输出设备(通常是显⽰器)相联系。
ceer是ostream的派⽣类ostream_withassign的对象,它与标准错误输⼊设备(通常是显⽰器)相联系。
clog是ostream的派⽣类ostream_withassign的对象,它与标准错误输⼊设备(通常是显⽰器)相联系。
由于istream和ostream类都在头⽂件iostream中声明的,因此只要在程序中包含头⽂件iostream.h,C++程序开始时这四个标准流对象的构造函数都被⾃动调⽤。
7.2.3 输⼊输出流的成员函数(1)put函数put函数⽤于输出⼀个字符格式:cout.put(char ch)例如:cout.put('A')===cout.put(65)===cout.put(25+40)(2)get函数get函数的功能与提取运算符>>类似,主要不同之处是get函数在读⼊数据时可以包括空⽩字符,⽽后者不可以。
第7章 输入输出流
第7章 输入输出流
第7章 输入输出流
(2)返回流是否处于正常状态 :int fail() const; 该函数返回failbit状态,以判断流操作是否失败。failbit表 示发生流格式错误,但缓冲区中的字符没有丢失。这种错误通常 是可以修复的。 (3)判断流是否正常 int good()const; int operator void *(); 上述两个函数的功能相似,如果eofbit、failbit和badbit全 部都没有被置位[即均为 0,读写正常(即符合读取和写入的类 型),没有文件末尾],则返回1 (true),否则返回0 (false)。
第7章 输入输出流
C++程序设计
第7章 输入输出流
第7章 输入输出流
流类简介 标准流对象 控制 I/O 格式 调用cout的成员函数 调用cin的成员函数
本章内容
第7章 输入输出流
第一节 流类简介
常考知识点: C++流的基本概念 iostream中流类库的基本概念 主要头文件的基本功能 提取运算符>>的使用 插入运算符<<的使用
(1)返回流是否结束: int eof() const; 函数返回eofbit的值。当文本文件结束时,在输入流中会 自动设置eofbit。在应用程序中可以用eof( )函数测试是否到达 文件尾,当文件操作结束遇到文件尾时,函数返回1;否则返回0。 在标准输入流cin中,可以通过按下〈Ctrl+Z〉组合键表示 输入流的结束。
第7章 输入输出流
(3)设置和返回输出宽度 int width(int nw); 该函数将下一个输出项的显示宽度设置为nw。如果nw大于 数据所需宽度,则在没有特别指示时数据采用右对齐方式。如果 nw小于数据所需宽度,则nw无效,数据以默认格式输出。函数 width()的设置没有持续性,输出一项数据后自动恢复为系统默 认设置。
第8章_C++流与输入输出new
8.1 I/O流的概念及流类库
10:40
计算机软件教学中心
• C++语言中数据的输入/输出,包括三个方面:
10:40
计算机软件教学中心
8.2 键盘输入与屏幕输出
• 【例8.5】自定义输出控制符函数的定义以及 调用示例。
int main() { cout <<10 <<endl << setup << 10<<endl; return 0; }
程序的运行结果是: 10 10$$$$$$$$
10:40
计算机软件教学中心
– istream和ostream提供了流库的主要输入/输出 – 是研究流库的关键
10:40
计算机软件教学中心
8.2 键盘输入与屏幕输出
• istream类
– istream类重载了get函数。 例如:istream & istream::get( signed char *,int len,char='\n'); 从流中将字符输入到给定的char *,直到遇到分界 符、文件结尾或已读完(len-1)个字节为止。
10:40
计算机软件教学中心
8.2 键盘输入与屏幕输出
• C++语言中使数据流动的方法 :
– 使用在标准输入输出头文件stdio.h中声明的库函 数 – 使用在输入输出流类文件iostream.h中定义的流 对象cin和cout – 使用插入运算符“<<” cout << 输出项; – 使用提取运算符“>>” cin >> 变量名;
c++流类库与输入输出习题答案
1.概念填空题1.1头文件iostream中定义了4个标准流对象cin,cout,cerr,clog。
其中标准输入流对象为cin,与键盘连用,用于输入;cout为标准输出流对象,与显示器连用,用于输出。
1.2用标准输入流对象cin与提取操作符>>连用进行输入时,将空格与回车当作分隔符,使用get()成员函数进行输入时可以指定输入分隔符。
1.3每一个输入输出流对象都维护一个流格式状态字,用它表示流对象当前的格式状态并控制流的格式。
C++提供了使用格式控制函数与操作子函数来控制流的格式的方法。
1.4 C++根据文件内容的数据格式可分为两类:文本文件和二进制文件。
前者存取的最小信息单位为字节,后者记录。
1.5文件输入是指从文件向内存读入数据;文件输出则指从内存向文件输出数据。
文件的输入输出首先要打开文件;然后进行读写;最后关闭文件。
1.6文本文件是存储ASCII码字符的文件,文本文件的输入可用cin从输入文件流中提取字符实现。
文本文件的输出可用cout将字符插入到输出文件流来实现。
程序在处理文本文件时需要(需要/不需要)对数据进行转换。
1.7二进制文件是指直接将计算机内的数据不经转换直接保存在文件中。
二进制文件的输入输出分别采用read()、write() 成员函数。
这两个成员函数的参数都是2个,分别表示读写缓冲区和字节数。
1.8设定、返回文件读指针位置的函数分别为seekg,tellg;设定、返回文件写指针位置的函数分别为seekp,tellp。
2 简答题2.1 为什么cin输入时,空格和回车无法读入?这时可改用哪些流成员函数?2.2 文件的使用有它的固定格式,试做简单介绍。
2.3 在ios类中定义的文件打开方式中,公有枚举类型open_mode的各成员代表什么文件打开方式?2.4 简述文本文件和二进制文件在存储格式、读写方式等方面的不同,各自的优点和缺点。
2.5 文本文件可以按行也可以按字符进行复制,在使用中为保证能完整复制要注意哪些问题?2.6 文件的随机访问为什么总是用二进制文件,而不用文本文件?2.7 怎样使用istream和ostream的成员函数来实现随机访问文件?3.选择题3.1要进行文件的输出,除了包含头文件iostream外,还要包含头文件(C )。
C++程序设计基础课后习题答案
C++程序设计基础(第5版)(上)习题与解答第1章练习题同步练习1.1一、选择题1.一个最简单的C++程序,可以只有一个( )。
(A )库函数(B )自定义函数(C )main 函数(D )空函数2.函数名是( ),用于识别和调用函数。
(A )关键字(B )标识符(C )常数(D )语句3.用C++语言编写的源程序要成为目标程序必须要经过( )。
(A )解释(B )汇编(C )编辑(D )编译4.C++程序中的简单语句必须以( )结束。
(A )冒号(B )分号(C )空格(D )花括号5.程序中把表达式“a+0.5”写为“a*0.5”,是( )错误。
(A )编译(B )连接(C )运行(D )逻辑【解答】CBDBD二、程序练习用一个简单问题,练习程序的书写格式。
(1)问题输入一个摄氏温度值,转换输出华氏温度值。
转换公式为:9325F C =+式中,F 是华氏温度值,C 是摄氏温度值。
想一想,应该如何正确把转换公式写成C++表达式。
(2)分析首先,分析本问题需要的数据表示和数据处理。
数据:摄氏温度C ,华氏温度F 。
处理:输入C ;计算F ;输出C和F。
然后,逐步细化:① 说明变量C和F;② 显示提示输入摄氏温度值的信息;③ 从键盘输入C的值;④ 通过转换公式计算F的值;⑤ 以清晰的说明输出C和F。
(3)编写代码简单程序语法格式:程序与外部连接表示主函数程序中需要连接系统的输入/输出流类库。
使用VC 2010,要用宏指令包含头文件,使用标准名空间的using语句。
主函数定义包括函数头和函数体。
程序框架:#include<iostream>using namespace std;int main(){//语句序列}根据以上分析写出一个完整的程序,并在集成开发环境编译执行。
运行结果如下:请输入摄氏温度 C:26.5摄氏温度 C=26.5华氏温度 F=79.7【解答】#include<iostream>using namespace std;int main(){double C,F;cout<<"请输入摄氏温度 C:\n";cin>>C;F=(9.0/5)*C+32;cout<<"摄氏温度 C="<<C<<endl;cout<<"华氏温度 F="<<F<<endl;}想一想把程序中的语句F=(9.0/5)*C+32;改为F=(9/5)*C+32;测试一下,程序计算结果将会有什么错误?想想为什么?同步练习1.21.在下列选项中,全部都是C++关键字的选项为( )。
C++
上面这4个函数也可以用于文本文件的读写
1
3、检测文件结束 可以使用eof()函数来检测文件是否到达文件尾的标志位EOF 该函数的原型是 int eof( ); 示例:
ifstream ifs;
….. if (!ifs.eof())//尚未到达文件尾 ….. 或者可以检查流对象是否为零,为零表示文件结束 示例: ifstream ifs; ….. if (!ifs)//尚未到达文件尾 …..
输出流:有一种流表示数据从内存送到某个载体或 设备中,叫做输出流。
7.2
C++ 的流及流ream library):用派生方法建立起来 的一个输入输出类库,它有两个平行的基类: streambuf类和ios类,它们在iostream.h中定义,是两 个非常低级的类,所有流类均以两者之一作为其基类。
7.4用户自定义类型的输入/输出
一、重载输出运算符“<<” 输出运算符 << 也称插入运算符,有两个操作数,左操作数为 ostream类类型的对象,右操作数可以是一个预定义类型的变量, 也可以是重载了该运算符(<<)的类的对象。 重载运算符 << 的定义格式如下: ostream& operator<<(ostream& { out<<obj.item1; out<<obj.item2; out<<obj.item3; //… return out; } 一般采用友元函数形式重载。 out, user_type& obj)
1
4、随机存取文件 随机存取文件可以根据需要访问文件中的任一个元素。 (1)、文件指针函数 a) seekg(pos)——在输入流中从头开始移动pos个字节文件读指针 seekp(pos)——在输出流中从头开始移动pos个字节文件写指针 b) seekg(pos,origin) 从指定位置开始移动文件指针 seekp(pos,origin) 其中,origin取值:ios::beg、ios::cur、ios::end (2)、随机读写操作 见书中例7.14(P271)--seekp( )的使用 --seekg( )的使用
C++的输入和输出与标准输出流
* 掌握:输入输出的含意;文件流以及输入/输出的格式控制;标准输出在C++程序中的应用。
* 理解:C++类库中的常用流类。
* 了解:C++的I/O对C的发展。
重点、难点◆输入输出的含意;文件流以及输入/输出的格式控制;标准输出在C++程序中的应用。
一、C++ 输入输出的含义以前所用到的输入和输出,都是以终端为对象的,即从键盘输入数据,运行结果输出到显示器屏幕上。
从操作系统的角度看,每一个与主机相连的输入输出设备都被看作一个文件。
程序的输入指的是从输入文件将数据传送给程序,程序的输出指的是从程序将数据传送给输出文件。
C++的输入与输出包括以下3方面的内容:1、对系统指定的标准设备的输入和输出。
简称标准I/O。
(设备)2、以外存磁盘(或光盘)文件为对象进行输入和输出。
简称文件I/0。
(文件)3、对内存中指定的空间进行输入和输出。
简称串I/O。
(内存)C++采取不同的方法来实现以上3种输人输出。
为了实现数据的有效流动,C++系统提供了庞大的I/O类库,调用不同的类去实现不同的功能。
二、C++的I/O对C的发展—类型安全和可扩展性C语言中I/O存在问题:1、在C语言中,用prinff和scanf进行输入输出,往往不能保证所输入输出的数据是可靠的、安全的。
学过C语言的读者可以分析下面的用法:想用格式符%d输出一个整数,但不小心错用了它输出单精度变量和字符串,会出现什么情况?假定所用的系统int型占两个字节。
printf("%d",i);//i为整型变量,正确,输出i的值printf("%d",f);//f为单精度变量,输出变量中前两个字节的内容printf("%d","C++");//输出字符串"C++”的起始地址编译系统认为以上语句都是合法的,而不对数据类型的合法性进行检查,显然所得到的结果不是人们所期望的。
2、在用scanf输入时,有时出现的问题是很隐蔽的。
C++——输入、输出和文件
C++——输⼊、输出和⽂件⼀、C++输⼊和输出概述 1.1、流和缓冲区 C++程序把输⼊和输出看作字节流。
输⼊时,程序从输⼊流中抽取字节;输出时,程序将字节插⼊到输出流中。
对于⾯相⽂本的程序,每个字节代表⼀个字符,更通俗地说,字节可以构成字符或数值数据的⼆进制表⽰。
输⼊流中的字节可能来⾃键盘,也可能来⾃存储设备(如硬盘)或其他程序。
输出流中的字节可以流向屏幕、打印机、存储设备或其他程序。
流充当了程序和流源或流⽬标之间的桥梁。
这使得C++程序可以以相同的⽅式对待来⾃键盘的输⼊和来⾃⽂件的输⼊。
C++程序只检查字节流,⽽不需要知道字节来⾃何⽅。
同理,通过使⽤流,C++程序处理输出的⽅式将独⽴于其去向。
因此管理输⼊将包含两步: *将流与输⼊去向的程序关联起来。
*将流与⽂件连接起来。
换句话说,输⼊流需要两个连接,每端各⼀个。
⽂件端部连接提供了流的来源,程序端连接将流的流出部分转储到程序中(⽂件端连接可以是⽂件,也可以是设备)。
同样,对输出的管理包括将输出流连接到程序以及将输出⽬标与流关联起来。
通常,通过使⽤缓冲区可以更⾼效地处理输⼊和输出。
缓冲区是⽤作中介的内存块,它是将信息从设备传输到程序或从程序传输给设备的临时存储⼯具。
1.2、流、缓冲区和iostream⽂件 管理流和缓冲区的⼯作有点复杂,但iostream(以前为iostream.h)⽂件中包含⼀些专门设计⽤来实现、管理流和缓冲区的类。
C++98版本C++I/O定义了⼀些类模板,以⽀持char和wchar_t数据;C++11添加了char16_t和char32_t具体化。
通过使⽤typedef⼯具,C++使得这些模板char具体化能够模仿传统的⾮模板I/O实现。
下⾯是其中的⼀些类: *streambuf类为缓冲区提供了内存,并提供了⽤于填充缓冲区、访问缓冲区内容、刷新缓冲区和管理缓冲区内存的类⽅法; *ios_base类表⽰流的⼀般特征,如是否可读取、是⼆进制流还是⽂本流等; *ios类基于ios_base,其中包含了⼀个指向streambuf对象的指针成员; *ostream类是从ios类派⽣⽽来的,提供了输出⽅法; *istream类也是从ios类派⽣⽽来的,提供了输⼊⽅法; *iostream类是基于istream和ostream类的,因此继承了输⼊⽅法和输出⽅法。
C++语言程序设计期末考试题及答案
一、单选题1、程序是一组指令序列。
下列哪种描述是错误的?()A.程序是由计算机用户启动执行的B.程序是由程序员编写的C.程序是由计算机硬件识别和执行的D.程序是由计算机用户识别和执行的正确答案:D2、CPU只能处理存放在()中的数据。
A.内存B.硬盘C.U盘D.光盘正确答案:A3、下列哪种概念不属于程序中的算法元素?()A.函数B.运算符C.循环语句D.引用正确答案:D4、下列关于程序设计方法的描述中,错误的是()。
A.程序设计方法有结构化程序设计和面向对象程序设计2种B.结构化程序设计方法通常使用流程图来描述程序设计结果C.C++语言不支持面向对象程序设计方法D.面向对象程序设计方法通常使用UML来描述程序设计结果正确答案:C5、十进制19.625转换成二进制后的结果为()。
A.10100.011B.10010.011C.10011.101D.10001.101正确答案:C6、十进制19.625转换成十六进制后的结果为()。
A.14.6B.12.6C.13.aD.11.a正确答案:C7、C++语言表达式:5 % 2 + 2.0,该表达式结果的数据类型和值分别是()。
A.double类型,4.0B.int类型,4C.double类型,3.5D.double类型,3.0正确答案:D8、执行C++语句:int x = 5; x %= 2; 执行后变量x的值为()。
A.1B.5C.0D.2正确答案:A9、执行C++语句:int x, &y = x; 则下列关于y的描述中错误的是()。
A.y中保存了x的内存地址B.y和x共用同一内存单元C.y是x的别名D.y是x的引用正确答案:A10、执行C++语句:int x, *y = &x; 则下列关于y的描述中错误的是()。
A.y是x的引用B.y中保存了x的内存地址C.y指向变量xD.y是一个int型指针变量正确答案:A11、C++语言表达式:!5,该表达式结果的数据类型和值分别是()。
C++程序设计试题及答案1.
C++程序设计试题一、单项选择题(本大题共20小题,每小题1分,共20分)在每小题列出的四个备选项中只有一个是符合题目要求的,请将其代码填写在题后的括号内。
错选、多选或未选均无分。
1.C++源程序文件扩展名为( A )A..cppB..hC..1ibD..obj2.在C++中使用流进行输入输出,其中专用于从键盘进行输入的流是( B )A.cerrB.cinC.coutD.cfile3.包含自定义头文件file.h的预处理指令是( D )A.#define<file.h>B.#include file.hC.#define file.hD.#include"file.h"4.用于标识十六进制前缀或后缀是( D )A.元B.后缀L或eC.前缀零D.前缀0x5.设存在整型变量int x,则下列句与其它三项含义不同的是( A )A.int* p=&x;B.int& p=x;C.int & p=x;D.int &p=x;6.在定义类成员时,为产生封装性,则需使用哪个关键字( D )A.publicB.publishC.protectedD.private7.设函数void swap(int&,int&)将交换两形参的值,如两整型变量int a=10;int b=15;则执行swap(a,b)后,a、b值分别为( C )A.10,10B.10,15C.15,10D.15,158.函数默认参数在函数原型中说明,默认参数必须放在参数序列的( C)A.前部B.中部C.后部D.两端9.设存在函数int min(int,int)返回两参数中较小值,若求15,26,47三者中最小值,下列表达式中错误的是( B )A.int m=min(min(15,26),min(15,47));B.int m=min(15,26,47);C.int m=min(15,min(47,26));D.int m =min(min(47,26),16);10.下列函数不能和函数void print(char)构成重载的是(C )A.int print(int);B.void print(char,char);C.int print(char);D.void print(int,int);11.在下列成对的表达式中,运算结果类型相同的一对是( D )A.7/2和7.0/2.0B.7/2.0和7/2C.7.0/2和7/2D.7.0/2.0和7.0/2l2.内联函数的特点是( D )A.减少代码量,加快访问速度B.减少代码量,减缓访问速度C.增加代码量,减缓访问速度D.增加代码量,加快访问速度13.类的私有成员可在何处被访问( A)A.本类的成员函数中B.本类及子类的成员函数中C.通过对象名在任何位置D.不可访问14.类的构造函数在以下什么情况下会被自动调用( B )A.定义成员函数时B.定义对象时C.定义数据成员时D.定义友元函数时15.下列关于析构函数描述正确的是( D )A.可以重载B.函数体中必须有delete语句C.返回类型必须是void类型D.不能指定返回类型16.设有函数T Sum(T x,T y){return x+y;},其中T为模板类型,则下列语句中对该函数错误的使用是( D )A.Sum(1,2);B.Sum(3.0,2.2);C.Sum(‘A’,‘C’);D.Sum("A","C");17.下列哪个编译指令属于条件编译指令( C )A.#includeB.#defineC.#elseD.#pragma18.关于类的静态成员函数描述错误的是( A )A.在创建对象前不存在B.不能说明为虚函数C.不能直接访问非静态函数D.不是对象的成员l9.如果类A被声明成类B的友元,则( D)A.类A的成员即类B的成员B.类B的成员即类A的成员C.类A的成员函数不得访问类B的成员D.类B不一定是类A的友元20.派生类的对象可以访问以下那种情况继承的基类成员( D )A.私有继承的私有成员B.公有继承的私有成员C.私有继承的保护成员D.公有继承的公有成员二、填空题(本大题共20小题,每小题1分,共20分)请在每小题的空格中填上正确答案。
第23章 C++的输入输出类库
3
C/C++程序设计
ios istream
istrstream
istream_withassign
ostream
ifstream ofstream
ostream_withassign
ostrstream
iostream
strstream
stdiostream fstream
图
iotream类继承层次图
在vc6.0 ostream.h中ostream类的左移运算符函数存 在如下函数原型声明: ostream& operator<<(const char *); inline ostream&operator<<(const unsigned char*); inline ostream& operator<<(const signed char*); ostream& operator<<(unsigned char); inline ostream& operator<<(char); inline ostream& operator<<(signed char);
8
C/C++程序设计
进行上面两个改动之后,就可以与老版本相同的格式使 用新版本的类。 换言之本章的示例和语法可以延拓到新的类。但新的类 提供更多的格式标识符和I/O操作算子。 也可以采用标准名称空间分辨符 std::直接操作std名称 空间的对象和相关的成员函数: std::cout<<expre; std::cin>>Lexpre;
19
C/C++程序设计
面向对象第四次作业任务答案解析
面向对象程序设计技术作业四一、填空题1、在定义类对象的语句执行时,系统在建立每个对象的过程中将自动调用该类的构造函数使其初始化。
2、当一个类对象被撤消时将自动调用该类的析构函数。
3、对基类数据成员的初始化是通过执行派生类构造函数中的初始化表来实现的。
4、对一个类中的数据成员的初始化可以通过构造函数中的初始化表实现,也可以通过构造函数中的赋值语句实现。
5、在一个派生类中,对基类成员、类对象成员和非类对象成员的初始化次序是先基类成员,后类对象成员,最后为非对象成员。
6、当撤消一个含有基类和类对象成员的派生类对象时,将首先完成派生类本身的析构函数定义体的执行,接着完成类对象成员的析构函数定义体的执行,最后完成基类成员的析构函数定义体的执行。
7、设px是指向一个类动态对象的指针变量,则执行”delete px;”语句时,将自动调用该类的析构函数。
8、当一个类对象离开它的作用域时,系统将自动调用该类的析构函数。
9、假定一个类对象数组为A[N],当离开它的作用域时,系统自动调用该类析构函数的次数为N次。
10、假定AB为一个类,则执行”AB a[10];”语句时,系统自动调用该类构造函数的次数为10次。
11、假定用户没有给一个名为AB的类定义构造函数,则系统为其隐含定义的构造函数为空构造函数。
12、假定用户没有给一个名为AB的类定义析构函数,则系统为其隐含定义的析构函数为空构造函数。
13、若需要把一个函数”void F();”定义为一个类AB的友元函数,则应在类AB的定义中加入一条语句:friend void F();。
14、若需要把一个类AB定义为一个类CD的友元类,则应在类CD的定义中加入一条语句:feiend class AB;。
15、假定一个类AB中有一个静态整型成员bb,在类外为它进行定义并初始化为0时,所使用的语句为AB:bb=0;。
16、假定类AB中有一个公用属性的静态数据成员bb,在类外不通过对象名访问该成员bb 的写法为AB:bb 。
全国2022年10月自考04737《C++程序设计》真题
全国2022年10月自考04737《C++程序设计》真题全国2022年10月自考04737《C++程序设计》真题1.(单选题,1 分)下面对模板的声明正确的是()A、B、B.C、D、2.(单选题,1 分)()A、B、C、D、3.(单选题,1 分)以下不能正确创建输出文件对象并使其与磁盘文件相关联的语句是()A、B、C、D、4.(单选题,1 分)在C++中打开一个文件就是将指定的文件与下列哪个选项建立关联()A、流对象B、流类C、流函数D、流结构5.(单选题,1 分)()A、跳过输出流中的n个字符B、跳过delim及其之后的所有字符C、常用于跳过输出中的无效部分D、6.(单选题,1 分)下列流类中,可以用于输入/输出的是()A、iosB、fstreamC、iostreamD、strstream7.(单选题,1 分)关于纯虚函数和抽象类的描述中,错误的是()A、纯虚函数是一种特殊的虚函数,它没有具体实现B、抽象类一般作为基类使用,其纯虚函数的实现由派生类给出C、抽象类中一定具有一个或多个纯虚函数D、抽象类的派生类中一定不会再有纯虚函数8.(单选题,1 分)()A、B、C、D、9.(单选题,1 分)下面关于基类和派生类的描述中,正确的是()A、一个类不能被多次说明为某个派生类的直接类,可以不止一次地成为间接基类B、一个类可以被多次说明为某个派生类的直接类,可以不止一次地成为间接基类C、一个类不能被多次说明为某个派生类的直接类,但只能成为一次间接基类D、一个类可以被多次说明为某个派生类的直接类,但只能成为一次间接基类10.(单选题,1 分)下列关于派生类对象的初始化叙述中,正确的是()A、是由基类的构造函数实现的B、是由派生类的构造函数实现的C、是由基类和派生类的构造函数实现的D、是系统自动完成的不需程序设计者干预11.(单选题,1 分)当派生类私有继承基类时,基类中的公有成员和保护成员成为派生类的()A、public成员B、private成员C、protected成员D、友元12.(单选题,1 分)()A、自增运算符“++”可以被重载B、函数可以区分前置及后置情况C、D、13.(单选题,1 分)下列关于重载流插入和流提取运算符的描述中,正确的是()A、不可以对流插入运算符进行重载B、不可以对流提取运算符进行重载C、重载函数不能是流类库中的成员D、流是标准类库用户能继承也能修改14.(单选题,1 分)设类Test将其他类对象作为成员,则创建类Test 的对象时,下列描述正确的是()A、先执行类的构造函数B、先执行成员对象的构造函数C、先执行类的析构函数D、先执行成员对象的析构函数15.(单选题,1 分)()A、B、C、D、16.(单选题,1 分)()A、B、C、D、17.(单选题,1 分)下列关于访问范围说明符public、private、protected 的描述中,正确的是()A、每种关键字至少出现1次B、不加说明符默认为公有的C、3种关键字出现的先后次序没有限制D、成员的访问范围由它之后最近的说明符决定18.(单选题,1 分)下列关于封装特点的描述中,错误的是()A、隐藏对象的属性B、公开实现的细节C、提供使用的信息D、公开的信息是与外界交互的接口19.(单选题,1 分)下列关于++语言类库提供输入流类和输出流类的描述中,正确的是()A、输入流类ostreamB、输出流类istreamC、cin是istream类的对象D、cout是istream类的对象20.(单选题,1 分)下列选项中,能表现出C++语言的主要特点的是()A、继承于C#语言B、可以进行面向对象的程序设计C、不能进行结构化程序设计D、基于数据流的程序设计21.(填空题,1 分)()。
课件:第11章 流类库和输入
整个流类体系是一个派生类体系。整个流类体系在头文件
<iostream.h>中说明,它包含了<ios.h>、<stream.h>、 <istream.h>和<ostream.h>。而输入输出文件流部分在 <fstream.h>中说明,它包含<iostream.h>。
ios
指针
streambuf
istream
【例9.3】提高输入的健壮性。输入时需要故意输错,以 测试健壮性。
程序:Ex9_3.cpp
9.3 标准设备的输入/输出
输入流成员函数声明: istream&istream::get(char &);//提取一个字符,放在字符型变量中 istream&istream::get(unsigned char &);//同上一函数 istream&istream::get(signed char &);//同上一函数 istream&istream::get(char *,int,char=’\n’);//提取字符串,到串结束
十六进制方式0xff
9.2 输入输出的格式控制
【例9.2】浮点数输出。
#include<iostream.h>
void main(){
double fnum=31.415926535;
cout<<”缺省域宽为:”<<cout.width()<<”位”<<’\n’;
cout<<”缺省精度为:”<<cout.precision()<<”位”<<’\n’;
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
6
输 插入运算符(<<) 插入运算符( ) 出 流
插入(<<)运算符是所有标准C++数据类型预先 设计的。 用于传送字节到一个输出流对象。
7
控制输出格式
输 出 流
控制输出宽度
–
为了调整输出,可以通过在流中放入setw操纵符或调用width成 员函数为每个项指定输出宽度。
例11-1 使用width控制输出宽度
8
输 例:使用 填充 使用*填充 出 流
#include <iostream> using namespace std; void main() { double values[]={1.23,35.36,653.7,4358.24}; for(int i=0; i<4; i++) 输出结果: 输出结果: { cout.width(10); ******1.23 ******1.23 cout.fill('*'); cout<<values[i]<<'\n'; *****35.36 } *****653.7 } ***4358.24
12
输 进制 出 流
dec、oct和hex操纵符设置输入和输出的缺省进 制。
13
输 输出文件流成员函数 出 流
输出流成员函数有三种类型:
– – –
与操纵符等价的成员函数。 执行非格式化写操作的成员函数。 其它修改流状态且不同于操纵符或插入运算符的成 员函数。
14
输 输出文件流成员函数 出
open函数
ifstream myFile;//建立一个文件流对象 myFile.open("filename",iosmode); myFile.open("filename",iosmode); //打开文件 打开文件"filename" //打开文件"filename"
19
输 提取运算符(>>) 提取运算符( ) 入 流
21
输 输入流成员函数 入 流
seekg函数用来设置输入文件流中读取数据位 置的指针。 tellg函数返回当前文件读指针的位置。 close函数关闭与一个输入文件流关联的磁盘 文件。
22
输 例11-9 设置位置指针 入 流
#include <iostream> #include <fstream> using namespace std; void main() { char ch; ifstream tfile("payroll",ios::binary|ios::nocreate); if(tfile) { tfile.seekg(8); while(tfile.good()) { tfile.get(ch); if (!ch) break; cout<<ch; } } else { cout<<"ERROR: Cannot open file 'payroll'."<<endl; } tfile.close(); }
#include <fstream> using namespace std; struct Date { int mo,da,yr; }; void main() { Date dt = {6,10,92}; ofstream tfile("date.dat",ios::binary); tfile.write((char *) &dt,sizeof dt); tfile.close(); }
9
输 例11-2使用 使用setw指定宽度 使用 指定宽度 出 流
#include <iostream> #include <iomanip> using namespace std; void main() { double values[]={1.23,35.36,653.7,4358.24}; char *names[]={"Zoot","Jimmy","Al","Stan"}; for(int i=0;i<4;i++) 输出结果: 输出结果: cout<<setw(6)<<names[i] Zoot 1.23 <<setw(10)<<values[i] Jimmy 35.36 <<endl; Al 653.7 } Stan 4358.24
C++语言程序设计
流类库与输入/ 第十一章 流类库与输入/输出
本章主要内容
I/O流的概念 输出流 输入流 输入/输出流
2
I/O流的概念 流的概念
当程序与外界环境进行信息交换时,存在着两个对象,一 个是程序中的对象,另一个是文件对象。 流是一种抽象,它负责在数据的生产者和数据的消费者之 间建立联系,并管理数据的流动。 程序建立一个流对象,并指定这个流对象与某个文件对象 建立连接,程序操作流对象,流对象通过文件系统对所连 接的文件对象产生作用。 读操作在流数据抽象中被称为(从流中)提取,写操作被 称为(向流中)插入。
3
输出流
最重要的三个输出流是
– – –
ostream ofstream ostringstream
4
输 输出流对象 出 流
预先定义的输出流对象:
– –
–
cout 标准输出 cerr 标准错误输出,没有缓冲,发送给它的内容立 即被输出。 clog 类似于cerr,但是有缓冲,缓冲区满时被输出。
5
输 输出流对象 出 流
#include <iostream> using namesoace std; void main() { double values[] = {1.23,35.36,653.7,4358.24}; 输出结果: 输出结果: for(int i=0;i<4;i++) { cout.width(10); 1.23 cout << values[i] <<'\n'; 35.36 } 653.7 } 4358.24
11
输 例11-4控制输出精度 控制输出精度 出 流
#include <iostream> #include <iomanip> using namespace std; void main() { double values[]={1.23,35.36,653.7,4358.24}; char *names[]={"Zoot","Jimmy","Al","Stan"}; cout<<setiosflags(ios::scientific); for(int i=0;i<4;i++) 输出结果: 输出结果: cout<<setiosflags(ios::left) Zoot 1 <<setw(6)<<names[i] Jimmy 4e+001 <<resetiosflags(ios::left) <<setw(10)<<setprecision(1) Al 7e+002 << values[i]<<endl; Stan 4e+003 }
提取运算符(>>)对于所有标准C++数据类型都 是预先设计好的。 是从一个输入流对象获取字节最容易的方法。 ios类中的很多操纵符都可以应用于输入流。 但是只有少数几个对输入流对象具有实际影响, 其中最重要的是进制操纵符dec、oct和hex。
20
输 输入流成员函数 入 流
open函数把该流与一个特定磁盘文件相关联。 get函数的功能与提取运算符(>>)很相像,主要的不同点是get 函数在读入数据时包括空白字符。(第6章介绍过) 6 getline的功能是从输入流中读取多个字符,并且允许指定输入终 止字符,读取完成后,从读取的内容中删除终止字符。(第6章 介绍过) read成员函数从一个文件读字节到一个指定的内存区域,由长度 参数确定要读的字节数。 如果给出长度参数,当遇到文件结束或者在文本模式文件中遇到 文件结束标记字符时结束读取。
23
输 例11-8 文件读二进制记录 入 流
#include <iostream> #include <fstream> #include <cstring> using namespace std; void main() { struct { double salary; char name[23]; } employee; ifstream is("payroll",ios::binary|ios::nocreate); if (is) { is.read((char *) &employee,sizeof(employee)); cout<<<<' '<<employee.salary<<endl; } else { cout<<"ERROR: Cannot open file 'payroll'."<<endl;} is.close(); }
10
输 例11-3设置对齐方式 设置对齐方式 出 流
#include <iostream> #include <iomanip> using namespace std; void main() { double values[]={1.23,35.36,653.7,4358.24}; char *names[]={"Zoot","Jimmy","Al","Stan"}; for(int i=0;i<4;i++) cout<<setiosflags(ios::left) 输出结果: 输出结果: <<setw(6)<<names[i] Zoot 1.23 <<resetiosflags(ios::left) Jimmy 35.36 <<setw(10)<<values[i] Al 653.7 <<endl; Stan 4358.24 }