友元函數(shù)可以訪問(wèn)私有成員嗎 友元函數(shù)是否能訪問(wèn)當(dāng)前類中對(duì)象成員的私有成員?
友元函數(shù)是否能訪問(wèn)當(dāng)前類中對(duì)象成員的私有成員?1. 友元函數(shù)是可以直接訪問(wèn)類的私有成員的非成員函數(shù)。它是在類外定義的普通函數(shù)。它不屬于任何類,但需要在類的定義中聲明。聲明時(shí),只需在好友名稱前添加關(guān)鍵字
友元函數(shù)是否能訪問(wèn)當(dāng)前類中對(duì)象成員的私有成員?
1. 友元函數(shù)是可以直接訪問(wèn)類的私有成員的非成員函數(shù)。它是在類外定義的普通函數(shù)。它不屬于任何類,但需要在類的定義中聲明。聲明時(shí),只需在好友名稱前添加關(guān)鍵字friend即可。
2. 友元函數(shù)可以訪問(wèn)類的靜態(tài)、私有和公共成員。
3. friend的功能是提高程序的效率(即減少類型檢查和安全檢查的時(shí)間開銷)。然而,它破壞了類的封裝和隱藏,使得非成員函數(shù)可以訪問(wèn)類的私有成員。
c 友元函數(shù),還是不能訪問(wèn)私有成員?
因?yàn)樵赩isual Studio 2008中可以正常編譯相同的代碼,但當(dāng)將其放入VC6.0中時(shí),表示您無(wú)法訪問(wèn)類復(fù)合體的私有數(shù)據(jù)成員。根據(jù)C的標(biāo)準(zhǔn)特性,類的friend函數(shù)應(yīng)該允許訪問(wèn)類的私有數(shù)據(jù)。在VC6.0中重載<<和>>時(shí)會(huì)出現(xiàn)此問(wèn)題。奇怪的是,當(dāng)重載其他操作符(如)時(shí),也會(huì)訪問(wèn)類的私有數(shù)據(jù)成員,但不會(huì)報(bào)告任何錯(cuò)誤。友元函數(shù)是可以訪問(wèn)類的所有成員的函數(shù),盡管它們不是類的成員。類授予對(duì)其朋友的特殊訪問(wèn)權(quán)。通常,同一個(gè)開發(fā)人員出于技術(shù)和非技術(shù)原因控制類的friend和member函數(shù)(否則,當(dāng)您要更新類時(shí),必須請(qǐng)求其他部分的所有者的許可)。窗體friend type name friend function name(形式參數(shù)列表);然后在類外定義friend function,定義格式與普通函數(shù)相同,但可以通過(guò)對(duì)象作為參數(shù)直接訪問(wèn)對(duì)象的私有成員。描述如下:
1)必須在類描述中描述friend函數(shù),類描述以關(guān)鍵字friend開始,然后是friend函數(shù)的函數(shù)原型。friend函數(shù)的描述可以出現(xiàn)在類的任何地方,包括私有部分和公共部分;
2)注意friend函數(shù)不是類的成員函數(shù),因此friend函數(shù)的實(shí)現(xiàn)與普通函數(shù)相同。在實(shí)現(xiàn)friend函數(shù)時(shí),它不需要指明它屬于哪個(gè)類。只有成員函數(shù)可以使用作用域符號(hào)。
3)友元函數(shù)不能直接訪問(wèn)類的成員,但只能訪問(wèn)對(duì)象成員。
4)友元函數(shù)可以訪問(wèn)對(duì)象的私有成員,但普通函數(shù)不能;
5)調(diào)用友元函數(shù)時(shí),要訪問(wèn)的對(duì)象應(yīng)該在實(shí)際參數(shù)中指明;
6)類之間的友元關(guān)系不能被繼承。
7)一個(gè)類的成員函數(shù)也可以是另一個(gè)類的友元,但必須首先定義該類。
友元函數(shù)是否能訪問(wèn)當(dāng)前類中對(duì)象成員的私有成員?
您可以訪問(wèn)。。成員函數(shù)和朋友函數(shù)具有相同的權(quán)限(100%)。主要區(qū)別在于友元函數(shù)的調(diào)用方式類似于f(x),而成員函數(shù)的調(diào)用方式類似于x.f()。因此,在成員函數(shù)(x.f())和友元函數(shù)(f(x))之間進(jìn)行選擇的能力允許設(shè)計(jì)者選擇他認(rèn)為更可讀的語(yǔ)法,以減少維護(hù)成本