青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

牽著老婆滿街逛

嚴以律己,寬以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

什么是友元(friend)?

允許另一個類或函數訪問你的類的東西。

友元可以是函數或者是其他的類。類授予它的友元特別的訪問權。通常同一個開發者會出于技術和非技術的原因,控制類的友元和成員函數(否則當你想更新你的類時,還要征得其它部分的擁有者的同意)。

?


--------------------------------------------------------------------------------


友元破壞了封裝嗎?


如果被適當的使用,實際上可以增強封裝。

當一個類的兩部分會有不同數量的實例或者不同的生命周期時,你經常需要將一個類分割成兩部分。在這些情況下,兩部分通常需要直接存取彼此的數據(這兩部分原來在同一個類中,所以你不必增加直接存取一個數據結構的代碼;你只要將代碼改為兩個類就行了)。實現這種情況的最安全途徑就是使這兩部分成為彼此的友元。

如果你象剛才所描述的那樣使用友元,就可以使私有的(private)保持私有。不理解這些的人在以上這種情形下還天真的想避免使用友元,他們要么使用公有的(public)數據(罕見?。赐ㄟ^公有的 get()和set()成員函數使兩部分可以訪問數據。而他們實際上破壞了封裝。只有當在類外(從用戶的角度)看待私有數據仍“有意義”時,為私有數據設置公有的get()和set()成員函數才是合理的。在許多情況下,這些 get()/set()成員函數和公有數據一樣差勁:它們僅僅隱藏了私有數據的名稱,而沒有隱藏私有數據本身。

同樣,如果你將友元函數當做一種類的public:存取函數的語法不同的變種來使用的話,友元函數就和破壞封裝的成員函數一樣會破壞封裝。換一種說法,類的友元不會破壞封裝的壁壘:和類的成員函數一樣,它們就是封裝的壁壘。

?

--------------------------------------------------------------------------------


使用友元函數的優缺點是什么?
友元函數在接口設計選擇上提供了一定程度的自由。

成員函數和友元函數具有同等的特權(100% 的)。主要的不同在于友元函數象f(x)這樣調用,而成員函數象 x.f()這樣調用。因此,可以在成員函數(x.f())和友元函數(f(x))之間選擇的能力允許設計者選擇他所認為更具可讀性的語法來降低維護成本。

友元函數主要缺點是需要額外的代碼來支持動態綁定時。要得到虛友元(virtual friend)的效果,友元函數應該調用一個隱藏的(通常是 protected:)虛成員函數。這稱為虛友元函數用法(Virtual Friend Function Idiom)。例如:


?

class ?Base? {
?
public :
???friend?
void ?f(Base & ?b);
???
// ?
? protected :
???
virtual ? void ?do_f();
???
// ?
?}
;
?
?inline?
void ?f(Base & ?b)
?
{
???b.do_f();
?}

?
?
class ?Derived?:? public ?Base? {
?
public :
???
// ?
? protected :
???
virtual ? void ?do_f();?? // ?"覆蓋"?f(Base&?b)的行為
???
// ?
?}
;
?
?
void ?userCode(Base & ?b)
?
{
???f(b);
?}
?


在userCode(Base&)中的f(b)語句將調用虛擬的? b.do_f()。這意味著如果b實際是一個派生類的對象,那么Derived::do_f()將獲得控制權。注意派生類覆蓋的是保護的虛(protected: virtual)成員函數 do_f(); 而不是它友元函數f(Base&)。

?


--------------------------------------------------------------------------------

“友元關系既不繼承,也不傳遞”是什么意思?
[Recently added the "not reciprocal" item thanks to Karel Roose (on 4/01). Click here to go to the next FAQ in the "chain" of recent changes.]
僅僅因為我承認對你的友情,允許你訪問我,并不自動地允許你的孩子訪問我,并不自動地允許你的朋友訪問我,并不自動地允許我訪問你。

我不見得信任我朋友的孩子。友元的特權不被繼承。友元的派生類不一定是友元。如果 Fred 類聲明Base類是友元,那么Base類的派生類不會自動地被賦予對于Fred的對象的訪問特權。
我不見得信任我朋友的朋友。友元的特權不被傳遞。友元的友元不一定是友元。如果Fred類聲明Wilma類是友元,并且Wilma類聲明Betty類是友元,那么Betty類不會自動地被賦予對于Fred的對象的訪問特權。
你不見得僅僅因為我聲稱你是我的朋友就信任我。友元的特權不是自反的。如果Fred類聲明Wilma類是友元,則Wilma對象擁有訪問Fred對象的特權,但Fred對象不會自動地擁有對Wilma對象的訪問特權。

--------------------------------------------------------------------------------

類應該使用成員函數還是友元函數?
盡量使用成員函數,不得已時使用友元。

有時在語法上,友元更好(例如,Fred類中,友元函數允許Fred參數作為第二個參數,而成員函數必須是第一個)。另一個好的用法是二元中綴運算符。例如,如果你想允許aFloat + aComplex 的話,aComplex + aComplex 應該被定義為友元而不是成員函數。(成員函數不允許提升左邊的參數,因為那樣會改變成員函數調用對象的類)。

在其他情況下,首選成員函數。

posted on 2006-06-22 11:13 楊粼波 閱讀(727) 評論(0)  編輯 收藏 引用 所屬分類: 文章收藏

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            日韩午夜av| 狠狠久久亚洲欧美| 日韩视频久久| 亚洲人成网站777色婷婷| 麻豆成人小视频| 亚洲国产一区二区a毛片| 欧美激情一区二区三区 | 欧美日韩在线一区二区| 亚洲香蕉网站| 亚洲免费在线精品一区| 国产亚洲欧美aaaa| 久久久噜噜噜久久久| 久热re这里精品视频在线6| 日韩一级大片| 午夜精品偷拍| 亚洲精品在线三区| 亚洲一区精品电影| 亚洲国产你懂的| 亚洲男人的天堂在线| 亚洲国产另类久久精品| 一本一本久久a久久精品综合妖精| 国产欧美日韩三区| 亚洲福利视频网站| 国产女优一区| 亚洲国产另类精品专区 | 欧美午夜美女看片| 久久中文字幕一区| 欧美香蕉大胸在线视频观看| 久久一区中文字幕| 国产精品久久久久久久久久直播| 久久性天堂网| 国产精品嫩草影院av蜜臀| 欧美成年人网站| 国产日产欧美精品| 99riav久久精品riav| 在线不卡免费欧美| 午夜免费日韩视频| 亚洲影院色无极综合| 欧美在线看片| 午夜激情久久久| 欧美劲爆第一页| 奶水喷射视频一区| 国产日韩综合一区二区性色av| 亚洲国产精品嫩草影院| 精品动漫av| 欧美在线三区| 性高湖久久久久久久久| 欧美日韩黄色一区二区| 欧美成人福利视频| 国产午夜精品久久久久久免费视 | 亚洲国产精品久久久久| 国产自产v一区二区三区c| 亚洲午夜国产成人av电影男同| 在线国产精品播放| 久久精品最新地址| 久久久91精品国产一区二区精品| 国产精品av久久久久久麻豆网| 免费视频最近日韩| 精品盗摄一区二区三区| 欧美在线一二三区| 久久精品二区三区| 国产一区清纯| 久久精品在线播放| 欧美国产免费| 亚洲激情午夜| 欧美精品乱人伦久久久久久 | 欧美一级专区免费大片| 国产精品私拍pans大尺度在线| 亚洲色图综合久久| 国产一区二区三区观看| 午夜精品亚洲一区二区三区嫩草| 午夜伦理片一区| 国产欧美日韩综合一区在线观看| 亚洲一区高清| 久久婷婷丁香| 亚洲日韩视频| 国产精品v日韩精品| 亚洲免费在线| 欧美高清在线| 一区二区三区回区在观看免费视频| 欧美经典一区二区三区| 中文欧美在线视频| 久久九九免费| 亚洲片在线观看| 欧美三日本三级少妇三2023| 亚洲欧美日韩精品| 久久综合婷婷| 一区二区三区四区五区在线| 国产精品乱码| 免费成人av资源网| 一区二区三区不卡视频在线观看 | 午夜精品www| 在线日韩欧美| 国产精品成人一区| 久久久欧美精品| 日韩视频在线观看免费| 久久精品成人一区二区三区蜜臀| 亚洲国产成人精品女人久久久 | 欧美激情麻豆| 亚洲欧美偷拍卡通变态| 精品福利av| 国产精品久久福利| 卡一卡二国产精品| 亚洲午夜久久久| 亚洲第一色中文字幕| 亚洲欧美日韩国产中文 | 国产精品爽黄69| 欧美激情视频给我| 亚洲欧美亚洲| 亚洲国产成人91精品 | 亚洲高清资源| 国产日韩精品一区二区三区| 欧美风情在线观看| 久久精品国产99| 黄色成人片子| 国产精品视频999| 欧美日韩播放| 欧美3dxxxxhd| 久久久久久穴| 欧美在线网址| 亚洲女爱视频在线| 99国产精品| 亚洲经典在线| 欧美大胆人体视频| 久久视频一区| 久久精品国产一区二区三区| 亚洲一品av免费观看| 亚洲精品裸体| 亚洲精品欧美日韩专区| 在线观看国产日韩| 国产亚洲激情在线| 国产欧美一区二区色老头| 国产精品二区在线| 欧美日韩亚洲一区二区三区在线观看 | 欧美在线亚洲一区| 亚洲在线国产日韩欧美| aa日韩免费精品视频一| 亚洲精品一级| 日韩一区二区精品在线观看| 亚洲激情视频网| 亚洲精品欧洲| 99精品热视频只有精品10| 亚洲免费观看高清在线观看 | 亚洲第一偷拍| 亚洲国产视频直播| 亚洲精品久久视频| 一本大道久久a久久精二百| 亚洲人精品午夜在线观看| 亚洲乱码久久| 亚洲图片欧美日产| 亚洲欧美久久久| 久久精品国产一区二区电影| 久久久蜜桃精品| 欧美黑人多人双交| 欧美日韩国产限制| 国产精品理论片在线观看| 国产日韩欧美制服另类| 国产资源精品在线观看| 亚洲国产免费| 亚洲一区二区精品视频| 性欧美长视频| 欧美成在线观看| 一区二区三区精品| 久久福利视频导航| 欧美成人免费网站| 国产精品s色| 黄色日韩在线| 日韩一级免费观看| 欧美制服丝袜| 亚洲国产高清视频| 亚洲一区二区三区国产| 久久夜色精品国产亚洲aⅴ| 欧美激情国产日韩精品一区18| 国产精品二区二区三区| 在线看无码的免费网站| 亚洲天堂偷拍| 蜜臀99久久精品久久久久久软件| 亚洲日韩第九十九页| 欧美一区激情| 欧美日韩一区二区欧美激情| 国产手机视频一区二区| 日韩亚洲欧美成人| 久久深夜福利免费观看| 亚洲久久成人| 久久综合九色| 国产日韩欧美日韩| 亚洲日本va在线观看| 欧美在线播放一区| 亚洲精品资源美女情侣酒店| 久久精彩视频| 国产精品亚洲综合天堂夜夜| 91久久嫩草影院一区二区| 久久国产欧美| 一本一道久久综合狠狠老精东影业| 久久精品日韩欧美| 国产精品美女一区二区在线观看| 91久久极品少妇xxxxⅹ软件| 久久精品一本| 午夜精品在线视频| 国产精品久久久久aaaa|