11章 繼承和多型

2021-06-20 13:24:31 字數 924 閱讀 3857

1、基類,也即父類,派生類,也即子類。派生類的宣告方式:class circle:public geometricobject;

2、構造函式呼叫基類建構函式:circle::circle(其中可以新增引數):geometricobject(其中可以新增引數)。只能在類的實現中呼叫基類的建構函式,不能再類的宣告中呼叫。

3、函式重定義:可以在派生類裡重新定義以及在基類裡有的函式。

4、多型:乙個函式會在不同的類裡被重定義,呼叫時需要根據具體情況來進行動態呼叫,此時用到的是虛函式virtual。在執行時確定呼叫哪個函式的能力稱為動態繫結,也即多型。。

為使函式能實現動態繫結,需要:1、在基類中,函式必須宣告為虛函式virtual;2、函式中引用物件的變數必須包含物件的位址。

5、抽象函式:virtual double getarea() = 0;= 0指明getarea是個純虛函式(也即抽象函式),基類裡 純虛函式沒有函式體和實現。包含純虛函式的類為抽象類,同樣不能建立物件。

6、動態型別轉換:將乙個geometricobject型別的引數轉換為circle型別:

geometricobject *p = &object//建立了乙個指向引數object的指標

circle *p1 = dynamic_cast(p)//dynamic_cast運算子檢查p是否指向乙個circle物件,如果是,物件位址賦給p1,否則p1的值為null

向上轉型:將乙個派生類指標賦予乙個基類指標,例:

geometricobject *p = new circle(1);

circle *p1 = new circle(2);

p = p1;

//circle是geometricobject的派生類

向下轉型:反之。p1 = dynamic_cast(p);

向上轉型可以不使用dynamic_cast,向下轉型必須用。

11 多型與繼承(上)

在子類中定義與父類中原型同樣的函式 函式重寫僅僅發生在父類與子類之間 問題所在 1 c 與c同樣,是靜態編譯型語言 2 在編譯時,編譯器自己主動依據指標的型別推斷指向的是乙個什麼樣的物件 3 所以編譯器覺得父類指標指向的是父類物件 4 因為程式沒有執行。所以不可能知道父類指標指向的詳細是父類物件還是...

繼承和多型

物件導向程式設計時有乙個非常重要的原則 write once only once 編寫一次,且僅編寫一次 如果沒有繼承這種機制我們可能要重複寫很多 下面來看一下繼承 一 繼承 1 子類如果繼承父類必須使用extends這個關鍵字 2 子類呼叫父類的構造方法使用super關鍵字,也可以通過super來...

繼承和多型

物件導向程式設計時有乙個非常重要的原則 write once only once 編寫一次,且僅編寫一次 如果沒有繼承這種機制我們可能要重複寫很多 下面來看一下繼承 一 繼承 1 子類如果繼承父類必須使用extends這個關鍵字 2 子類呼叫父類的構造方法使用super關鍵字,也可以通過super來...