溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++類的繼承怎么理解

發(fā)布時間:2021-11-29 16:49:33 來源:億速云 閱讀:154 作者:iii 欄目:編程語言

這篇文章主要講解了“C++類的繼承怎么理解”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“C++類的繼承怎么理解”吧!

基類中的公有成員在public派生時,不僅可以由派生類對象成員訪問,也可以由外部函數(shù)訪問;而在private派生時,C++基類中的公有成員雖然允許派生類對象中的成員訪問,不允許外部訪問。

可是再派生出下一級時,由于C++基類的所有成員已經(jīng)被私有化,其它類成員也不可再訪問。實現(xiàn)只許有派生血緣關(guān)系的對象成員訪問的方法,是在基類中使用具有另一種訪問屬性的成員——protected成員。

protected成員是一種血緣關(guān)系內(nèi)外有別的成員。它對派生對象而言,是公有成員,可以訪問;對血緣關(guān)系外部而言,與私有成員一樣被隱藏,此外,除了允許使用private與public兩種派生方式之外。C++還允許使用protected派生方式。現(xiàn)在將三種訪問屬性不同的成員經(jīng)三種派生后在派生類中訪問屬性的變化情況總結(jié)如下表,是對上一表格的增進和補充。

派生方式基類的public成員基類的protected成員基類的private成員派生方式引起的訪問屬性變化概括
private派生變?yōu)閜rivate成員變?yōu)閜rivate成員不可見基類中的非私有成員都成為派生類中的私有成員
protected派生變?yōu)閜rotected成員變?yōu)閜rivate成員不可見基類中的非私有成員在派生類中的訪問屬性都降一級
public派生仍為public成員仍為protected成員不可見基類中的非私有成員在派生類中的訪問屬性保持不變

需要注意的是,C++基類的private成員無論經(jīng)過何種派生,在派生類中都是不可見的。

(1)友元函數(shù)

通常,類的私有成員只能由本類的成員訪問,外部函數(shù)只能訪問類的成員函數(shù),再由成員函數(shù)訪問類的私有成員。但是,如果在某個類定義中用friend聲明了一個外部函數(shù)(也許是其他類的一個成員)后,這個外部函數(shù)便可以例外地訪問該類的任何私有成員。用friend聲明了的外部函數(shù)稱為這個類的友元函數(shù)。

當友元函數(shù)是另一個類的成員函數(shù)時,應當注意以下幾點:

A:友元函數(shù)作為一個類的成員函數(shù)時,除應當在它所在的類定義中聲明之外,還應當在另一個類中聲明它的友元關(guān)系,聲明語句的格式為:

friend 函數(shù)類型函數(shù)所在類名::函數(shù)名(參數(shù)列表);

B:友元函數(shù)在引用本類對象的私有成員時無需本類對象的引用參數(shù),但在引用生命它是友元的類的對象中的私有成員時必須有友元類對象的引用參數(shù)。

C:一個類的成員函數(shù)作另一個類的友元函數(shù)時,必須先定義,而不是僅僅聲明它。

使用友元函數(shù)直接訪問對象的私有成員,可以免去再調(diào)用類的成員函數(shù)所需的開銷。同時,友元函數(shù)作為類的一個接口,對已經(jīng)設計好的類,只要增加一條聲明語句,便可以使用外部函數(shù)來補充它的功能,或架起不同類對象之間聯(lián)系的橋梁。然而,它同時也破壞了對象封裝與信息隱藏,使用時需要謹慎小心。

(2)友元類

也可以把一個類而不僅僅是一個函數(shù)聲明為另一個C++基類的友元類。這時,只需先聲明它而不一定需要先定義。應當注意,友元關(guān)系是單向的,并且只在兩個類之間有效。即使類X是類Y的友元。

類Y是否是類X的友元也要看類X中是否有相應的聲明。即友元關(guān)系不具有交換性。若類X是類Y的友元,類Y是類Z的友元,也不一定就說明類X是類Z的友元,即友元關(guān)系也不具有傳遞性。當一個類要和另一個類協(xié)同工作時,使一個類成為另一個類的友元類是很有用的。這時友元類中的每一個成員函數(shù)都成為了對方的友元函數(shù)。

感謝各位的閱讀,以上就是“C++類的繼承怎么理解”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對C++類的繼承怎么理解這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

c++
AI