根据我所指的文本(Herbert Schildt的 The Complete Reference ),派生类不继承朋友函数,而朋友函数可能没有 存储类说明符。也就是说,它们可能不会被声明为静态或外部。为什么呢?
答案 0 :(得分:8)
派生类不继承好友函数? [...]为什么?
因为这会打破封装:派生类无法再控制其朋友,所以它实际上无法控制谁有权访问其内部。
他们可能不会被宣布为静态或外部,为什么?
因为 static
没有意义(它只适用于属于某个类的函数,并且friend
是自由函数),extern
会再次违反封装,因为类实际上无法再控制哪个函数可以访问它:由于是extern
,朋友可以有效地来自不同的编译单元,该类未知。
请参阅Jan的答案进行更正。
答案 1 :(得分:5)
static
或extern
,因为它不是函数签名的一部分,因此不需要指定函数。我相信函数本身的声明可以(在类之外)包含。