多型的四種表現形式

2021-09-25 12:51:18 字數 1418 閱讀 1929

在之前一提到多型,我下意識就是虛函式重寫構成的執行時多型。直到看了一篇文章,才反應過來多型有四種表現形式。cpp-polymorphism

執行時多型就是派生類重寫基類的虛函式,在呼叫函式裡,引數為基類的指標或引用,會構成多型。我之前寫過一篇多型的原理,就是在講多型(執行時多型)在底層是怎麼實現的

多型的實現原理

舉個例子:比如買票這個行為,**去買就是全價,學生買就是半價票。但是不管**還是學生都是人這個體系。所以我們需要根據誰來買票才能決定**,這個時候就需要多型。

編譯時多型就是模板。在程式編譯時,編譯器根據引數的型別,就將生成某種型別的函式或類。我之前關於模板的總結:

c++泛類–函式模板、類模板

舉個簡單的例子:add() 函式是乙個非常簡單的函式,但是如果你寫乙個整型的 add 函式,那麼我想加 double 型的呢?你再寫乙個 double 型的 add 函式,那麼我想加 char 型的呢?

這個時候就用到了模板,我們先定義乙個邏輯,具體型別等編譯時再生成該型別的函式或類。

#include

template

<

class

t>

t add

(t lhs, t rhs)

intmain

(void

)

函式名相同,引數不同就構成了過載。過載主要用於函式,當某個函式的功能無法處理某些引數的情況時,我們就可以過載乙個函式來單獨處理。

舉個例子:比如說上面的 add 函式,當前內建型別都可以處理,但是如果我傳兩個字串怎麼辦?就不可以像剛才那麼加了。得過載乙個函式單獨處理。

#include

#include

intadd

(int lhs,

int rhs)

std::string add

(const std::string& lhs,

const std::string& rhs)

intmain

(void

)

型別轉換主要分為四種:

型別轉換很簡單,這裡就不多贅述了。

這篇部落格主要是強調了多型有四種形式,並不單單是執行時多型。

多型的表現形式

目錄 1.多型的定義 2.多型的三種形式 3.多型的編譯和執行 4.多型的轉型 5.多型的好處 6.多型的弊端 多型 封裝和繼承是物件導向的三大特性。多型需滿足三個條件 1 有繼承 2 有重寫 3 有父類引用指向子類物件。最終多型體現為父類引用可以指向子類物件 父類型別 變數名 new 子類型別 1...

多型有幾種表現形式

1 方法的過載 通常是指在同乙個類中,相同的方法名對應著不同的方法實現,這些方法名相同的方法其區別在於他們的引數不同 2 方法的重寫 方法的重寫主要用於父類和子類之間,子類重寫父類的方法,只是對應的方法實現不同,方法名和方法引數都相同 3 抽象類 在物件導向語言中,乙個類中的方法只給出了標準,而沒有...

表現形式CSS

css cascading stylesheets的縮寫 翻譯為 層疊樣式表 或者 級聯樣式表 簡稱樣式表 cascading stylesheets 的首字母縮寫,意思是層疊樣式表。有了css,html中大部分表現樣式的標籤就廢棄不用了,html只負責文件的結構和內容,表現形式完全交給css,ht...