程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 1.了解隱式接口和編譯期多態

1.了解隱式接口和編譯期多態

編輯:C++入門知識

顯式接口,運行期多態(面向對象編程解決問題的方式)
顯式接口:我們知道它是什麼樣子,在源碼中明確可見。
虛函數:提供運行期多態支持,根據動態類型決定調用函數。
模板和泛型編程的重點是隱式接口和編譯期多態
看下面這個模板函數
[cpp]  emplate<typename T> 
void DoSometing(T& w) 

    if(w.size()>10&&w!=someNastWidge) 
    { 
        T temp(w); 
        temp.normalize(); 
        temp.swap(w); 
    } 

template<typename T>
void DoSometing(T& w)
{
 if(w.size()>10&&w!=someNastWidge)
 {
  T temp(w);
  temp.normalize();
  temp.swap(w);
 }
}1.函數內w所調用的函數就是一組隱式接口。單從代碼上看我們還不能確定w是什麼類型。但是T必須支持這些隱式接口。
2.由於參數T的種類可以多種多樣,這樣,在編譯期,T的具體類型的不同導致了函數體內w所調用的函數也不相同。這便是所謂的編譯期多態。
3.關於編譯期多態和運行期多態
編譯期多態和運行期多態可以簡單的理解成,一個是決定哪個重載函數該被調用(一般依據編譯器的函數重命名規則來實現,發生在編譯期),另一個是哪一個虛函數該被綁定(通過虛函數表和虛函數指針實現,發生在運行期,根據類中的虛函數指針來動態確定)。
4.關於顯式接口和隱式接口
顯式接口就是一個完整的函數簽名,明確指明了函數名稱,參數類型,返回值
隱式接口由一系列有效表達式組成。什麼意思呢
比如這樣一個表達式:
w.size()>10&&w!=someNastWidge
通過表達式來指明類型參數T具有哪些能力,這些便是隱式接口
牢記:
1.類和模板都支持接口和多態
2.對類而言,接口是顯式的(explicit)。多態是通過虛函數在運行期實現。
3.模板,接口是隱式的(implicit),是基於有效表達式的。多態是通過在編譯期,模板具體化和對函數重載的解析來實現。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved