1、首先確定進行函數調用的對象、引用或指針的靜態類型;例:Base *p1 = new Derive;p1->fun()。靜態類型爲Base
2、在該類中查找函數,如果找不到,就在直接基類中查找,如此循環,直到找到該函數或者查找完最後一個類,如果不能在類或相關基類中找到該名字,則調用錯誤;例:上例中p1先在Derive類中找fun(),未找到的話則在Base類中找。
3、一旦找到該名字,就進行檢查,看調用是否合法。
4、如果合法,編譯器生成代碼,如果函數爲虛函數且通過引用或指針調用,則編譯器生成代碼以確定根據對象的動態類型運行哪個函數版本,否則,編譯器生成代碼調用函數。