C++友元函数和友元类

最近这些天在重温设计模式GOF23,偶然想到友元,不使用都快忘了

今天重温一下C++友元知识,学了之后几乎就没怎么用到,几乎都是与设计模式打交道的。

虽然说友元能提高效率,表达清晰,但是破坏了类的封装机制,所以一般情况下不建议使用友元,

 

友元类简单demo:

// 类A,希望把私有成员公开给类B
class A
{
	friend class B;// 把B设置为友元类
public:
	A(int i):m_i(i){}
private:
	int m_i;
	int getInt(){return 100;}
};
// 类B,希望访问类A中的私有成员
class B
{
public:
	B(A a):m_a(a),m_n(a.m_i){}
	void setInt(){m_n = m_a.m_i;}//访问私有变量
	int getInt(){return m_a.getInt();};//访问私有函数
private:
	int m_n;
	A m_a;
};
void main()
{
	A a(8);
	B b(a);
	int n = b.getInt();
}

例子很简单,就是在类A中声明一下,类A是类B的友元类,这样类B就有访问类A私有成员的权限啦,但是类A还是不能访问类B的私有成员的,切记。

 

 

友元函数木有this指针,也就是说其实它是类外函数,它的声明放在私有或者公共段并没有什么区别,友元函数是不能被继承的,就像父亲的朋友未必是儿子的朋友。

声明: friend + 普通函数声明

实现位置:可以在类外或类中

实现代码:与普通函数相同

调用:类似普通函数,直接调用

友元函数使用demo如下:

 

class CTest
{
	friend void Print(const CTest& test);
};

void Print(const CTest& test)
{
	cout<<"print "<<endl;
}

void main()
{
	CTest test;
	Print(test);
}


 


 

 

posted @ 2014-12-03 22:49  Jeson Yang  阅读(139)  评论(0编辑  收藏  举报