C++类的友元函数与文件输入输出对象
需积分: 35 199 浏览量
更新于2024-08-24
收藏 1.05MB PPT 举报
"C++编程中的文件对象与友元函数"
在C++编程中,文件对象是用来处理磁盘上的文件的。本课件主要讲解了如何定义和使用这些对象进行输入输出操作,以及友元函数的概念及其应用。C++提供了三个类来处理文件流:`ifstream`用于输入,`ofstream`用于输出,而`fstream`则同时支持输入和输出。这些类都在头文件`fstream`中被声明。
1. 定义用于输入的文件对象:`ifstream`类
`ifstream`是输入流类,它继承自`istream`类,用于读取文件内容。创建一个`ifstream`对象并打开一个文件后,可以使用流操作符如`>>`来从文件中提取数据。
2. 定义用于输出的文件对象:`ofstream`类
`ofstream`是输出流类,继承自`ostream`类,用于向文件写入数据。通过创建`ofstream`对象并打开文件,可以使用流操作符`<<`将数据写入文件。
3. 定义用于输入输出的文件对象:`fstream`类
`fstream`类同时继承自`istream`和`ostream`,允许对同一个文件进行读写操作。使用`fstream`时,需要明确指定文件模式,如读写模式。
友元函数是C++中的一种特性,它突破了封装性的限制,允许非成员函数访问类的私有和保护成员。友元函数在类定义内部声明,使用`friend`关键字。虽然它不是类的成员,但具有访问类所有成员的能力,包括私有和保护成员。这使得友元函数可以更灵活地操作类的内部状态,但也可能降低代码的安全性。
友元函数的定义格式如下:
```cpp
friend 返回值类型 FuncName(参数列表);
```
例如:
```cpp
friend float Volume(A& a);
```
友元函数的调用方式与普通函数相同,不需要使用对象名,而是直接调用函数名,并传入对象的引用或指针。例如:
```cpp
friend float Sum(A& a) { return a.x + a.y; }
```
在示例代码中,`Sum`函数被声明为类`A`的友元,它可以访问`A`的私有成员`x`和`y`。在`main`函数中,`Sum(t2)`的调用展示了如何通过友元函数访问对象的私有数据。
需要注意的是,友元函数不拥有`this`指针,因此它们不能像成员函数那样直接访问对象的数据。它们通常需要接收对象的引用或指针作为参数,以便访问对象的成员。
友元函数与普通函数的主要区别在于:
1. 友元函数必须在类定义中声明,而普通函数可以在任何地方定义。
2. 友元函数可以访问类的所有成员,包括私有和保护成员,而普通函数只能访问类的公有成员。
在类`A`的另一个例子中,展示了如何定义一个接受对象引用的友元函数`Sum(A&)`,以及一个非友元函数`Sumxy(A&)`,后者通过公有成员函数`Getx()`和`Gety()`访问私有数据。这说明即使没有友元关系,也可以通过公有接口来间接访问私有数据,但这样做通常不如友元函数直接且高效。
2009-06-05 上传
2009-06-05 上传
2009-02-22 上传
2009-09-05 上传
2008-12-21 上传
2021-10-03 上传
2024-03-17 上传
2010-05-13 上传
2022-11-02 上传
杜浩明
- 粉丝: 13
- 资源: 2万+
最新资源
- 平尾装配工作平台运输支撑系统设计与应用
- MAX-MIN Ant System:用MATLAB解决旅行商问题
- Flutter状态管理新秀:sealed_flutter_bloc包整合seal_unions
- Pong²开源游戏:双人对战图形化的经典竞技体验
- jQuery spriteAnimator插件:创建精灵动画的利器
- 广播媒体对象传输方法与设备的技术分析
- MATLAB HDF5数据提取工具:深层结构化数据处理
- 适用于arm64的Valgrind交叉编译包发布
- 基于canvas和Java后端的小程序“飞翔的小鸟”完整示例
- 全面升级STM32F7 Discovery LCD BSP驱动程序
- React Router v4 入门教程与示例代码解析
- 下载OpenCV各版本安装包,全面覆盖2.4至4.5
- 手写笔画分割技术的新突破:智能分割方法与装置
- 基于Koplowitz & Bruckstein算法的MATLAB周长估计方法
- Modbus4j-3.0.3版本免费下载指南
- PoqetPresenter:Sharp Zaurus上的开源OpenOffice演示查看器