c++中有兩種多型: 動多型(執行期多型)和靜多型(編譯期多型),而靜多型主要通過模板來實現,巨集也是實現靜多型的一種途徑。
模板不採用虛函式機制,所以所有呼叫在編譯期就可確定,因此它是靜態的。
基於繼承和虛函式,多型的設計思想主要在於:對於幾個相關物件的型別,確定它們之間的乙個共同功能集;然後在基類中,把這些共同的功能宣告為多個虛函式介面。每個具體類都派生自基類,生成了具體物件之後,客戶端**就可以通過基類型別的引用或指標來操作這些物件,並且能夠通過這些引用或者指標來實現虛函式的排程機制。也就是說,利用乙個基類型別的指標或者引用來呼叫虛成員函式,實際上將可以呼叫具體類物件的相應成員。這種動多型是c++程式設計裡面最常見的。
模板也能夠被用於實現多型。 編譯期間實現。
例子:
class circle
;class line
;....
////上面兩個類的使用:
//template void mydraw(geoobj const& obj) // geoobj是模板引數
......
int main()
{ line l;
circle c;
mydraw(l);
mydraw(c);
ref:
C 多型 靜態多型與動態多型
多型 顧名思義,多型就是多種形態,也就是對不同物件傳送同乙個訊息,不同物件會做出不同的響應。並且多型分為靜態多型和動態多型。靜態多型就是在系統編譯期間就可以確定程式執行到這裡將要執行哪個函式,例如 函式的過載,物件名加點操作符執行成員函式等,都是靜態多型,其中,過載是在形成符號表的時候,對函式名做了...
C 靜態多型與動態多型
多型按字面的意思就是多種形態,相同的方法呼叫,但是有不同的實現方式。多型性可以簡單地概括為 乙個介面,多種方法 c 有兩種多型形式 靜態多型 也稱為編譯期間的多型,編譯器在編譯期間完成的,編譯器根據函式實參的型別 可能會進行隱式型別轉換 可推斷出要呼叫那個函式,如果有對應的函式就呼叫該函式,否則出現...
靜態多型 動態多型
又稱編譯期多型,即在系統編譯期間就可以確定程式將要執行哪個函式。例如 函式過載,通過類成員運算子指定的運算。函式過載示例 class a a int x void f void f int x class b void f void f int x 以上,類a中兩個a 是函式過載,兩個f 是函式過載...