C 繼承與多型(二)

2021-08-04 03:33:13 字數 1465 閱讀 1694

多型

虛函式:類成員函式前面加virtual關鍵字

虛函式重寫:當在子類的定義了乙個與父類完全相同的虛函式時,則稱子類的這個函式重寫了這個父類的這個虛函式

滿足條件

1.虛函式的重寫

2.父類的指標/引用呼叫虛函式

多型跟型別無關,與物件有關

多型:當使用基類的指標或引用調重寫的虛函式時,當指向父類呼叫的就是父類的虛函式,指向子類呼叫的就是子類的虛函式。父類必須寫上虛函式。

總結: 1.

派生類重寫基類的虛函式實現多型,要求函式名、引數列表、返回值完全相同。(協變除外)

2.基類中定義了虛函式,在派 類中該函式始終保持虛函式的特性。

3.只有類的成員函式才能定義為虛函式。

4.靜態成員函式不能定義為虛函式。

5.如果在類外定義虛函式,只能在宣告函式時加virtual,類外定義函式時不能加virtual。

6.建構函式不能為虛函式,雖然可以將operator=定義為虛函式,但是最好不要將operator=定義為虛函式,因為容易使用時容易引起混淆。

7.不要在建構函式和析構函式裡面呼叫虛函式,在建構函式和析構函式中,物件是不完整的,可能會發生未定義的行為。

8.最好把基類的析構函式宣告為虛函式。(因為派生類的析構函式跟基類的析構函式名稱不一樣,但是構成覆蓋,這裡是因為編譯器做了特殊處理)

純虛函式:在成員函式的形參後面寫上=0,則成員函式為純虛函式。包含純虛函式的類叫做抽

象類(也叫介面類),抽象類不能例項化出物件。純虛函式在派生類中重新定義以後,派生類才能例項化出物件。

class person

;class student : public person

{};

友元與繼承

友元關係不能繼承

,也就是說基類友元不能訪問子類私有和保護成員。

class person

;class student : public person

;void display ( person& p , student & s)

{ cout <繼承與靜態成員:基類定義了static成員,無論派生出多少個子類,整個繼承體系中只有這樣static乙個成員。

c (八) 繼承與多型(二)

一 抽象類與動態型別轉換 1 訪問控制屬性 類的定義中有public private和protected三個關鍵字,其中private關鍵字說明類中成員為私有成員,只能在類內的函式訪問 public成員為公有成員,可被任何其他類訪問,protected關鍵字是保護屬性,保護屬性的資料或函式可被派生類...

C 繼承與多型

派生類繼承基類 又稱父類 超類 的屬性和方法,在此基礎上可以進行修改或新增新的屬性和方法。class 派生類名 繼承方式 基類名 為了保護基類的資料封裝性,無論哪種繼承方式,積累的私有成員在派生類中都是不可見的。1.public繼承 基類的訪問許可權在派生類中不變。公有還是公有,保護還是保護,派生類...

C 繼承與多型

1 分析菱形繼承的問題。2 剖析虛繼承是怎麼解決二義性和資料冗餘的 首先,我們先來看乙個菱形繼承的程式。為了解決以上問題,我們引入虛繼承的語法。可以有效的解決菱形繼承的資料冗餘和二義性問題。1.虛繼承解決了菱形繼承體系裡子類物件包含多份父類物件的資料冗餘問題和浪費空間的問題。2.虛繼承看起來複雜,但...