如题:
2021年4月:
分析
题本身没啥可说的,主要是复习下使用方法。
这部分内容属于c++复习之类和对象进阶,看讲义7部分的话,类外函数访问本类的私有成员变量。不太使用,不能够理解“类外函数”。
知识点:“类外函数”情形
最常用的情形,将其他类的成员函数用作友元
如下图所示:
1.其他类的成员函数,包括构造和析构函数,都可以说明为一个类的友元函数
2.当创建一个类的对象时,就可以通过友元函数,访问友元函数所在类的私有变量。
友元函数如何访问所在类的私有成员?
通过友元函数的参数,传递所在类的对象,再通过所在类对象访问。如上图示。func(Two&),调用时,会传递Two的对象,通过对象调用友元函数所在类的私有变量。这可以称为友元机制
类本身的友元函数
也就是讲义上所说的全局函数情形。从这也可以看出,用friend声明的函数,肯定不是这个类的成员函数。由于这个函数是个全局函数,使用时可以直接使用。不用再像类的成员函数一样,使用对象名访问。
类说明为友元
此时,不再是友元函数了,而是友元类。
说明格式为:
friend class 类名;
此时,友元类的对象中的所有(类)成员函数,都可以通过友元机制访问友元类所在类的私有成员变量。
非传递性
类A是类B的友元,类B是类C的友元,类A不是类C的友元。
解释:
a的所有的成员函数可以访问b类的私有变量,b的成员函数可以访问c的私有变量。a的成员函数能否通过友元机制访问c的私有变量呢?显然是不可以,因为友元机制是通过函数的参数来访问的,也就是a的成员函数可能通过定义b的形参来访问b的私有变量,形参b,指的是访问b的属性(也可说是变量),而属性显然不可以再带形参了。
非交换性
类a是b的友元,类b不一定是类a的友元.这个好理解。
总结
这里容易出错,是因为搞不清,谁访问谁的私有变量。a是b的友元,a就可以访问b的私有变量。