最早接觸C++的時候,曾經(jīng)在很多資料上不止一次的看到,應該盡量使用C++的低級特性去編程。 某些高級特性會導致問題,如模版會導致程序難以調試,友元會破壞程序封閉性。 可是C++之所以是一門優(yōu)秀到完美的編程語言,絕非因為和一般面向對象語言的“普適”,相反,作為一個合格的程序員,應該學會掌握C++的高級特性,讓自己的代碼更加優(yōu)美,讓程序更加有效率。?
黑格爾說“存在即合理”, ?對于友元的“合理”, 我認為有如下幾點:
1. ? ??友元可以擴展類的功能。 ?對于一些結構固定、數(shù)據(jù)固定但是操作總是在更新的類,定義友元可以避免對該類的不斷修改。因為友元可以訪問私有變量, 這是它優(yōu)于組合的一點,當然,也是一個缺陷; 仁者見仁,智者見智——它成為缺陷的唯一原因是:你用錯了。?
2. ? ? 友元可以表現(xiàn)一對多的關系。 ? 這個一對多比較寬泛,既可以是“一個友元對象對應多個宿主對象”, 也可以是“一個友元類對應多個宿主類”; 當然,依舊有利有弊,只看使用者用法是否得當。?
3. ? 友元可以更好的實現(xiàn)封裝和復用。 ?如同1中所述,定義友元之后,如果情景發(fā)生改變,可以做到對原接口最小的更改。
一孔之見,希望讀者批評指正。???