关于友元函数的疑问

 1 #include <iostream>
 2 using namespace std;
 3 
 4 class Y{
 5 
 6 public:
 7     Y(){
 8         cout << "In class Y's constructor." << endl;
 9     }
10 };
11 
12 class X {
13     friend class Y;
14     friend void f(){
15         cout << "In class X body : call f()." << endl;
16     }
17 };
18 
19 class Z{
20     Y *ymem;
21 public:
22     void g(){
23         ::f();
24     }
25 };
26 
27 
28 int main()
29 {
30     X x;
31     Z z;
32     z.g();
33 
34     return 0;
35 }

  <C++ primer 4th>中第12章第5节阐述friend的相关知识,按照书中代码,我在linux中做一下验证,代码如上.用gcc编译出错,提示f()函数没有定义.但在VC6中编译通过.我想可能跟编译器有关..至于大师为什么要在书中提出友元函数可以在类中定义,不知道唉...

  在网上查了一下,其中有人解释说<c++语言编程>中有这样一段话:"像成员函数一样,一个友元声明不会给外围的作用域引进一个名字。......对于大型程序和大的类,一个类不能‘默不作声地’给它的外围作用域加入一些名字,维持这种性质是非常好的事情。"看到这,我觉得还是gcc是对的.

posted @ 2013-11-05 17:38  NoodlesMoMo  阅读(132)  评论(0)    收藏  举报