C++ 虛函數(shù)和函數(shù)重載在使用上的區(qū)別
1.函數(shù)重載可以用于非成員函數(shù)和類的成員函數(shù),而虛函數(shù)只能用于類的成員函數(shù)
2.在構(gòu)造函數(shù)方面:函數(shù)重載可用于構(gòu)造函數(shù),而虛函數(shù)不能用于構(gòu)造函數(shù)
3.如果對(duì)成員函數(shù)進(jìn)行重載,重載的函數(shù)與被重載的函數(shù)應(yīng)該是用一個(gè)類中的成員函數(shù),不能分屬于兩個(gè)不同繼承層次的類,函數(shù)重載處理的是橫向的重載。虛函數(shù)是對(duì)同一類族中的基類和派生類的同名函數(shù)的處理,即允許在派生類中對(duì)基類的成員函數(shù)重新定義。虛函數(shù)處理的是縱向的同名函數(shù)。
4.兩者在概念和函數(shù)定義上的不同:重載的函數(shù)必須具有相同的函數(shù)名,函數(shù)類型可以相同也可以不同,但函數(shù)的參數(shù)個(gè)數(shù)和參數(shù)類型二者中至少有一個(gè)不同,否則在編譯時(shí)無法區(qū)分。而虛函數(shù)則要求同一類族中的所有虛函數(shù)的函數(shù)名,函數(shù)類型,函數(shù)的參數(shù)個(gè)數(shù)和參數(shù)類型都全部相同,否則就不是重定義了,也就不是虛函數(shù)了
5.函數(shù)重載是在程序編譯階段確定操作的對(duì)象的,屬于靜態(tài)關(guān)聯(lián)。虛函數(shù)是在程序運(yùn)行階段確定操作對(duì)象的,屬于動(dòng)態(tài)關(guān)聯(lián)。
標(biāo)簽: