C 多型性總結

2021-06-29 07:01:21 字數 1308 閱讀 5260

多型性是c++語言最重要的基本特徵之一

正是因為多型性的靈活,才使之如此重要,也需要仔細思考才能很好把握

多型(polymorphism)/動態繫結使編譯器能夠在執行時決定使用基類中定義的函式還是派生類中定義的函式

虛函式的前提是有基類及其派生類

在基類中要有虛函式的定義: 成員函式的virtual宣告. 因為預設不使用動態函式

必須通過基類型別指標或者引用進行函式呼叫

#include 

#include

#include

using

namespace

std;

class base

};class derived : public base

};int main()

基類定義了虛函式virtual print(), 並在派生類中重定義

派生類中一般需要重定義所繼承的虛函式,若沒有則使用基類版本

一旦函式被宣告為虛函式,則派生中一直為虛函式;派生類中可以使用關鍵字virtual,也可以不保留

虛函式重定義時候,原型不能變:返回型別、形引數目和型別都不能更改;若不一致則為過載

構造(三大類)函式不能做為虛函式,靜態成員函式不能定義為虛函式

在建構函式執行的時候,這個物件的動態型別還不完整,沒有辦法確定它到底是什麼型別,故建構函式不能動態繫結

靜態的資料成員被所有的物件共享,靜態資料成員不屬於物件,而是屬於類的;靜態成員函式也是屬於類的,它沒有this指標,它無法進行物件的判別

構造及析構函式體內切勿使用虛函式

在進行基類成員構造的時候物件就被編譯器視為基類型別;派生類部分的成員還沒有初始化,想呼叫派生類的虛函式相當於要去使用未定義的資料;另外,若此時涉及到呼叫虛函式,也是基類的虛函式,是不可能正確實現多型的

析構函式同理

虛析構函式

虛析構函式是根據物件的型別來動態釋放基類/派生類的物件的

意味著可以用基類的引用釋放派生類的物件的空間

當基類中有虛函式時,最好將析構函式也宣告為虛函式

虛函式的遮蔽

作用域符號 : : 可以強制呼叫指定的虛函式,因為派生類的物件可以賦值給基類,傳入派生類物件依然可以執行基類定義的虛函式

純虛函式

純虛函式是用來被繼承的;純虛函式可以讓類先具有乙個操作名稱,而沒有操作內容,讓派生類在繼承時再去具體地給出定義。凡是含有純虛函式的類叫做抽象類。這種類不能宣告物件,只是作為基類為派生類服務

C 多型性總結

c 物件導向程式中存在三種多型 1 物件型別的多型。派生類的物件的型別既可以是派生類,也可以是基類,即乙個物件可以屬於多種型別。2 物件標識的多型。基類的指標或引用可以指向或引用基類物件,也可以指向或引用派生類物件,即乙個物件標識可以屬於多種型別,它可以標識多種物件。在物件識別符號定義時指定的型別稱...

C 多型性總結

多型是指同樣的訊息被不同型別的物件接受時導致不同的行為。所謂訊息是指對類的成員函式的呼叫,不同的行為是指不同的實現,也就呼叫不同的函式。換言之,多型指的就是用同樣的介面訪問功能不同的函式,從而實現 乙個介面,多種方法 物件導向的多型性可以分為4類 過載多型,強制多型,包含多型,引數多型。前面兩種統稱...

C 之多型性總結

起初接觸到這個名詞的時候,是在看 c 看到的,裡邊寫的概念還是比較好理解的。但是這次看到了 c 多型就是同一操作作用於不同物件,可以有不同的解釋,產生不同的執行結果。這就是多型性。同時要多型性是通過派生類覆寫基類中的虛函式型方法來實現的。說到這裡,就不得不說一下過載和覆寫。什麼是過載呢?就是乙個類中...