我们平常使用友元函数都仅是在类内部声明,在类外定义,今天看到了一个在类内定义的例子,就产生了好奇,把自己的总结记录下来;
先看例子
1 class T 2 { 3 public: 4 T(); 5 ~T(); 6 7 //不引入类对象 8 friend void show_hello_no_param() 9 { 10 std::cout << "show_hello_no_param() of T : Hello world! "; 11 } 12 13 //引入类对象 14 friend void show_hello(T t) 15 { 16 std::cout << "show_hello() of T : Hello world! "; 17 } 18 19 }; 20 21 int main(int argc, char* argv[]) 22 { 23 T t; 24 25 show_hello_no_param(); //编译不通过 26 27 show_hello(t); //编译可以通过 28 29 getchar(); 30 31 return 0; 32 }
根据上面的例子感觉像是类内定义的友元函数在类对象的作用域内可以编译通过;
同时也试了下传指针也能编译通过,T* t=NULL或 t = new T()结果一样都能通过;
1 T* t=NULL;//new T(); 2 3 //show_hello_no_param(); //编译不通过 4 5 show_hello(t); //编译可以通过
这里面到底涉及什么原理还没搞清楚,希望清楚的高手能赐教一下。