C 二級複習6(多型性和虛函式)

2021-09-14 01:28:22 字數 1861 閱讀 1734

c++二級複習6

1、多型性(物件導向):

向不同的物件傳送同乙個訊息,不同的物件在接收時會產生不同的行為(即方法)

從系統實現的角度來看,多型性分為:靜態多型性和動態多型性。

靜態多型性是通過函式過載實現的,程式編譯時就知道呼叫函式的全部資訊,也被稱為編譯時的多型性。

動態多型性:執行時的多型性,通過虛函式實現的。

2、引入:如果用同乙個成員名呼叫類物件的成員,會呼叫哪個物件的成員?

3、虛函式的作用

編譯系統按照同名覆蓋的原則呼叫函式,使用域作用限定符不方便,所以,能不能使用統一的呼叫形式(指標)來呼叫派生類和基類中的同名函式,而不是通過物件名去呼叫不同派生層次的函式。

虛函式,解決動態多型性的問題的,基類中宣告函式時虛擬的,並不是實際存在的,然後在派生類中才定義函式體。

定義基類指標指向基類物件可以輸出,資料成員和呼叫函式。而當基類指標指向派生類時,可以輸出資料成員。而函式仍然是呼叫的基類的函式。(將指標指向派生類物件的時候,指標會自動型別轉換為原來的基類指標,自然指向不變)

為了順利的呼叫每個類的函式而去,宣告對應的類的指標呼叫或者使用域作用限定符都是不方便的,

而將基類的同名函式宣告為虛函式可以解決這一問題。

一般格式:

virtual 型別名 函式名(參數列);
之後,再將基類指標分別指向基類或者派生類物件,就可以呼叫對應的同名函式了。

作用:當基類中的某個函式被宣告為虛函式時,允許派生類中,對該函式進行重新定義,而且可以使用指向基類的指標指向派生類來呼叫對應的函式。

注意:於類外進行定義時,無需再宣告virtual,一般在派生類中宣告該函式時,開頭建議加上virtual。使用基類指標呼叫函式時,需要提前對對應的類物件宣告定義。

函式過載和虛函式的關係:前者是橫向過載,後者是縱向過載。同一類族的虛函式的首部是相同的,而對函式過載時函式的首部是不同的(引數的個數或型別不同)

4、關聯

確定呼叫的具體物件的過程稱為關聯。

靜態(早期)關聯:函式過載,通過物件名呼叫的虛函式。

動態(滯後)關聯:虛函式。

5、注意事項

只能宣告類的成員函式,(繼承關係)。

乙個成員函式被宣告為虛函式後,同一類族中的類就不能再定義乙個非virtual的但與該函式具有相同的引數(包括型別和個數)和函式返回值型別的同名函式

其實有點不太明白,前面說可以在派生類中的同名函式,宣告前可以不加virtual,重新定義的,現在又說,估計還是宣告時加上virtual會比較好。

定義虛函式的情況:是否是基類,函式是否在派生類中用到,若通過基類指標或引用訪問函式而不是物件名,應宣告虛函式。

定義虛函式,也可以不寫函式體。

6、虛析構函式

對於基類指標,

比如說,使用基類指標指向派生類新開闢的空間,再delete時,系統只會執行基類的析構函式。不會執行新建了物件空間的類的析構函式。

此時,將基類的析構函式宣告為虛析構函式,系統就能正確執行對應的析構函式。

7、純虛函式

一般形式:

virtual 函式型別 函式名(參數列)= 0;
對應第五點的最後一句,告訴系統,先宣告乙個函式,以後,在派生類中,在進行定義。特徵就是,「 =0 」

8、抽象類

用它做基類去建立派生類,這種類不能定義物件,只作為一種基本型別來繼承的。

基類也叫做抽象基類。包含純虛函式的類都是抽象類。抽象類的派生類若對純虛函式進行了新定義,就稱為具體類,否則仍是抽象類。但是,同時,仍然可以定義指向抽象類的指標變數,利用之前的虛函式性質。

面對物件就到這裡了,書本快大致瀏覽完了,之後是輸入輸出有關的。

C 多型性和虛函式

c 的多型性,我認為就是表達相同方法的函式在不同的類中的表現形式不同 舉個例子,比如 移動這一行為,人是用兩條腿在走路,烏龜是慢慢爬,蛇是爬行,老虎是四條腿在走,魚是在游動 這就是多型性 多型性使不同的物件但是又具有某種共同屬性的物件不但可以在一定程度上共享 還能共享介面。非靜態函式宣告的前面加上v...

C 虛函式和多型性

c 為了實現多型性,提供了靜態繫結 早 或者叫做編譯期繫結 和動態繫結 晚 兩種機制。靜態繫結中包括 1 函式過載 2 運算子過載 3 子類繼承父類時,父類中的函式沒有新增virtual關鍵字 非虛函式 父類指標指向子類的位址時,呼叫和父類同名的函式則會預設呼叫父類的同名函式,子類同名函式的不會被呼...

c 多型性 虛函式

c 中多型性是指通過用virtual關鍵字來繫結同名同引數的函式,實現在編譯中進行後繫結,即在編譯過程中不繫結類,在執行時與具體的物件進行繫結,這樣就可以動態地與實際聯絡 比如乙個類 animal 有乙個虛函式breath 魚類 fish 也有函式breath 狗類 dog 函式breath 具體呼...