類一定要有公有和私有成員嗎 友元函數(shù)是否能訪問當(dāng)前類中對(duì)象成員的私有成員?
友元函數(shù)是否能訪問當(dāng)前類中對(duì)象成員的私有成員?1. 友元函數(shù)是可以直接訪問類的私有成員的非成員函數(shù)。它是在類外定義的普通函數(shù)。它不屬于任何類,但需要在類的定義中聲明。聲明時(shí),只需在好友名稱前添加關(guān)鍵字
友元函數(shù)是否能訪問當(dāng)前類中對(duì)象成員的私有成員?
1. 友元函數(shù)是可以直接訪問類的私有成員的非成員函數(shù)。它是在類外定義的普通函數(shù)。它不屬于任何類,但需要在類的定義中聲明。聲明時(shí),只需在好友名稱前添加關(guān)鍵字friend即可。
2. 友元函數(shù)可以訪問類的靜態(tài)、私有和公共成員。
3. friend的功能是提高程序的效率(即減少類型檢查和安全檢查的時(shí)間開銷)。然而,它破壞了類的封裝和隱藏,使得非成員函數(shù)可以訪問類的私有成員。
子類怎樣訪問父類的私有數(shù)據(jù)成員?
首先,對(duì)于簡(jiǎn)單類型,父類指針和子類指針可以完全重合。子類數(shù)據(jù)成員通常堆積在后面,因此它們的偏移量加上父類的大小是不好的。上面的例子是用GCC編譯的,有幾個(gè)地址是完全相同的:
可以看出,這正是常見C實(shí)現(xiàn)的情況。
那么不僅可以使用動(dòng)態(tài)強(qiáng)制轉(zhuǎn)換,還可以使用靜態(tài)強(qiáng)制轉(zhuǎn)換。如果將父類指針放在靜態(tài)上,則強(qiáng)制轉(zhuǎn)換是一個(gè)子類,并且偏移量是在編譯時(shí)計(jì)算的,因此它是固定的并且是硬轉(zhuǎn)換的。當(dāng)然,如果你不是子類,你以后會(huì)有機(jī)會(huì)飛出去。
在外部類中為什么可以直接訪問內(nèi)部類的私有成員?
通過反編譯內(nèi)部類的字節(jié)碼,本文解釋了內(nèi)部類如何訪問外部類對(duì)象的成員。此外,我們還對(duì)編譯器的行為有一些了解。編譯器在編譯時(shí)會(huì)自動(dòng)添加一些邏輯,這就是我們感到困惑的原因。對(duì)于內(nèi)部類如何訪問外部類的成員,分析非常簡(jiǎn)單,主要是通過以下步驟:
1編譯器自動(dòng)為內(nèi)部類添加成員變量,成員變量的類型與外部類相同,成員變量是對(duì)外部類對(duì)象的引用;
2編譯器會(huì)自動(dòng)向內(nèi)部類的構(gòu)造方法添加一個(gè)參數(shù)。參數(shù)的類型是外部類的類型。此參數(shù)在構(gòu)造方法中用于為1中添加的成員變量賦值;
3調(diào)用內(nèi)部類的構(gòu)造函數(shù)初始化內(nèi)部類對(duì)象時(shí),默認(rèn)情況下會(huì)傳入外部類的引用。
c 類中的私有成員變量有什么作用?
私有成員變量在私有區(qū)域中定義。
對(duì)于此類成員函數(shù),此變量與其他成員變量沒有區(qū)別。它的用途和功能是一樣的。
對(duì)于通過對(duì)象訪問,不能通過對(duì)象訪問私有成員變量。這樣,我們就可以保護(hù)一些數(shù)據(jù)不被隨意修改。
此外,當(dāng)發(fā)生繼承時(shí),基類的私有成員變量不會(huì)被繼承。
因此,如果有成員變量需要保護(hù),以防被對(duì)象引用或繼承,則需要將其定義為私有變量。
C 中類的對(duì)象可以訪問類的私有數(shù)據(jù)成員嗎?
私有數(shù)據(jù)是私有類型的數(shù)據(jù)。除了這個(gè)類本身,其他類不能以任何方式修改它的數(shù)據(jù)。換句話說,如果要修改數(shù)據(jù),必須調(diào)用此函數(shù)提供的相應(yīng)方法(如set函數(shù))。如果這個(gè)類不提供類似的方法,其他類就不可能修改。此外,C中還有友元函數(shù),它可以修改其他類的私有數(shù)據(jù),但只有當(dāng)其他類聲明某個(gè)函數(shù)是它們的友元函數(shù)時(shí)才可以。例如,如果類A有私有數(shù)據(jù)num,它必須聲明它在類A中有友元函數(shù)B(),那么B可以訪問A的私有元素