override(重寫)是指在不同作用域中,多個函數原型完全壹樣,而實現卻不同的函數。在C++中,經常發生在類的繼承中。當基類中的某個方法是virtual或pure virtual函數時(當然訪問權限必須是public或protected,因為從C++設計思想上來講private的函數不會是virtual的,呵呵),其子類中對該方法的重新實現就屬於override。使用時,可以通過基類的指針或者引用所指向的具體對象來確定調用的是哪個方法,從而實現函數的多態。對於基類中的非virtual類型的成員函數,若其子類中也聲明了與該函數名稱相同的函數,那麽基類中的該函數(也許是壹系列函數,如果該函數在基類中有重載的話,呵呵)將被隱藏,可以通過域解析操作符來調用。不過按照C++的設計思想來說呢,基類中的非virtual類型的成員函數,是不需要在子類中進行修改的,所以如果在子類中出現了這種隱藏的情況,說明應該將基類中的該函數改成virtual類型的,然後就是override了。
overload(重載)則是指在相同作用域中,多個函數具有相同的名字,但參數的數目和類型各不相同(當然相同數目和類型,如果順序不同也是可以的),因為函數重載的機制是在C++中函數的簽名與其參數有關,而不像C中,只與函數名有關。總之,override與overload的壹個最大的區別就是作用域不同,以及函數原型是否相同,呵呵。
函數的重載(overload)覆蓋(override)隱藏
派生類的函數與基類的函數完全相同(函數名和參數列表都相同),只是基類的函數沒有VIRRUAL關鍵字.些時基類的函數將被隱藏,而不是覆蓋.
派生類的函數與基類的函數同名,但參數列表不同,在這種情況下,不管基類的函數聲明是否有VIRRUAL關鍵字,基類的函數都將被隱藏.註意這種情況與重載的區別,重載發生在同壹個類中。