物件導向程式設計 繼承(C )

2021-10-04 23:45:34 字數 2793 閱讀 2596

1、繼承是軟體重用的一種方式,程式設計師通過繼承,可以吸收現有類的資料和行為來建立新類。

2、幾個概念:

1、直接基類:現有的類稱為基類,派生類可以由基類繼承而來。

2、間接基類:通過兩級或更多級類層次繼承的類

3、單繼承:派生類由繼承乙個基類而得到。

4、多繼承:派生類由多個類繼承而來。

3、三種繼承方式

1、公有繼承:每個派生類的物件也是基類的物件,但是基類物件不是派生類物件。

2、私有繼承:某些情況下,private繼承可作為組成的另一種形式。

3、受保護繼承。

派生類成員函式不能訪問基類的私有成員

4、

(1)is - a 關係表示繼續

派生類的物件都可以看成是基類的物件。(2)has - a 表示組成乙個物件可以把其他類的乙個或多個物件拿來作為己有的成員。

1、乙個基類可以有多個派生類。

2、公有繼承:任何一種繼承中,基類的私有成員在派生類中都不能被訪問,但是這些私有成員仍然被繼承了;在public繼承中,基類的所有其他成員在成為派生類的成員時仍保持了原始的成員訪問許可權。

友元函式是不能被繼承的 。

基類的protected成員可以在基類的體內被基類的成員和友元訪問,也可以由基類所派生出的任何類的成員和友元訪問。1、從乙個類向另乙個類複製貼上**,可能造成錯誤 在多個原始檔中擴散。當我們想要乙個類「吸收」別的類的資料成員和成員函式時,使用繼承而不是「複製貼上」手段,從而避免**的複製。2、使用繼承時,類的層次中所有類的共同資料成員和成員函式在基類中宣告。需要對共同的特徵修改時,只需要在基類中修改。於是派生類也就繼承了相應的修改。如果不採取繼承機制,則需要對所有包含**拷貝的原始檔進行修改。3、使用成員初始化器顯示呼叫基類的建構函式,可以避免重複初始化。如果沒有顯示呼叫基類的建構函式,c++將嘗試隱式呼叫基類的建構函式,再在建構函式初始化資料就重複初始化了。

1、基類建構函式------派生類成員初始化器------派生類建構函式的函式體

2、基類物件的建構函式------基類的建構函式------派生類物件的建構函式------派生類建構函式。析構函式呼叫順序與建構函式相反。

3、派生類不繼承基類的建構函式、析構函式和過載的賦值運算子函式。派生類的建構函式、析構函式和過載的賦值運算子函式可以呼叫基類的建構函式、析構函式和過載的賦值運算子函式。

(一)、私有資料是private型的繼承:

1、基類在派生類的類名後面寫出:

classa:

public b//a是派生,b是基類,被公有繼承

2、派生類的建構函式裡面的引數值一定要給夠,包括基類裡面的引數。因為在派生類的建構函式會呼叫基類的建構函式。

注意:在這種情況下在派生類的函式實現中直接使用基類的私有資料成員會報錯。

(二)、私有資料是protected型的繼承:解決了直接使用私有資料成員報錯的問題,利用protected下的私有資料成員後直接使用私有資料成員不會報錯。

注意:這種情況下也有不便之處,就是如果在基類中的私有資料成員寫錯了,要修改時要進行基類和派生類的成員共同修改。我們想要達到的效果是直接修改基類中的資訊,派生類就跟著被修改,這就是下面一種方式。

(三)、私有資料是private型的繼承:這種方式的做法:(1)、在基類中要用到私有資料成員時,用它的介面函式代替。

(2)、在派生類中使用基類的介面函式時,如果該介面函式在基類和派生類中有同樣的函式名時,在呼叫它的時候一定要在函式名前加上基類的類名+二元作用域運算子。

**問題描述:物件的賦值,要在同種型別下進行,那麼為什麼第乙個框不在同種型別下不會報錯,而第二個框就會報錯。

解釋:

子類是在父類的基礎上擴充套件的,從某種意義上來說子類的記憶體資訊量要大於(至少是不小於)父類的記憶體資訊量(在父類的記憶體資訊上增加資訊)

所以父類變數=子類變數,因為父類變數的記憶體資訊少,把子類的記憶體空間縮小後賦給父類變數,不會造成記憶體越界(本來就屬於子類的記憶體空間,怎麼縮小也還是在合法的記憶體空間),所以沒問題

子類變數=父類變數,因為子類變數的記憶體資訊多,把父類的記憶體空間擴大後賦給子類變數,會造成記憶體越界(擴大到本來不屬於父類的記憶體),所以有問題

解決方法一:型別強行轉換進行賦值操作解決方法二:賦值運算子過載

C 語言物件導向程式設計 繼承

繼承就是基於乙個已有的類 一般稱作父類或基類 再去重新宣告或建立乙個新的類,這個類可以稱為子類或派生類。子類或派生類可以訪問父類的資料和函式,然後子類裡面又新增了自己的屬性和資料。在 c 語言裡面,可以通過結構體巢狀的方式去實現類的單繼承 暫不考慮多重繼承 但有一點注意事項,就是在結構體巢狀時,父類...

物件導向程式設計 繼承

繼承是物件導向程式設計的主要特點之一。繼承,顧名思義就是子繼承父的所有。在面向程式設計中繼承的意思並沒變,子類繼承父類所擁有的屬性 方法。使用extends關鍵字使子類繼承父類,子類就可以自動復用父類的方法了 私有方法除外 並且繼承了父類的所有屬性。在子類例項化過程中子類的構造方法一定會去呼叫父類的...

物件導向程式設計 繼承

一 簡介 1 繼承是軟體復用的一種方式,通過繼承,可以吸收現有類的資料和行為來建立新類,並增添新的效能增類。2 派生類顯示繼承的基類稱為直接基類,經兩級或者多級類層次繼承的類稱為間接基類。3 繼承的方式 public private protected 4 派生類一般不能直接訪問基類的private...