以文本方式查看主題 - 曙海教育集團論壇 (http://www.hufushizhe.com/bbs/index.asp) -- C語言開發 (http://www.hufushizhe.com/bbs/list.asp?boardid=62) ---- 關于C和C++區別的討論 (http://www.hufushizhe.com/bbs/dispbbs.asp?boardid=62&id=2406) |
-- 作者:wangxinxin -- 發布時間:2010-12-10 11:20:17 -- 關于C和C++區別的討論 談點我個人的看法哈,一家之言,歡迎拍磚。 我個人理解,這二者其實沒有太大差異性。 C語言面向過程,OP,C++語言面向對象,OO. 但實際上大家可能能關注到,不管如何OO,如何劃分類和對象,但是,具體到一個功能,還是要用函數來實現,不管如何寫程序,到了函數內部,其實還是那些if、for、while等等語句,還是面向過程的。 所以,我和我的同事,平時并不會明顯去分辨C和C++的異同,在我們看來,二者本來就是一體的。 其實這個世界上,完全的OO是不存在的,當我們實現一個功能的時候,很多時候,就是界定一些數據,針對數據添加一些處理流程,獲得一個結果,這件事情,本質上就是個過程。 但C++還是很有用的。 因為很多年以前,大家覺得傳統面向過程的語言,如C,如Basic,如Pascal,都有一個缺點,就是在程序中,彼此暴露了太多的細節,這造成各個功能之間,由于程序員的失誤,很容易發生粘連,聯系。換而言之,就算是非法訪問,通常也是合法而成功的,不會被編譯器檢查出來。比如C就允許全局變量和遠指針調用。 這在開發大型系統的時候,就出現了bug率居高不下,大型工程項目很難完成的缺點。 正是因為此,大家在上世紀七十年代,提出了模塊化開發的思想,試圖通過各個模塊的獨立開發和運行,強行阻斷各個模塊不必要的耦合性,來達到讓程序穩定的目的。 但這樣畢竟是人工在操作,是人做的,就可能會犯錯誤,大家覺得有必要在編譯器這一級,要強調模塊之間的獨立性。 這個時候,大家經過分析,發現程序其實核心是和數據打交道的,一個數據,業務上只要界定了用途,基本上,可能的訪問方法就確定得差不多了,那么,我們有沒有可能,把一類數據,以及其方法,從編譯器的角度區別開來,構建獨立模塊,外部模塊僅能訪問到它允許訪問的方法,其他的方法,全部報錯,拒絕編譯呢? 答案是當然可以。大家就這么做了。那么,我們看看,一類數據和其允許的方法的集合,就是對象啦,在這個思想上,OO,面向對象的思想就產生了。 最初,這個語言是一個新的語言,好像叫smalltalk吧,不過,這個時候的語言,還是實驗室產品,沒有投入商業運營。 但這個時候,市場上,由于UNIX的推動,C語言基本上已經一統天下了。很多人都學的C語言,讓大家去學習一門新語言,尤其是開發思路完全不同的語言,是不可想象的,成本太高。大家就想,能不能折中一下,以C的語法為藍本,開發一套OO的語言,C++就這么誕生了。 其實OP到OO,C到C++,本質上講,就是一個數據私有化的過程。甚至整個語言的發展史,也是一個數據私有化的過程。如匯編語言,其實是沒有私有數據的,所有的內存都可以被訪問。 人們通過編譯器的界定和完善,逐漸實現數據私有化,最終的目標就是實現一個軟件系統內部各個模塊之間,高內聚,低耦合的目標,最終保證程序員的產品質量,進而提高生產率。 至于后面的泛型編程,多態,繼承等等,無非是在這條路上繼續了一步而已,當然,也是為了盡量減少程序員的代碼輸入量,進一步提升生產效率而已。 所以,從數據組織上講,C++比C先進了一大步,但從功能實現上講,C++和C并無本質不同。C++到現在,都不是一種完全的面向對象語言,因為它都仍然保留了全局變量。 所以我的意見,兩個一起學,不要刻意去區分,好像用C就要用純C,沒必要。 我們工程中,系統級的模塊組織,一般式C++的對象,每個單步功能,流程的實現,我們都是C的函數,僅僅是放在類里面而已 |