顯示接口-隱式接口-編譯期多態-運行期多態

面向對象:

</pre><pre name="code" class="cpp">class Widget{
public:
widget();
virtural ~widget();

virtural void normalize();
}

</pre><pre name="code" class="cpp">void doPeocessing(Widget& w)
{
    if(w.size()>10 && w != NMD)
    {
         Widget temp(w);
          temp.normalize();
    }
}


定義了一個無意義的類和函數。

顯示接口:w被聲明爲Widget,w支持Widget的接口,並且接口的定義在源碼中可見,這就是顯示接口。在源碼中明確可見的接口。

運行期多態:Widget的成員函數爲virtural,w調用那些成員函數由運行期決定。運行期多態指的就是在運行期根據w的動態類型決定調用哪一個函數,或者是基類函數或者派生類函數。

Templates及泛型編程:

通過泛型的方式重新定義上邊的函數,

template<typename T>
void doProcessing(T& w)
{
      if(w.size()>10 && w != NMD)
      {
             T temp(w);
              temp.normalize();
      }
}
隱式接口:w必須支持的接口類型由T來決定。在上例看來T類型必須支持size normalize 成員函數,copy構造函數等等。T必須支持的表達式就是T必須支持的隱式接口,否則無法通過編譯。

編譯期多態:凡是涉及到w的任何函數調用,有可能造成template函數的具現化,使這些調用得以成功。這樣的具現行爲發生在編譯期,因此稱爲編譯期多態。也就是在編譯期同通過模板實例化函數模板。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章