C++教程:C++友元类讲解

2020-01-06 12:20:36王旭
在编写链表类的时候我们有着这样的困惑:链表类和链表结点类都是我们编写的,我们能保证链表类对链表结点类的操作都是安全的。但由于类的封装性,我们不得不编写一些成员函数,以便于链表类访问链表结点类的私有成员数据。好在链表结点类的成员数据并不是很多,否则岂不是需要一大堆成员函数来供别的类访问?对于这种情况,我们能否告诉链表结点类:“链表类是安全的,让它访问你的私有成员吧”?

在C++中,可以用友元来解决这种尴尬的问题。所谓友元,就是作为一个类的“朋友”,可以例外地访问它的私有成员数据或私有成员函数。

友元类

类似于链表类和链表结点类的问题,我们可以用友元类来解决。即链表类是链表结点类的“朋友”,可以直接访问链表结点类的私有成员数据或私有成员函数。显然,要做链表结点类的“朋友”,必须要得到链表结点类的认可。所以我们必须在链表结点类的声明中告诉电脑,链表类是它认可的“朋友”,可以访问它的私有成员。声明友元类的语句格式为:
    friend class 类名;
下面我们来看一下,友元是如何让我们更方便地设计程序的:(程序16.2.1)
//node.h
class Node//声明一个链表结点类
{
   friend class Linklist;//在Node类中声明友元类Linklist
   public: