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

Slides:



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

地方教育發展基金執行實務 王麗真、江明君、魏珮如 1.
第 2 章 初探 C++.
跳楼价 亏本大甩卖 清仓处理 买一送一 5折酬宾. 跳楼价 亏本大甩卖 清仓处理 买一送一 5折酬宾.
第九讲 类与对象 (I)面向对象基础.
補充: Input from a text file
第11章 输入输出流类.
第4章 数组 数组是由一定数目的同类元素顺序排列而成的结构类型数据 一个数组在内存占有一片连续的存储区域 数组名是存储空间的首地址
流类库与输入/输出 输入/输出标准流类 文件流类 串流类 输入/输出成员函数 用户自定义类型的输入/输出.
File Access 井民全製作.
C++的檔案處理 綠園.
資料大樓 --談指標與陣列 綠園.
第8章 C++输入输出类层次 ffh.
刘胥影 东南大学计算机学院 面向对象程序设计1 2011~2012第3学期 刘胥影 东南大学计算机学院.
第七章 I/O流.
第11章 运算符重载 什么是运算符重载 运算符重载的方法 几个特殊的运算符的重载 自定义类型转换运算符 运算符重载实例.
第一章 程序的基本结构. 第一章 程序的基本结构 教材及授课结构 本章目标 基本内容 扩展阅读 上机指导 应用举例 习题.
第八﹑九章 I/O系統 檔案I/O的基本概念 格式化I/O 建立自訂的嵌入子 建立自訂的擷取子 自訂I/O與檔案.
刘胥影 东南大学计算机学院 面向对象程序设计1 2010~2011第3学期 刘胥影 东南大学计算机学院.
類別樣板 Class Template 類似函式樣板 由類別樣板產生的類別稱為類別樣版的實體(instance)
Operator Overloading; String and Array Objects
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
Object-Oriented Programming in C++ 第一章 C++的初步知识
2 C++ 的基本語法和使用環境 親自撰寫和執行程式是學好程式語言的不二法門。本章藉由兩個簡單的程式,介紹C++ 程式的基本結構和開發環境,讓初學者能逐漸建立使用C++ 的信心。
第6章 基本的IDL到C++的映射 3.2 简介 从IDL到C++的映射必须具备下面的条件 (1) 映射应该很直观,并且很容易使用
第9章 C++的文件操作 “文件”,一般是指内存以外的存储介质上一批数据的集合。C++在语言层次上提供了文件操作的一系列函数用于完成文件的操作,打开、关闭文件,读取、写入文件数据等操作。 1。字符文件与二进制文件 字符文件:又称ASCII文件或文本TEXT文件,它是以一个字节存放一个ASCII码,代表一个字符。例如,32767需要使用5个字节表示,即:
第一章 C++编程简介 丘志杰 电子科技大学 计算机学院 软件学院.
檔案 將資料存入磁碟或由磁碟取出資料的方式, 稱為檔案存取處理。 C語言的檔案處理 C++語言的檔案處理.
第八章 文件 引述 输入输出流和文件概述 文件操作 流的格式化输出 程序举例 本章小节.
C++程序设计 string(字符串类) vector(容器类).
第13章 输入输出流 王雪晶.
第九章 C++的I/O流库 9.1 流 9.2 磁盘文件 9.3 程序举例.
第八章 文件 引述 输入输出流和文件概述 文件操作 流的格式化输出 程序举例 本章小节.
C++语言程序设计 第十一章 流类库与输入/输出.
切換Dev c++顯示語言 工具->環境選項(V)->介面->language (Chinese TW)
10 多載函數 10.1 多載概論 多載一般函數 多載成員函數 10-3
第 14 章 輸出與輸入.
Classes (2) Lecture 7.
C++ 程式設計 基礎篇 張啟中 Chang Chi-Chung.
第14章 输入输出与文件 输入输出是指程序与外部设备交换信息 C++把输入输出看成是一个数据流 输入流:外围设备流向内存的数据
C++大学基础教程 第11章 多态性 北京科技大学 信息基础科学系 2019/4/8 北京科技大学.
第二章 基本数据类型及运算 C数据类型概述 基本数据类型 运算符和表达式 混合运算与类型转换 数据的输入输出 顺序程序设计举例.
第7章 输入/输出流 文件和I/O流概述 标准I/O流的对象及其成员函数 文件流.
手机移动设备嵌入式C++ 第七章 C++的I/O流库.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
第七章  事业单位支出的核算      §第一节  支出概述     §第二节  拨出款项     §第三节  各项支出     §第四节  成本费用.
第3章C++面向对象程序设计 3.1 类和对象 作业1 3.2 继承和派生类 作业2 3.3 多态和虚函数 3.4 运算符重载 作业3
第四章 栈和队列 栈 ( Stack ) 队列 ( Queue ) 优先队列 (Priority Queue) 小结.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
物件導向程式設計 CH2.
C++的檔案處理 綠園.
第11章 從C到C++語言 11-1 C++語言的基礎 11-2 C++語言的資料型態與運算子 11-3 C++語言的輸出與輸入
C++程式設計入門 變數與運算子 作者:黃建庭.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
第十一章 IO流与文件系统 丘志杰 电子科技大学 计算机学院 软件学院.
C++程序设计基础 主讲人:谢昕 华东交通大学信息工程学院 第十~十二讲 多态性和虚函数 2005年春季学期.
第九章 物件導向-進階.
C/C++基礎程式設計班 C++: 物件的使用、參考、重載函式 講師:林業峻 CSIE, NTU 3/28, 2015.
第1章 C++面向对象程序设计要点 1.1 函数和函数参数 1.2 输入输出   1.3 类 1.4 抽象类型和模板.
第 3 章 类的基础部分 陈哲 副教授 南京航空航天大学 计算机科学与技术学院.
C++语言程序设计 C++语言程序设计 第十章 多态 第十一组 C++语言程序设计.
《数据结构与算法设计》第一部分 面向对象的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(); ex13_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)); ex13_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 对象) 第二个形参是 对象的常引用 (需要输出的对象) 为了与其他输出运算符保持一致,一般返回它的 ostream 形参 ostream & operator<<(ostream & out, const Rational & a) { out << a.x << "/" << a.y; return out; } ex13_overload11.cpp 注:尽量减少格式化操作!如换行等

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