函式的多種不同的實現方式即為多型
在繼承中,有時候基類的一些函式在派生類中也是有用的,但是功能不夠全或者兩者的功能實現方式就是不一樣的,這個時候就希望過載那個基類的函式,但是為了不再呼叫這個函式時,出現不知道呼叫基類的還是子類的情況出現,於是就提出了多型。多型可以說是面象物件語言的強大原因之一。
多型是實現是依賴於虛函式來實現的,之所以虛函式可以分清楚當前呼叫的函式是基類的還是派生類的,主要在於基類和派生類分別有著自己的虛函式表,再呼叫虛函式時,它們是通過去虛函式表去對應的函式的。
具體實現**如下:
#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 現一次,第二個可能稱為該關鍵字的值 的資料處理能力,由於這個特性,它完成有可能在我們處理一對一資料的時候,在程式設計上提...