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;
}


posted on 2015-03-04 20:29  daghlny  阅读(142)  评论(0编辑  收藏  举报

导航