CPP學習備忘 9 多型

2021-06-02 14:39:56 字數 1045 閱讀 8664

雖然從廣義上說,資料型別是資料結構在一定的程式語言中的描述形式,但實際上描述群體資料(容器)的抽象資料型別才是資料結構的真正體現。

類定義不占用任何記憶體空間,也沒有任何物件的預處理,所以沒有任何操作上的開銷。

乙個操作隨著所傳遞或**的物件型別的不同能夠做出不同的反應,其行為模式稱為多型。

c++中採用一種滯後繫結技術來支援多型性,即滯後到執行時,根據具體型別的物件來**成員函式。

在c++中基類與派生類的同名操作,只要標記上virtual,則該操作便具有多型性。一旦標記基類的函式為虛函式,便有連鎖反應,後面繼承的類中一切同名成員函式都變成了虛函式。子類中的同名函式無需再用virtual進行宣告。

用了虛函式的類,其物件的空間比不用虛函式的類多了乙個指標的空間,用來指向虛函式列表,這會有一些效率影響。

僅僅對於物件的指標和引用的間接訪問才會發生多型現象。

靜態成員函式不能是虛函式。

內聯函式不能是虛函式。

析構函式可以是虛函式且通常宣告為虛函式。

建構函式不能是虛函式。

虛函式用於繼承結構層次中的基類與子類。除了基類與子類的函式名必須相同外,連引數型別、個數和順序都要相同,也就是說,基類和子類的虛函式不能只是名字過載。否則,成員函式即使標記上virtual,也不會被編譯器做滯後處理。

多型還可以擴充套件到每個物件可以動態地被識別,從而區分型別做只有該型別才能有的操作,而不是虛函式規定的操作,這樣依賴於型別的動態轉換;

dynamic_cast操作是專門針對有虛函式的繼承結構來的,它將基類指標轉換成想要的子類指標,以做子類操作的準備。dynamic_cas操作所針對的基類指標,如果所指向的物件中不含有想要的子類物件,則將得到0.

相對動態型別轉換,靜態型別轉換則做範圍更廣的轉換,但前提必須是相關的型別,也就是說,編譯器必須認為可理解。static_cast轉換並不是專門針對指標的,只要是相關型別的轉換,都可以操作。無非它主要是針對確定的型別,而不是針對多型。

從type型別轉換到const type型別是允許的,但是原來是const type型別的,拒絕轉換到type。這時可以使用開禁操作:const_cast,也就是去掉常量性的轉換操作。

CPP學習備忘 12 模板

模板使程式設計師能夠快速建立具有型別安全的類庫集合和函式集合,以方便更大規模的軟體開發。c 的stl全賴於模板實現,模板是c 物件導向程式設計的重要補充。函式模板的定義形式為 template 型別參數列 返回型別 函式模板名 資料參數列 函式模板定義體 函式模板不是函式,它是以具體的型別為實參來生...

cpp備忘摘錄

staticconststatic const const static成員初始化 四種cast 隱式轉換與explicit 類建構函式 類的static函式 構造析構函式 虛函式與構造析構函式 int a1 3 non const data const int a2 a1 const data i...

CPP學習備忘 1 基本程式設計語句

switch括號中的表示式只能是整型 字元型或列舉型表示式。case後面的常量表示式之型別必須與其匹配。流iostream主管資料型別的識別工作和溝通作業系統,全權負責把流中的資料送到對應的裝置上。流的格式操作亦可直接以輸出流的方式操作。常用的流狀態 showpos 在正數 包括0 之前顯示 號 l...