第十四讲 文件流与 输出输入重载.

Slides:



Advertisements
Similar presentations
計算機程式語言實習課.
Advertisements

地方教育發展基金執行實務 王麗真、江明君、魏珮如 1.
面向对象程序设计 QQ群: Object-Oriented Programming 汽车学院.
第11章 输入输出流类.
流类库与输入/输出 输入/输出标准流类 文件流类 串流类 输入/输出成员函数 用户自定义类型的输入/输出.
13.1 C++的输入和输出 13.2 标准输出流 13.3 标准输入流 13.4 文件操作与文件流 13.5 字符串流
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
目标 运用File类进行文件操作 理解流,标准输入/输出流的概念
C++的檔案處理 綠園.
Using C++ The Weird Way Something about c++11 & OOP tricks
第8章 文件 P 了解文件的处理过程 8.2 掌握文件的基本操作本领 8.3 文件的应用举例 *贯穿教学全过程的实例.
Hadoop I/O By ShiChaojie.
第8章 C++输入输出类层次 ffh.
刘胥影 东南大学计算机学院 面向对象程序设计1 2011~2012第3学期 刘胥影 东南大学计算机学院.
第七章 I/O流.
第11章 运算符重载 什么是运算符重载 运算符重载的方法 几个特殊的运算符的重载 自定义类型转换运算符 运算符重载实例.
第十一章 文件操作 文件的概念 文件的读写 主讲:李祥 时间:2015年10月.
File Processing Chapter 17
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
辅导课程六.
第9章 C++的文件操作 “文件”,一般是指内存以外的存储介质上一批数据的集合。C++在语言层次上提供了文件操作的一系列函数用于完成文件的操作,打开、关闭文件,读取、写入文件数据等操作。 1。字符文件与二进制文件 字符文件:又称ASCII文件或文本TEXT文件,它是以一个字节存放一个ASCII码,代表一个字符。例如,32767需要使用5个字节表示,即:
第14章 标准库和输入输出流 14.1 标准库概述 14.2 流 14.3 输入输出流 14.4 格式化I/O 14.5 文件处理
第一章 C++编程简介 丘志杰 电子科技大学 计算机学院 软件学院.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
文件读写实践 广州创龙电子科技有限公司 01 广州创龙电子科技有限公司
檔案 將資料存入磁碟或由磁碟取出資料的方式, 稱為檔案存取處理。 C語言的檔案處理 C++語言的檔案處理.
第八章 文件 引述 输入输出流和文件概述 文件操作 流的格式化输出 程序举例 本章小节.
7.1 C++的输入和输出 7.2 标准输出流 7.3 标准输入流 7.4 文件操作与文件流 7.5 字符串流
第13章 输入输出流 王雪晶.
第10章 文件操作.
如何生成设备节点 广州创龙电子科技有限公司
第十三章 文件 目录 学生信息管理系统的完善 文件的概念 文件类型指针 文件的打开与关闭 文件的顺序读写
第九章 C++的I/O流库 9.1 流 9.2 磁盘文件 9.3 程序举例.
第八章 文件 引述 输入输出流和文件概述 文件操作 流的格式化输出 程序举例 本章小节.
C++语言程序设计 第十一章 流类库与输入/输出.
第十一讲 运算符重载 与类型转换.
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
目录 11.1 文件的种类 11.2 文件指针和文件内部的位置指针 11.3 文件的操作 11.4 文件的打开与关闭
第七章 操作符重载 胡昊 南京大学计算机系软件所.
10 多載函數 10.1 多載概論 多載一般函數 多載成員函數 10-3
Java语言程序设计 清华大学出版社 第8章 输入输出流(1).
第 14 章 輸出與輸入.
第十三讲 文件流与 输出输入重载.
第9章 文件 学习目的与要求: 熟练掌握文件指针的使用 掌握与文件相关的函数 能够利用文件相关函数实现各种操作.
C语言程序设计.
第14章 输入输出与文件 输入输出是指程序与外部设备交换信息 C++把输入输出看成是一个数据流 输入流:外围设备流向内存的数据
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第8章 I/O流 8.1 C++流的概念 8.2 C++的输入输出 8.3 文件流与文件操作 8.4 重载插入运算符和提取运算符
第7章 输入/输出流 文件和I/O流概述 标准I/O流的对象及其成员函数 文件流.
手机移动设备嵌入式C++ 第七章 C++的I/O流库.
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
第 11 章 输入/输出流 11.1 输入/输出流概述 11.2 标准输入/输出流 11.3 输入/输出格式控制 11.4 文件输入/输出
本节内容 随机读取 视频提供:昆山爱达人信息技术有限公司.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
第3章C++面向对象程序设计 3.1 类和对象 作业1 3.2 继承和派生类 作业2 3.3 多态和虚函数 3.4 运算符重载 作业3
姚金宇 MIT SCHEME 使用说明 姚金宇
C++的檔案處理 綠園.
第十一章 IO流与文件系统 丘志杰 电子科技大学 计算机学院 软件学院.
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
Visual Basic程序设计 第13章 访问数据库
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
C/C++基礎程式設計班 C++: 物件的使用、參考、重載函式 講師:林業峻 CSIE, NTU 3/28, 2015.
第1章 C++面向对象程序设计要点 1.1 函数和函数参数 1.2 输入输出   1.3 类 1.4 抽象类型和模板.
第7章 模板 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
_08文件操作 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
《数据结构与算法设计》第一部分 面向对象的C++程序设计基础.
第2章 文件操作 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第十一章 异常处理 C++语言程序设计.
Presentation transcript:

第十四讲 文件流与 输出输入重载

输入输出流 文件流类与文件流对象 文件流对象与文件关联 文件读写:文本文件与二进制文件 在 C++ 中,所有的输入输出都通过“流”来描述。 输入流:数据流向程序 (input) 输出流:数据从程序中流出 (output) 具体实现方法:流类和流对象 文件流类与文件流对象 文件流对象与文件关联 文件读写:文本文件与二进制文件 重载输出输入操作运算符 << 和 >>

C++ I/O 库中定义的流类 ifstream istream ios iostream fstream ostream ofstream 类名 作用 头文件 ios 抽象父类 iostream istream ostream 通用输入流和其他输入流的父类 通用输出流和其他输出流的父类 通用输入输出流和其他输入输出流的父类 ifstream ofstream fstream 输入文件流类 输出文件流类 输入输出文件流类 ifstream istream ios iostream fstream ostream ofstream

文件流类 文件流头文件:fstream #include <fstream> 该头文件中定义了三个文件流类 ofstream 向文件写入数据 ifstream 从文件读取数据 fstream 既读又写

创建文件流对象 fstream fstrm; // 创建一个文件流对象,未绑定到任何文件 fstream fstrm(fname); // 创建一个文件流,并绑定到文件 fname fstream fstrm(fname, mode); // 创建文件流的同时指定文件的打开模式 这里的类 fstream 也可以是 ifstream 或 ofstream 如果用 ifstream,则对象所关联的文件只能读 如果用 ofstream,则对象所关联的文件只能写

文件流成员函数 文件流对象基本操作(成员函数) fstrm.open(fname) // 将文件流对象 fstrm 绑定到文件 fname fstrm.close() // 关闭与文件流对象 fstrm 绑定的文件 fstrm.is_open() // 测试文件是否已顺利打开(且未关闭) 将文件流对象关联到其它文件时,须先关闭已绑定的文件 文件流对象被释放时,close 会被自动调用

文件打开模式 ios::in // 只读 ios::out // 只写,若文件存在,则内容被清除 ios::app // 追加,即每次写操作均定位到文件末尾 ios::ate // 打开文件后立即定位到文件末尾 ios::Trunc // 若文件存在,则清除文件中原有的内容 ios::binary // 以二进制方式进行读写 输入输出方式是在 ios类 中定义的 以上方式可以组合使用,用“ | ”隔开,如 ios::out|ios::binary ios::app 通常与 ios::out 组合使用

文件打开模式(续) 在缺省情形下,文件以文本方式打开 ifstream 对象只能设定 in 模式,缺省为 in ofstream 对象只能设定 out 模式,缺省为 out fstream 对象可以设定 in 或/和 out 模式 建议使用 fstream 对象进行文件读写操作。 ifstream ifstrm; ofstream ofstrm; fstream fstrm; ifstrm.open("fname1"); // 以缺省方式打开 ofstrm.open("fname2", ios::out); fstrm.open("fname3", ios::out|ios::app);

文本文件操作 文本文件的写:<< 文本文件的读:>> 或 getline fstream fstrm("fname.txt",ios::out); fstrm << "Hello Math!" << endl; fstrm << "This is an example" << endl; fstrm.close(); ex14_fstream01.cpp 文本文件的读:>> 或 getline char str1[20], str2[20]; fstream fstrm("fname.txt",ios::in); fstrm >> str1; // 缺省以空格为输入结束符 fstrm.getline(str2,12); fstrm.close(); 我们是如何使用 cin 和 cout 的, 就可以同样来使用文件流对象

二进制文件操作 对二进制文件使用 <<、>> 或 getline 是没有意义的。 此时需要使用父类 ostream 的成员函数 write 和父类 istream 的成员函数 read。 write 和 read 的函数原型 write(const char* buf, int n); read(char* buf, int n); 字符指针 buf 指向内存中一段存储空间,n 是读写的字节数。

二进制文件操作(续) 输出文件流对象.write(buf,50); 输入文件流对象.read(buf,30); read 函数从输入文件流对象所关联的文件中,读入 30 个字节(或遇 EOF 结束),存放在字符指针 buf 所指的内存空间内。

例:二进制文件操作 const int n=5; int A[n]={1,2,3,4,5}; fstream fstrm("fout.dat",ios::out|ios::binary); // 文件流对象可以直接初始化 fstrm.write((char*)A,sizeof(A)); // 需要强制类型转换 fstrm.close(); int B[n]; fstrm.open("fout.dat",ios::in|ios::binary); fstrm.read((char*)B,sizeof(B)); ex14_fstream02.cpp

重载 << 和 >> IO 标准库分别使用 << 和 >> 执行输出和输入操作,为了 使得它们也适用于新定义的类,即也能用 << 和 >> 进行 相应对象的输出和输入,需要对这两个运算符进行重载。

重载 << 和 >> 我们通过具体例子来说明 注:不能作为成员函数重载!只能作为非成员函数! class Rational { public: Rational() { x=0; y=1; } Rational(int x, int y) { this->x=x; this->y=y; } friend ostream & operator<<(ostream &, const Rational &); friend istream & operator>>(istream &, Rational &); private: int x, y; }; 注:不能作为成员函数重载!只能作为非成员函数!

friend ostream & operator<<(ostream &, const Rational &); 几点说明 friend ostream & operator<<(ostream &, const Rational &); 通常情况下,第一个形参是 ostream 对象的引用(不能是常引用) 第二个形参通常是 对象的常引用 (需要输出的对象) 为了与其他输出运算符保持一致,返回值通常是一个引用 ostream & operator<<(ostream & out, const Rational & a) { out << a.x << "/" << a.y; return out; } ex14_overload01.cpp 注:尽量减少格式化操作!如换行等

上机作业 1) 用文件流方式完成下面操作: 生成一个 6 X 6 的矩阵 A,其元素为 [0,1] 之间的双精度数。 (a) 将其按矩阵形式写入到一个文本文件 fout01.txt 中; (b) 将其写入到一个二进制文件 fout01.dat 中; (c) 再从文件 fout01.dat 中读取前 12 个数据(双精度), 构成一个 2 X 6 的矩阵 B,并将 B 按行输出。 (程序命名为 hw14_01.cpp ) 2) 重载复数类的输出操作符 << 和输入操作符 >> 输出格式为: a+bi,如:3+4i (程序命名为 hw14_02.cpp )