1 了解隱式介面和編譯期多型

2022-09-23 12:57:09 字數 855 閱讀 3893

顯式介面,執行期多型(物件導向程式設計解決問題的方式)

顯式介面:我們知道它是什麼樣子,在原始碼中明確可見。

虛函式:提供執行期多型支援,根據動態型別決定呼叫函式。

模板和泛型程式設計的重點是隱式介面和編譯期多型

看下面這個模板函式

[cpp]  emplate 

void dosometing(t& w)  } 

template

void dosometing(t& w)

}1.函式內w所呼叫的函式就是一組隱式介面。單從**上看我們還不能確定w是什麼型別。但是t必須支援這些隱式介面。

2.由於引數t的種類可以多種多樣,這樣,在編譯期,t的具體型別的不同導致了函式體內w所呼叫的函式也不相同。這便是所謂的編譯期多型。

3.關於編譯期多型和執行期多型

編譯期多型和執行期多型可以簡單的理解成,乙個是決定哪個過載函式該被呼叫(一般依據編譯器的函式重新命名規則來實現,發生在編譯期),另乙個是哪乙個虛函式該被繫結(通過虛函式表和虛函式指標實現,發生在執行期,根據類中的虛函式指標來動態確定)。

4.關於顯式介面和隱式介面

顯式介面就是乙個完整的函式簽名,明確指明了函式名稱,引數型別,返回值

隱式介面由一系列有效表示式組成。什麼意思呢

比如這樣乙個表示式:

w.size()>10&&w!=somenastwidge

通過表示式來指明型別引數t具有哪些能力,這些便是隱式介面

牢記:1.類和模板都支援介面和多型

2.對類而言,介面是顯式的(explicit)。多型是通過虛函式在執行期實現。

3.模板,介面是隱式的(implicit),是基於有效表示式的。多型是通過在編譯期,模板具體化和對函式過載的解析來實現。

條款41 了解隱式介面和編譯期多型

1 簡介 物件導向程式設計總是以顯式介面和執行期多型來解決問題。例如 class widget void doprocessing widget w 2 所謂的顯式介面 由於w的型別被宣告為widget,因此w需要widget介面,並且我們可以在原始碼中找到這個介面,看到原始碼的樣子,所以稱為是顯式...

條款41 了解隱式介面以及編譯期多型

相對於繼承體系來說,template實際上也使用介面與多型,而繼承體系往往使用到的是顯式介面以及執行期多型,而template實際上用的是隱式介面以及編譯期多型。隱式介面實際上就是類似下面這樣的東西 1 template 2int mytypes t tmp 3 這裡的size相當於這裡的隱式介面。...

Item 41 隱式介面和編譯時多型

oop程式設計與類屬程式設計 generic programming 的一大區別 1 oop使用顯式的介面和執行時多型 2 類屬程式設計使用隱式介面和編譯時多型 當你看到上面的 時,你能在某個檔案裡找到下面的宣告 widget支援什麼函式一目了然,此之謂 顯式介面 許多函式以virtual打頭,需在...