新聞中心
也許大家對(duì)與C++基類(lèi)還不是很了解,看完本文后對(duì)您一定會(huì)大有幫助,下文除了學(xué)習(xí)C++基類(lèi)的基本性質(zhì)外還對(duì)C++基類(lèi)的新特性進(jìn)行全面研究,希望大家能夠找到自己想要的東西。

興縣網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、APP開(kāi)發(fā)、成都響應(yīng)式網(wǎng)站建設(shè)公司等網(wǎng)站項(xiàng)目制作,到程序開(kāi)發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)從2013年成立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來(lái)保證我們的工作的順利進(jìn)行。專(zhuān)注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。
而基類(lèi)中的公有成員在public派生時(shí),不僅可以由派生類(lèi)對(duì)象成員訪問(wèn),也可以由外部函數(shù)訪問(wèn);而在private派生時(shí),C++基類(lèi)中的公有成員雖然允許派生類(lèi)對(duì)象中的成員訪問(wèn),不允許外部訪問(wèn)。
可是再派生出下一級(jí)時(shí),由于C++基類(lèi)的所有成員已經(jīng)被私有化,其它類(lèi)成員也不可再訪問(wèn)。實(shí)現(xiàn)只許有派生血緣關(guān)系的對(duì)象成員訪問(wèn)的方法,是在基類(lèi)中使用具有另一種訪問(wèn)屬性的成員——protected成員。
protected成員是一種血緣關(guān)系內(nèi)外有別的成員。它對(duì)派生對(duì)象而言,是公有成員,可以訪問(wèn);對(duì)血緣關(guān)系外部而言,與私有成員一樣被隱藏,此外,除了允許使用private與public兩種派生方式之外。C++還允許使用protected派生方式。現(xiàn)在將三種訪問(wèn)屬性不同的成員經(jīng)三種派生后在派生類(lèi)中訪問(wèn)屬性的變化情況總結(jié)如下表,是對(duì)上一表格的增進(jìn)和補(bǔ)充。
| 派生方式 | 基類(lèi)的public成員 | 基類(lèi)的protected成員 | 基類(lèi)的private成員 | 派生方式引起的訪問(wèn)屬性變化概括 |
| private派生 | 變?yōu)閜rivate成員 | 變?yōu)閜rivate成員 | 不可見(jiàn) | 基類(lèi)中的非私有成員都成為派生類(lèi)中的私有成員 |
| protected派生 | 變?yōu)閜rotected成員 | 變?yōu)閜rivate成員 | 不可見(jiàn) | 基類(lèi)中的非私有成員在派生類(lèi)中的訪問(wèn)屬性都降一級(jí) |
| public派生 | 仍為public成員 | 仍為protected成員 | 不可見(jiàn) | 基類(lèi)中的非私有成員在派生類(lèi)中的訪問(wèn)屬性保持不變 |
需要注意的是,C++基類(lèi)的private成員無(wú)論經(jīng)過(guò)何種派生,在派生類(lèi)中都是不可見(jiàn)的。
(1)友元函數(shù)
通常,類(lèi)的私有成員只能由本類(lèi)的成員訪問(wèn),外部函數(shù)只能訪問(wèn)類(lèi)的成員函數(shù),再由成員函數(shù)訪問(wèn)類(lèi)的私有成員。但是,如果在某個(gè)類(lèi)定義中用friend聲明了一個(gè)外部函數(shù)(也許是其他類(lèi)的一個(gè)成員)后,這個(gè)外部函數(shù)便可以例外地訪問(wèn)該類(lèi)的任何私有成員。用friend聲明了的外部函數(shù)稱(chēng)為這個(gè)類(lèi)的友元函數(shù)。
當(dāng)友元函數(shù)是另一個(gè)類(lèi)的成員函數(shù)時(shí),應(yīng)當(dāng)注意以下幾點(diǎn):
A:友元函數(shù)作為一個(gè)類(lèi)的成員函數(shù)時(shí),除應(yīng)當(dāng)在它所在的類(lèi)定義中聲明之外,還應(yīng)當(dāng)在另一個(gè)類(lèi)中聲明它的友元關(guān)系,聲明語(yǔ)句的格式為:
friend 函數(shù)類(lèi)型函數(shù)所在類(lèi)名::函數(shù)名(參數(shù)列表);
B:友元函數(shù)在引用本類(lèi)對(duì)象的私有成員時(shí)無(wú)需本類(lèi)對(duì)象的引用參數(shù),但在引用生命它是友元的類(lèi)的對(duì)象中的私有成員時(shí)必須有友元類(lèi)對(duì)象的引用參數(shù)。
C:一個(gè)類(lèi)的成員函數(shù)作另一個(gè)類(lèi)的友元函數(shù)時(shí),必須先定義,而不是僅僅聲明它。
使用友元函數(shù)直接訪問(wèn)對(duì)象的私有成員,可以免去再調(diào)用類(lèi)的成員函數(shù)所需的開(kāi)銷(xiāo)。同時(shí),友元函數(shù)作為類(lèi)的一個(gè)接口,對(duì)已經(jīng)設(shè)計(jì)好的類(lèi),只要增加一條聲明語(yǔ)句,便可以使用外部函數(shù)來(lái)補(bǔ)充它的功能,或架起不同類(lèi)對(duì)象之間聯(lián)系的橋梁。然而,它同時(shí)也破壞了對(duì)象封裝與信息隱藏,使用時(shí)需要謹(jǐn)慎小心。
(2)友元類(lèi)
也可以把一個(gè)類(lèi)而不僅僅是一個(gè)函數(shù)聲明為另一個(gè)C++基類(lèi)的友元類(lèi)。這時(shí),只需先聲明它而不一定需要先定義。應(yīng)當(dāng)注意,友元關(guān)系是單向的,并且只在兩個(gè)類(lèi)之間有效。即使類(lèi)X是類(lèi)Y的友元。
類(lèi)Y是否是類(lèi)X的友元也要看類(lèi)X中是否有相應(yīng)的聲明。即友元關(guān)系不具有交換性。若類(lèi)X是類(lèi)Y的友元,類(lèi)Y是類(lèi)Z的友元,也不一定就說(shuō)明類(lèi)X是類(lèi)Z的友元,即友元關(guān)系也不具有傳遞性。當(dāng)一個(gè)類(lèi)要和另一個(gè)類(lèi)協(xié)同工作時(shí),使一個(gè)類(lèi)成為另一個(gè)類(lèi)的友元類(lèi)是很有用的。這時(shí)友元類(lèi)中的每一個(gè)成員函數(shù)都成為了對(duì)方的友元函數(shù)。
當(dāng)前題目:淺析C++類(lèi)的繼承
URL網(wǎng)址:http://www.5511xx.com/article/ccsegdg.html


咨詢(xún)
建站咨詢(xún)
