C++友元
友元以关键字friend开始,只能出现在类定义的内部。
友元可以是普通的成员函数,或前面定义的其他类的成员函数,或整个类。
关于友元的几个问题:
1.必须先定义包含成员函数的类,才能将成员函数设为友元。
2.类和非成员函数就不需要预先声明。
3.重载函数需要针对每一个函数都进行友元定义。
以下是两个例子:
1.友元引入的类和函数,可以相当于已经声明过了。
class X{ friend class Y; friend void f(){/*定义内容*/} } class Z{ Y *ymem; void g(){return ::f();} };
2.关于上面问题1的示例:
#include<string> #include<iostream> class Boo; class Foo{ private: std::string s; public: void foo1(std::string); Foo(std::string ss = "harry Potter"):s(ss){}; }; class Boo{ private: friend void Foo::foo1(std::string); int boo_cnt; public: Boo(int i = 1): boo_cnt(i){} }; void Foo::foo1(std::string ss){ Boo b = Boo(7); std::cout << s << std::endl; s = ss; std::cout << b.boo_cnt << std::endl; } int main(void){ Foo f = Foo(); std::string ss("liino"); f.foo1(ss); return 1; }