程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 設計C++語言目標和原則說明

設計C++語言目標和原則說明

編輯:C++入門知識

C++語言的一個目標就是提供更易用並具有一定承受能力的設計思想和程序設計技術,進一步提高程序的質量。這些技術中的絕大部分都源自Simula ,並通常被作為面向對象程序設計和面向對象設計思想來討論。

論壇中,常有初學者問“學習C++語言之前是否有必要先學C?”。我認為這個問題是個偽問題。問題本身的答案並非是提出問題的人真正想要的。回答這個問題非常簡單:“當然不需要”。因為C++是一門獨立的編程語言,它在語法、構建環境和運行環境上都不需要依賴於任何其它語言。至於說它是“C語言的超集”。

那只是一種模糊的提法而已,更准確的說法應該是:C++語言從設計之初就充分考慮了對C語言的兼容性,結果使它在相當大的程度上兼容了C語言。如此而已。但對於那樣提問的初學者來說,以上會是他們想要的答案嗎?我覺得不是。至少問題沒有這麼簡單。

C++語言支持多種編程范式:面向過程、面向對象和范型程序設計。它所兼容C的部分,也正是支持面向過程的主要部分。有C語言的基礎,雖然有助於更快地掌握C++的面向過程部分,但由於C++語言本身也直接支持面向過程,因此我們完全可以從C++中直接學習面向過程程序設計,而無需先學C。至少理論上如此。

但話又要說回來。注意,提這個問題的大多是初學者。一般講解C++語言的教程,限於篇幅,面向過程部分無法與一本優秀的C語言教程相媲美。於是,真正的問題來了:直接從C++語言開始學習的初學者,他是否願意像C語言初學者那樣花大量的時間和精力,專門鑽研面向過程程序設計?

如果他不願,那麼他對面向過程部分的掌握,就難以跟一個扎扎實實學習過C語言的人相比。即使只討論“C++中的C”,結論也是一樣。但是,這裡我只是想強調這樣一個事實,而並非要下個“必需先學C”的結論。

我個人在初學C++語言時,覺得教程中學到的好多東西,包括面向對象程序設計,在實踐中無法運用自如。後來因工作需要,又去學習Java語言,一下子就對面向對象有了一種開竅的感覺。再使用C++寫程序時,發現OO起來也更順暢了,我的好幾位朋友也有過類似的感覺。究其原因,我想跟上面的分析的C語言的情況類似。C++的所支持的特性和編程范式更多,初學者很難快速消化全部。而Java在1.4之前,可以認為是純面向對象的。

這樣,使用Java寫程序時,我們被迫實踐面向對象編程,這就好比使用C寫程序,我們被迫實踐面向過程一樣。而直接使用C++寫程序,沒有什麼“被迫”,我們也就缺少了相應的“專項強化訓練”。並非所有的人都需要這種“專項強化訓練”,但對於初學者,面對著要掌握的復雜知識體系,它確實能起到“分而治之”的作用,從而促進對知識的消化和吸收。

還有人認為,學會了C++語言,自然就學會了C。而我認為這種觀點是經不起推敲。我們必需承認兩點:第一,C語言是有用的,這點不用多說,那麼多C語言構築起來的項目和復雜系統擺在那裡。雖然它沒有對包括面向對象在內的各種更抽象的編程范式提供直接支持,但事實早已證明它能解決復雜問題;第二,C++語言的設計者所設計的是一門新式的語言,而不僅僅是一個“更好用的C”。這就導致C++在繼承C語言的同時也要對它的各種特性做必要的揚棄。

  • 在C中引用C++語言中的函數和變量
  • 高級技術學者對C++代碼進行編制
  • 詳細說明C++編譯的編寫及其代碼問題
  • 闡述C++語言的各種編程技巧有關說明
  • 使用C++ Builder時注意問題學習探討

於是,就產生了很多這樣的情況:某種特性,在C語言中非常重要,但C++語言卻擁有一些新的特性來替代它,而且可能做得更好。這樣,原來C語言中的一些特性在C++語言中雖然還被兼容,卻被大大淡化,或不再提倡,甚至一些C++語言的教程中都不提那種特性。

這方面的例子很多,比如“宏”,C++中有太多可以在各種不同的場合取代宏的東西;再比如可變參數,還有對指針的一些復雜使用等等。這些東西在C語言中則非常重要,重要到成為C語言之所以“有用”的直接原因之一。因為這些原因,一個用慣了C++語言,而從沒單獨學習過C語言的人,如果有一天突然被要求去負責一個C語言項目,我不認為他就一定能輕松搞定。所以,我認為“學會C++,自然也就學會了C”的觀點是沒有道理的。

有人說過,“C語言是結構化的匯編”,沒錯,它的功能、效率和可移植性都很好地達到了它的設計初衷,它對現實項目中的各種問題也都有它獨特的解決方式,而同樣的解決方式在C++語言中卻未必是恰當的當然反之也成立)。換句話說,從解決實際問題的方式來看,這兩種語言誰也包含不了誰。但我們學習程序設計不就是為了解決實際問題嗎?那結論已經出來了:C++語言從語法上幾乎完全包含了C不代表它“真正”包含了C。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved