面向對象:
</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函數的具現化,使這些調用得以成功。這樣的具現行爲發生在編譯期,因此稱爲編譯期多態。也就是在編譯期同通過模板實例化函數模板。