C 多型知識點滴

2021-08-11 03:04:55 字數 1946 閱讀 7021

函式的多種不同的實現方式即為多型

在繼承中,有時候基類的一些函式在派生類中也是有用的,但是功能不夠全或者兩者的功能實現方式就是不一樣的,這個時候就希望過載那個基類的函式,但是為了不再呼叫這個函式時,出現不知道呼叫基類的還是子類的情況出現,於是就提出了多型。多型可以說是面象物件語言的強大原因之一。

多型是實現是依賴於虛函式來實現的,之所以虛函式可以分清楚當前呼叫的函式是基類的還是派生類的,主要在於基類和派生類分別有著自己的虛函式表,再呼叫虛函式時,它們是通過去虛函式表去對應的函式的。

具體實現**如下:

#include

using

namespace

std;

class base//基類

};//共有繼承public/保護繼承protected /私有繼承private

class dir :public base//子類

virtual

void funtest1()

void funtest2()

~dir()

{}};void fun(base & s)

int main()

使用虛函式的條件

(1):只有類成員函式才能宣告為虛函式,這是因為虛函式只適用於有繼承關係的類物件中。

(2):靜態成員函式不能說明為虛函式,因為靜態成員函式不受限與某個物件,整個記憶體中只有乙個,所以不會出現混淆的情況

(3):內聯函式不可以被繼承,因為內聯函式是不能子啊執行中動態的確認其位置的。

(4):建構函式不可以被繼承。

(5):析構函式可以被繼承,而且通常宣告為虛函式。

(6):友元函式不屬於類成員,不能宣告為虛函式。

(1):解釋

虛函式是在基類中被宣告為virtual,並在派生類中重新定義的成員函式,可實現成員函式的動態過載

純虛函式的宣告有著特殊的語法格式:virtual 返回值型別成員函式名(參數列)=0;

(2):必要性:

在很多情況下,基類本身生成物件是不合情理的。例如,動物作為乙個基類可以派生出老虎、孔雀等子類,但動物本身生成物件明顯不合常理。為了解決上述問題,引入了純虛函式的概念,將函式定義為純虛函式(方法:virtual returntype function()= 0;),則編譯器要求在派生類中必須予以過載以實現多型性。同時含有純虛函式的類稱為抽象類,它不能生成物件。

(3):抽象類的解釋

包含純虛函式的類稱為抽象類。由於抽象類包含了沒有定義的純虛函式,所以不能定義抽象類的物件。

在c++中,抽象類只能用於被繼承而不能直接建立物件的類(abstract class)。

純虛函式應用更多,含有純虛函式的類我們叫做介面類(抽象類)

例:

#include

using

namespace

std;

class base//基類

;//共有繼承public/保護繼承protected /私有繼承private

class dir1 :public base//子類

virtual

void funtest1()//純虛函式的實現

void funtest2()

~dir1()

{}};class dir2 :public base//子類

virtual

void funtest1()//純虛函式的實現

void funtest2()

~dir2()

{}};void fun(base & s)

int main()

父類提供介面,在呼叫時選擇子類的函式

Perl知識點滴

函式多返回值 v1 abc v2 bcd v3,v4 upcase v1,v2 sub upcase return wantarray parms parms 0 print v3,v4 取得陣列長度 a 1,2,3 my alen a print alen aa 1,111 2,2222 3,33...

Linux 知識點滴

linux的原作者是誰?linus torvalds,托瓦茲.作業系統應該包括哪兩個部分?乙個是 核心與其提供的介面工具 另乙個是 利用核心提供的介面工具所開發出來的軟體 linux的發展分為兩種版本,哪兩種?穩定版本的偶數版,如2.6.x,適合與商業與家用環境使用 發展中版本的奇數版,適合開發特殊...

c 學習知識點滴記錄 一

這些知識都是從別人關於c 知識的講解而自己手敲的,照著大佬們的敲一遍,加深自己的理解。map是stl的乙個關聯容器,它提供一對一 其中第乙個可以稱為關鍵字,每個關鍵字只能在map 現一次,第二個可能稱為該關鍵字的值 的資料處理能力,由於這個特性,它完成有可能在我們處理一對一資料的時候,在程式設計上提...