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





