友元函數和友元類

 

1. 使用友元的原因:

    類具有封裝和信息隱藏的作用,只有類的成員函數才能訪問類的私有成員。如果把數據成員都定義爲公有的,會破壞類的隱藏特性。但爲了訪問這些數據成員經常需要多次調用成員函數,會有很多開銷。因此才使用友元。

 

2. 友元的種類

    友元可以是一個函數(友元函數),也可以是一個類(友元類)。

    友元函數定義在類的外部,它不是類的成員函數,但需要再類體內用關鍵字friend進行聲明。友元函數不是類的成員函數,但它可以訪問類的私有成員。提高了程序的運行效率,但是破壞了類的封裝性和隱藏性

 

3. 書寫習慣

    儘管友元關係可以寫在類定義中的任何地方,但是較好的編程習慣是:將所有友元關係的聲明放在最前面的位置,並且不加任何訪問控制符。

 

附:面試例題

請描述模板類的友元重載。(《程序員面試寶典》第121頁,不太理解題目意思,求解)

#include <iostream>
using namespace std;

//類Test的聲明
template <class T>
class Test;

//重載<<的聲明
template <class T>
ostream& operator<< (ostream& out,const Test<T> &obj);

template <class T>
class Test
{
	friend ostream& operator<< (ostream& out,const Test<T> &obj);
private:
	int num;
public:
	Test(int n=0){num=n;}
	Test(const Test<T>& t){num=t.num;}
};

template<class T>
ostream& operator<< (ostream& out,const Test<T> &obj)
{
	out<<obj.num;
	return out;
}

int _tmain(int argc, _TCHAR* argv[])
{
	Test<int> t(1);
	cout<<t<<endl;

	return 0;
}


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章