1. 程式人生 > >C++的精髓——代碼復用、接口復用

C++的精髓——代碼復用、接口復用

事件 助理 哈哈 方式 存在 content 內部 text 一個

C++的精髓——代碼復用、接口復用

在另一篇文章中提到C++三大特點的核心概括,也寫在這裏吧。
封裝:信息隱藏
繼承:代碼復用
多態:面向對象
C++並不是面向對象,它包容多種編程思想,如面向過程,面向對象,泛型編程等。

筆者還在學校的時候理解C++最終精髓是兩點:代碼復用、接口復用。到現在隔的時間挺長了,今天不防把它記錄下來,希望不會引起各位高手的嘲笑吧。
C++的特點:封裝、繼承、和多態。現在我們分別從這些所謂的C++的特點上來討論它的本質吧。
封裝:封裝的含意就是對一個空間下的成員變量進行保護,這可能也是class和struct的唯一區別了吧。當然不是說struct不能保護,只是一個 默認值而已。但C就沒有這些支持嗎?答案是肯定的。比如在一個文件的全變量聲明成static,那麽這個全局變量就是對該文件內部是可見的,對外部是隱藏 的。因此從這一點上來看,封裝不能算C++特有的東西。只不過是文件和聲明的struct內部而已。好,下面對繼承再進行分析。
繼承:繼承就 是子類具體父類可繼承的方法的屬性,那麽它本質做了哪些事呢?實際說白了很簡單,只是復用了你類的代碼,甚至我們可以認為是父類可繼承的代碼原樣照抄一 遍。這能算C++特有的嗎?C封裝的那麽多的lib庫不同樣可以完成這些事嗎?因此繼承我認為同樣不是C++的特性。好了,被人們傳頌的C++三大屬性在 不知覺間被我砍了倆了,可能要被許多C++愛好者猛批一把了。但是下面我還要把第三個所謂的它的特點給否認掉:)
多態:多態是什麽呢?即一個 抽象事物對於不同的具體事物可以有不同的動作和處理事件,這就是多態。那麽多態究竟做了哪些事呢?難道C就沒有這樣的特性了嗎?實際上如果對C有一定深度 理解的話,那麽如下就不難理解了。聲明一個函數指針,放在一個struct內部,在不同時刻對其賦不同的函數指針值,這樣就可調用不同函數,這是不是叫多 態呢?從本質上講,這就是所謂的C++的多態,而且也是這麽實現的。哈哈,到這兒可以看到神奇的C++竟再也沒有可被提及的自已的特點了。
是 不是C++真的就沒有所謂的特點和特質了呢?答案是當然存在,而且文章題目也很醒目:代碼復用、接口復用。現在我們給其拋開那些好聽的繼承名子,以復用取 而代之。復用C庫即是,但C++則采用了另外一種復用形式,重要的不是於表象,而在於對事物的抽象理解的復用。如果從這個角度去再解C++的復用,那麽你 才能真正去理解C++的一點點內涵吧。它可以將宏觀世界的物可以很形象的用語言的形式對外再現。把是什麽,歸屬這種性質以符號的形式進行加工進而實現復 用。這便是C++的第一個精髓點吧。因此看你對繼承這個詞的理解程度了,不要人雲亦雲。
下面再進行接口復用進行更進一步的論述。剛才論討了 C++的繼承即是代碼復用的特性,下面將說明多態就是接口復用的性質。的確,在C裏面使用指針完成可以做所謂C++的所有這些特性。實際C++的勝過C的 點並不在於所謂的多態,仍舊在於對編程思想的理解。比如使用C++可以幫助理解這樣的事物,同一類動物,對於不同的具體實際,可能做出不同的動作,使用 C++可以更加簡單形象的描述而已。因此多從更高層次上去理解C++,就可以幫助我們理解具體事物的特性在哪。接口復用即同一個接口,對於不同的使用者可 以使用同樣的接口調用方式可以得到不同的調用結果,這樣方便了代碼和系統的統一。
因此,如果讀到這兒,所有事情就都很清晰了。所謂的封裝、繼承、多態要完全拋開了,而應該從另外一個更高的層次去理解它。當你理解到這個層次,C、C++只不過是一個工具,功能沒有什麽差別。就不再會有C++實現的系統使用C難以實現的困惑了。
筆者愚見。 【轉自】http://ankorzhang.blog.163.com/blog/static/1183773432010410115338866/

C++的精髓——代碼復用、接口復用