C++流与文件操作全解析
立即解锁
发布时间: 2025-08-19 01:36:35 阅读量: 26 订阅数: 29 AIGC 


C++面向对象编程入门与实践
### C++ 流与文件操作全解析
在 C++ 编程中,流与文件操作是非常重要的部分,它涉及到数据的输入输出、文件读写等多个方面。下面将详细介绍 C++ 中流与文件操作的相关知识。
#### 1. 员工数据处理与程序功能扩展
在程序中,我们可以对员工数据进行处理,例如有科学家 Faraday,编号为 2222,发表文章数量为 99;还有劳动者 Smith,编号为 3333。并且,我们可以将这些数据写入磁盘文件,之后再次启动程序时,能够读取文件使数据重新出现。同时,还可以很容易地为程序添加删除员工、从文件中检索单个员工数据、搜索具有特定特征的员工等功能。
#### 2. 重载提取和插入运算符
这是 C++ 的一个强大特性,它允许我们像处理基本数据类型(如 int 和 double)一样处理用户定义数据类型的输入输出。
##### 2.1 针对 cout 和 cin 的重载
以下是一个名为 ENGLIO 的示例,它为 Distance 类重载了插入和提取运算符,使其能与 cout 和 cin 配合使用。
```cpp
// englio.cpp
// overloaded << and >> operators
#include <iostream>
using namespace std;
class Distance //English Distance class
{
private:
int feet;
float inches;
public:
Distance() : feet(0), inches(0.0) //constructor (no args)
{ }
//constructor (two args)
Distance(int ft, float in) : feet(ft), inches(in)
{ }
friend istream& operator >> (istream& s, Distance& d);
friend ostream& operator << (ostream& s, Distance& d);
};
//--------------------------------------------------------------
istream& operator >> (istream& s, Distance& d) //get Distance
{ //from user
cout << "\nEnter feet: "; s >> d.feet; //using
cout << "Enter inches: "; s >> d.inches; //overloaded
return s; //>> operator
}
//--------------------------------------------------------------
ostream& operator << (ostream& s, Distance& d) //display
{ //Distance
s << d.feet << "\'-" << d.inches << '\"'; //using
return s; //overloaded
} //<< operator
int main()
{
Distance dist1, dist2; //define Distances
Distance dist3(11, 6.25); //define, initialize dist3
cout << "\nEnter two Distance values:";
cin >> dist1 >> dist2; //get values from user
//display distances
cout << "\ndist1 = " << dist1 << "\ndist2 = " << dist2;
cout << "\ndist3 = " << dist3 << endl;
return 0;
}
```
这个程序会向用户请求两个 Distance 值,然后打印出这些值以及程序中初始化的另一个值。例如:
```plaintext
Enter feet: 10
Enter inches: 3.5
Enter feet: 12
Enter inches: 6
dist1 = 10'-3.5"
dist2 = 12'-6"
dist3 = 11'-6.25"
```
可以看到,使用 `cin >> dist1 >> dist2;` 和 `cout << "\ndist1=" << dist1 << "\ndist2=" << dist2;` 这样的语句来处理 Distance 对象就像处理其他数据类型一样方便自然。
`<<` 和 `>>` 运算符的重载方式类似,它们通过引用返回 istream(对于 `>>`)或 ostream(对于 `<<`)对象,这些返回值允许进行链式操作。运算符接受两个通过引用传递的参数,`>>` 的第一个参数是 istream 对象(如 cin),`<<` 的第一个参数是 ostream 对象(如 cout),第二个参数是要显示的类的对象,在这个例子中是 Distance 类的对象。`>>` 运算符从第一个参数指定的流中获取输入并将其放入第二个参数指定对象的成员数据中,`<<` 运算符从第二个参数指定的对象中取出数据并将其发送到第一个参数指定的流中。
`operator<<()` 和 `operator>>()` 函数必须是 Distance 类的友元函数,因为 istream 和 ostream 对象出现在运算符的左侧。
##### 2.2 针对文件的重载
下面的示例展示了如何为 Distance 类重载 `<<` 和 `>>` 运算符,使其既能用于文件输入输出,也能与 cout 和 cin 配合使用。
```cpp
// englio2.cpp
// overloaded << and >> operators can work with files
#include <fstream>
#include <iostream>
using namespace std;
class Distance //English Distance class
{
private:
int feet;
float inches;
public:
Distance() : feet(0), inches(0.0) //constructor (no args)
{ } //constructor (two args)
Distance(int ft, float in) : feet(ft), inches(in)
{ }
friend istream& operator >> (istream& s, Distance& d);
friend ostream& operator << (ostream& s, Distance& d);
};
//--------------------------------------------------------------
istream& operator >> (istream& s, Distance& d) //get Distance
{ //from file or
char dummy; //for (‘), (-), and (“) //keyboard
//with
s >> d.feet >> dummy >> dummy >> d.inches >> dummy;
return s; //overloaded
} //>> operator
//--------------------------------------------------------------
ostream& operator << (ostream& s, Distance& d) //send Distance
{ //to file or
s << d.feet << "\'-" << d.inches << '\"'; //screen with
return s; //overloaded
} //<< operator
int main()
{
char ch;
Distance dist1;
ofstream o
```
0
0
复制全文
相关推荐










