類成員的三種訪問(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í)間開(kāi)銷)。然而,它破壞了類的封裝和隱藏,使得非成員函數(shù)可以訪問(wèn)類的私有成員。
子類怎樣訪問(wèn)父類的私有數(shù)據(jù)成員?
首先,對(duì)于簡(jiǎn)單類型,父類指針和子類指針可以完全重合。子類數(shù)據(jù)成員通常堆積在后面,因此它們的偏移量加上父類的大小是不好的。上面的例子是用GCC編譯的,有幾個(gè)地址是完全相同的:
可以看出,這正是常見(jiàn)C實(shí)現(xiàn)的情況。
那么不僅可以使用動(dòng)態(tài)強(qiáng)制轉(zhuǎn)換,還可以使用靜態(tài)強(qiáng)制轉(zhuǎn)換。如果將父類指針?lè)旁陟o態(tài)上,則強(qiáng)制轉(zhuǎn)換是一個(gè)子類,并且偏移量是在編譯時(shí)計(jì)算的,因此它是固定的并且是硬轉(zhuǎn)換的。當(dāng)然,如果你不是子類,你以后會(huì)有機(jī)會(huì)飛出去。