虛函數(動態綁定)對于 OO/C++的重要性
虛函數(動態綁定)對于 OO/C++來說是主要的嗎?是的!
沒有虛函數,C++ 就不是面向對象的了。算符重載和非虛成員函數很好,但畢竟,它們只是更典型的C概念中傳遞一個struct的指針給函數的句法裝飾而已。雖然標準庫包含了許多模板以實現同樣非常好的“泛型編程(譯注:也稱通用編程,"generic programming")”技術,但虛函數仍然是用C++進行面向對象編程的核心。
從商業角度看,如果沒有虛函數,那么也就沒有什么理由要從傳統的 C 轉移到C++了。(在本FAQ中我們將忽略泛型編程和標準庫)。技術人員通常認為在C和非面向對象的C++之間有很大的區別,但如果沒有面向對象,這個區別通常不足以證明培訓開發者,新工具等的成本是值得的。換句話說,如果我被某個經理征詢意見,是否從C轉向非面向對象的C++(也就是說,轉換語言而不轉換典范),那么我可能會勸阻他這樣做,除非有逼不得已的面向工具的原因。從商業角度看,面向對象能使系統具有可擴展性和可適應性,但只有C++類的語法而沒有面向對象的話,就不會減少維護成本,而實際上會增加培訓成本。
底線:沒有虛函數的C++不是面向對象。用類編程而沒有動態綁定則稱為“基于對象”,而不是“面向對象”。踢出虛函數和踢出OO(譯注:即面向對象)是一回事。所剩下的就是基于對象編程了,和最初的Ada語言類似(順便說一下,新的Ada語言支持OO而不是基于對象編程了)。
posted on 2006-06-22 14:48 楊粼波 閱讀(408) 評論(0) 編輯 收藏 引用 所屬分類: 文章收藏