c++11-流类库与输入输出
- 格式:ppt
- 大小:88.00 KB
- 文档页数:25
《面向对象程序设计》课程标准一、课程概述《面向对象程序设计》是计算机科学与技术专业的重要专业课程。
当前面向对象方法已逐渐取代面向过程方法成为程序设计领域的主流技术,这是程序设计发展历史的一个里程碑。
本课程的教学目标是以C++语言为工具,向学生介绍面向对象程序设计语言与面向对象程序设计方法。
通过课堂教学、课外练习与上机实习相结合,使学生在程序设计方法、程序设计语言与程序设计工具三方面受到严格、系统的训练,培养学生更系统、更严密地分析问题和解决问题的思维能力,从而能熟练地利用计算机解决实际问题,为后续专业课程打下扎实的基础。
通过本课程的教学,要求学生:(1)牢固掌握C++语言基本数据类型、复合数据类型、基本控制结构、函数以及面向对象程序设计中类与对象、继承、多态性等基本概念;(2)掌握类属机制、C++输入输出机制、程序断言、异常处理等高级机制;(3)对面向对象程序构造方法、抽象数据类型、软件重用思想、其他程序设计风范,其他面向对象程序设计语言有所了解。
本课程的先修课程为“计算机导论”、“C语言”,后续课程主要是“数据结构与算法”、“编译原理”与“软件工程”。
二、课程目标1.知道《面向对象程序设计》这门学科的性质、地位、研究范围、学科进展和未来方向等。
对面向对象程序构造方法、抽象数据类型、软件重用思想、其他程序设计风范、其他面向对象程序设计语言有所了解。
2.理解该门学科的主要概念、基本原理和策略等。
3.掌握C++语言基本数据类型、复合数据类型、基本控制结构、函数以及面向对象程序设计中类与对象、继承、多态性等基本概念;掌握类属机制、C++输入输出机制、程序断言、异常处理等高级机制。
4.能够把所学的原理应用到具体的实践中去,如能利用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函数在读⼊数据时可以包括空⽩字符,⽽后者不可以。
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++程序设计基础(第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++程序中的应用。
* 理解: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++输⼊和输出概述 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类的,因此继承了输⼊⽅法和输出⽅法。
一、单选题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++程序设计试题一、单项选择题(本大题共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分)请在每小题的空格中填上正确答案。
面向对象程序设计技术作业四一、填空题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++程序设计》真题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 分)()。