现在的位置: 首页 > 综合 > 正文

友元调用顺序

2013年04月10日 ⁄ 综合 ⁄ 共 1295字 ⁄ 字号 评论关闭
//对于友元需要考虑的有三个点:成员函数友元,类友元,非成员函数友元


#include <iostream>
using namespace std;
/*对于类友元:如果一个类B要让A类成为其友元的话,首先那个B类要定义,定义完成之后才定义友元类
理解就是:对于A中的函数需要操作这个B类,所以B类之前要定义*/
// class B
// {
// 	int bi;
// public:
// 	B(int i):bi(i){}
// 	friend class A;
// };
// class A
// {
// public:
// 	A(){}
// 	void A::afun(B& b)
// 	{
// 		cout<<"B中元素使用i"<<b.bi<<endl;
// 	}
// 	
// };
// 
// 
// int main()
// {
// 	B b(3);
// 	A a;
// 	a.afun(b);
// 	return 0;
// }
/*对于类成员函数成为友元:A类中的成员函数成为B类的友元,那么:


*/
// class B;
// class A
// {
// public:
// 	A(){}
// 	void A::afun(B& b)
// // {
// // 	cout<<"B中元素使用i"<<b.bi<<endl;
// // }
// 
// };
// class B
// {
// 	int bi;
// public:
// 	B(int i):bi(i){}
// 	friend void A::afun(B& b);
// };
// // void A::afun(B& b)
// // {
// // 	cout<<"B中元素使用i"<<b.bi<<endl;
// // }
// 
// 
// int main()
// {
// 	B b(3);
// 	A a;
// 	a.afun(b);
// 	return 0;
// }
// // 对于那些在类的成员函数作为类的一个友元的话,此处是A类的一个成员函数要做B的友元,那么这里的话就是对于A类的成员函数
// // 如果要调用B类的成员的时候必须在B类定义完成之后再定义,A类要在B类定义前定义,但是该成员函数要在定义之后定义,
// 也就是说A类要在A类的成员函数成为的友元的那个类前调用,友元的那个函数要在成为友元的那个累定义完全之后在定义,也就是A类的成员函数
// 要成为B类的友元,A类要调用B类的话,前面要声明下B类,A类的定义要在B类前面,B类定义完全之后才是A的成员函数定义
/*下面是对于非成员函数成为友元*/
class A
{
	int i;
public:
	A(int j):i(j){}
	friend void fun(A &a);
};


void fun(A &a)
{
	cout<<"fun():a中的i"<<a.i<<endl;
}


int main()
{
	A a(3);
	fun(a);
	return 0;
}
// 对于那些非成员函成为类的友元的话,那些类要在非成员函数前面定义,因为我们需要函数中调用该对象的。






总结就是:对于类成为友元的话,比如A要成为B的友元,那B要在A前面定义,因为A可能会用到B的元素。
对于成员函数的友元的话,假如A类中的成员函数要成为B类的友元函数的话,那么需要先把那个A定义出来
定义完了之后就是友元的类,之后就是友元的成员函数的定义。
对于非成员函数成为友元的话就是该函数成为类A的友元的话,那个A类要先定义。

抱歉!评论已关闭.