C 繼承 程式設計師面試寶典學習

2021-06-07 08:45:01 字數 3053 閱讀 8543

通過繼承機制,可以利用已有的資料型別來定義新的資料型別。所定義的新的資料型別不僅擁有新定義的成員,而且還同時擁有舊的成員。我們稱已存在的用來派生新類的類為基類,又稱為父類。由已存在的類派生出的新類稱為派生類,又稱為子類。

c++繼承

在c++語言中,乙個派生類可以從乙個基類派生,也可以從多個基類派生。從乙個基類派生的繼承稱為單繼承;從多個基類派生的繼承稱為多繼承。

派生類的定義格式

單繼承的定義格式如下:

class 《派生類名》:《繼承方式》《基類名》

《派生類新定義成員》

其中,《派生類名》是新定義的乙個類的名字,它是從《基類名》中派生的,並且按指定的《繼承方式》派生的。《繼承方式》常使用如下三種關鍵字給予表示:

public 表示公有基類;

private 表示私有基類;

protected 表示保護基類;

多繼承的定義格式如下:

class 《派生類名》:《繼承方式1>《基類名1>,《繼承方式2>《基類名2>,…

《派生類新定義成員》

可見,多繼承與單繼承的區別從定義格式上看,主要是多繼承的基類多於乙個。

如果省略繼承方式,對'class'將採用私有繼承,對'struct'將採用公有繼承。

也就是說

class base1{};

struct base2{};

class derive:base1,base2{};

那麼,derive類將私有繼承base1,公有繼承base2。相當於:

class derive:private base1,public base2{};

公有繼承(public)、私有繼承(private)、保護繼承(protected)是常用的三種繼承方式。

1. 公有繼承(public)

公有繼承的特點是基類的公有成員和保護成員作為派生類的成員時,它們都保持原有的狀態,而基類的私有成員仍然是私有的,不能被這個派生類的子類所訪問。

2. 私有繼承(private)

私有繼承的特點是基類的公有成員和保護成員都作為派生類的私有成員,並且不能被這個派生類的子類所訪問。

3. 保護繼承(protected)

保護繼承的特點是基類的所有公有成員和保護成員都成為派生類的保護成員,並且只能被它的派生類成員函式或友元訪問,基類的私有成員仍然是私有的。

下面列出三種不同的繼承方式的基類特性和派生類特性。

public  

protected  

private

公有繼承   

public

protected

不可見私有繼承

private

private

不可見保護繼承

protected

protected

不可見

為了進一步理解三種不同的繼承方式在其成員的可見性方面的區別,下面從三種不同角度進行討論。

(1) 基類成員對其物件的可見性:

公有成員可見,其他不可見。這裡保護成員同於私有成員。

(2) 基類成員對派生類的可見性:

公有成員和保護成員可見,而私有成員不可見。這裡保護成員同於公有成員。

(3) 基類成員對派生類物件的可見性:

公有成員可見,其他成員不可見。

所以,在公有繼承時,派生類的物件可以訪問基類中的公有成員;派生類的成員函式可以訪問基類中的公有成員和保護成員。這裡,一定要區分清楚派生類的物件和派生類中的成員函式對基類的訪問是不同的。

(1) 基類成員對其物件的可見性:

公有成員可見,其他成員不可見。

(2) 基類成員對派生類的可見性:

公有成員和保護成員是可見的,而私有成員是不可見的。

(3) 基類成員對派生類物件的可見性:

所有成員都是不可見的。

所以,在私有繼承時,基類的成員只能由直接派生類訪問,而無法再往下繼承。

這種繼承方式與私有繼承方式的情況相同。兩者的區別僅在於對派生類的成員而言,對基類成員有不同的可見性。

上述所說的可見性也就是可訪問性。關於可訪問性還有另的一種說法。這種規則中,稱派生類的物件對基類訪問為水平訪問,稱派生類的派生類對基類的訪問為垂直訪問。

公有繼承時,水平訪問和垂直訪問對基類中的公有成員不受限制;

私有繼承時,水平訪問和垂直訪問對基類中的公有成員也不能訪問;

保護繼承時,對於垂直訪問同於公有繼承,對於水平訪問同於私有繼承。

對於基類中的私有成員,只能被基類中的成員函式和友元函式所訪問,不能被其他的函式訪問。

基類與派生類的關係

任何乙個類都可以派生出乙個新類,派生類也可以再派生出新類,因此,基類和派生類是相對而言的。

類的層次通常反映了客觀世界中某種真實的模型。在這種情況下,不難看出:基類是對若干個派生類的抽象,而派生類是基類的具體化。基類抽取了它的派生類的公共特徵,而派生類通過增加行為將抽象類變為某種有用的型別。

先定義乙個抽象基類,該基類中有些操作並未實現。然後定義非抽象的派生類,實現抽象基類中定義的操作。例如,虛函式就屬此類情況。這時,派生類是抽象的基類的實現,即可看成是基類定義的延續。這也是派生類的一種常用方法。

在多繼承時,乙個派生類有多於乙個的基類,這時派生類將是所有基類行為的組合。

派生類將其本身與基類區別開來的方法是新增資料成員和成員函式。因此,繼承的機制將使得在建立新類時,只需說明新類與已有類的區別,從而大量原有的程式**都可以復用,所以有人稱類是「可復用的軟體構件」。

訪問宣告採用作用域"::" ,它的一般形式為:基類名::成員名;。在派生類的類介面中,將這些訪問宣告放在合適的訪問控制保留字之後,從而改變在派生類中該成員的訪問控制方式。

如果在派生類中定義了乙個函式原型與繼承成員函式一模一樣的成員函式,則該函式實現的函式體是對繼承成員函式的重定義。

程式設計師面試寶典

據統計,80 的簡歷都是不合格的。不少人事管理者抱怨收到的許多簡歷在格式上很糟糕。簡歷應該如何做到在格式上簡潔明瞭,重點突出?求職信應該如何有足夠的內容推銷自己?如何控制長度,言簡意賅?相信讀了本章你會對簡歷的撰寫有乙個新的認識。2.1 簡歷注意事項 1 簡歷不要太長 一般的簡歷普遍都太長。其實簡歷...

25 c c 程式設計師面試寶典 繼承

25.c c 程式設計師面試寶典 繼承 繼承是物件導向軟體語言的3要素之一,在考查物件導向知識的時候繼承的相關題目出現的概率是很高的。繼承的實現是基於類的概念的。子類可以使用來自父類的各種方法和屬性,這樣提高了 的可復用率。繼承的同時子類也可以重新定義或者重寫某些屬性和方法,以實現更多不同的功能。面...

《程式設計師面試寶典》摘記

簡歷注意事項 1.簡歷不要太長 中文簡歷壓縮在 2頁左右就可以把所有的內容突出了。一般來說學習經歷應該從大學開始寫起。2.如實填寫。3.不要過分謙虛,不要把自己的一切包括弱項都寫進去。4.求職簡歷上一定要註明求職的職位。根據所申請的職位來設計,突出你在這方面的優點。編寫乙份或者幾份有針對性的簡歷。5...