C++类的友元函数与文件输入输出对象

需积分: 35 0 下载量 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()`访问私有数据。这说明即使没有友元关系,也可以通过公有接口来间接访问私有数据,但这样做通常不如友元函数直接且高效。