虛函數(shù)(動(dòng)態(tài)綁定)對于 OO/C++來說是主要的嗎?
是的!
沒有虛函數(shù),C++ 就不是面向?qū)ο蟮牧恕K惴剌d和非虛成員函數(shù)很好,但畢竟,它們只是更典型的C概念中傳遞一個(gè)struct的指針給函數(shù)的句法裝飾而已。雖然標(biāo)準(zhǔn)庫包含了許多模板以實(shí)現(xiàn)同樣非常好的“泛型編程(譯注:也稱通用編程,"generic programming")”技術(shù),但虛函數(shù)仍然是用C++進(jìn)行面向?qū)ο缶幊痰暮诵摹?/font>
從商業(yè)角度看,如果沒有虛函數(shù),那么也就沒有什么理由要從傳統(tǒng)的 C 轉(zhuǎn)移到C++了。(在本FAQ中我們將忽略泛型編程和標(biāo)準(zhǔn)庫)。技術(shù)人員通常認(rèn)為在C和非面向?qū)ο蟮腃++之間有很大的區(qū)別,但如果沒有面向?qū)ο螅@個(gè)區(qū)別通常不足以證明培訓(xùn)開發(fā)者,新工具等的成本是值得的。換句話說,如果我被某個(gè)經(jīng)理征詢意見,是否從C轉(zhuǎn)向非面向?qū)ο蟮腃++(也就是說,轉(zhuǎn)換語言而不轉(zhuǎn)換典范),那么我可能會(huì)勸阻他這樣做,除非有逼不得已的面向工具的原因。從商業(yè)角度看,面向?qū)ο竽苁瓜到y(tǒng)具有可擴(kuò)展性和可適應(yīng)性,但只有C++類的語法而沒有面向?qū)ο蟮脑挘筒粫?huì)減少維護(hù)成本,而實(shí)際上會(huì)增加培訓(xùn)成本。
底線:沒有虛函數(shù)的C++不是面向?qū)ο蟆S妙惥幊潭鴽]有動(dòng)態(tài)綁定則稱為“基于對象”,而不是“面向?qū)ο蟆薄L叱鎏摵瘮?shù)和踢出OO(譯注:即面向?qū)ο螅┦且换厥隆KO碌木褪腔趯ο缶幊塘耍妥畛醯腁da語言類似(順便說一下,新的Ada語言支持OO而不是基于對象編程了)。