程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 程序寶典:C++學習感想

程序寶典:C++學習感想

編輯:C++入門知識
在一些論壇上經常會看到一些各語言的優劣比較,知道自己所學語言的優劣也好,但是假如一味停留在這個層面就沒有用了。任何語言都只是工具而已。重要的是使用工具的人!就我個人的經驗來講,真正處於業界搞開發的人都願意使用成熟的、為自己所熟知的技術來完成工作。 <!-- frame contents --> <!-- /frame contents --> 而新手都喜歡用一些比較新的技術來做開發,而且喜歡追求新奇(從界面很輕易看出來,花花綠綠的界面多半出自新手)。其實,安於用一些效率可能低下、擴展性和維護性差的方法來解決問題並不是開發人員的錯。他們只是在完成工作而已。但是作為一個真正有上進心的開發人員,我們應該使用更優雅和高效的編程技術,這才是我們逐漸變成編程“大牛”的好習慣。老是停留在原地,很輕易被淘汰的。在軟件開發這個行當,尤其如此。無論是對學生,還是一線開發人員,我覺得都不應該產生“書讀夠了”的感歎!我有時候喜歡將以前看過的書翻出來再看,每次總能體會到一些新東西。有關C++語言的書籍更是如此,而且我覺得我所起的題目不是很好。為什麼?因為我覺得學習語言還只是新手跨入軟件開發“地獄”的第一步,單單學習語言本身是遠遠不夠的,還要學習相關的程序庫(C++當然首選是先學習C++標准程序庫)、相關的平台技術(如.NET),說得更遠一點,還要鍛煉對目標問題的分析、歸納能力等等。工作之前,技術路線自己作主,工作之後,絕大多數程序員將被公司技術路線左右。所以,趁現在還有時間,可以學一些自己感愛好的。假如想搞軟件開發,非凡是電力系統軟件的開發,學好C++不會令我們失望。當我們進入C++的前門,然後經過一段黑暗之路,再從後門出來到達光明頂後,我們會體味到“一覽眾山小”的感覺。 
  
  推薦書籍:  
  
  《編程高手箴言》---------- 梁肇新(用過超級解霸的都應該知道吧,^_^)寫的第一本書,其中有幾章還是值得一讀的。在這本書中,梁告訴我們,學東西要耐心,要耐得住“寂寞”,走自己的路,讓別人去“說”吧!
  
  最近比較忙,原來打算緊扣主題講講一些具體的C++語言的細節的,但還是抽不出大段的時間了。所以,現在只能再漫談一些關於C++的故事了。
  
  C++源於C語言,還記得很久以前學習C語言的時光(那是一段快樂而充實的時光),可是現在學習C++,並不是在C的基礎上加上了類而已,假如這樣認為,我們是耍不好C++的。因此,C++絕不是C的升級或擴充,我們應該把C++當作一門新語言來學習(C++之父Bjarne Stroustrup語)。 更多內容請看C/C++技術專題  C/C++進階技術文檔專題,或 寫程序首先希望是程序能正確執行,其次是效率能夠被接受,再次就是易於維護。C++是一個難學易用的語言。C++提供了太多可選擇的東西,而且使用使用C++來寫程序可以有四種思考模式:基於過程、基於對象、面向對象和泛型。 <!-- frame contents --> <!-- /frame contents --> 我們使用一種語言來寫程序,並不意味著就是使用語言本身,換句話說,我們更多的時候是使用程序庫在寫程序。比如MFC、STL、ATL、VCL等等。其中要使用C++來寫出結構美麗、性能卓越、代碼簡潔、易於維護的代碼,首推C++標准程序庫。STL對效率做了嚴格的要求,而且使用STL寫出來的程序簡潔美觀(前段時間我特意貼了一個要求對若干整數進行排序的帖子,其實目的就是用來展示STL的簡潔優雅)。一旦習慣使用泛型思維來考慮問題,我們能夠充分體會到模板帶來的美!對於數值計算來說,C++標准程序庫可以充分滿足現代化服務和商業計算對數據、信息的即時回應的要求。
  
  我覺得學好一門語言最重要的就是實踐。也就是多“寫”!“工程經驗之積累”對已具有一段開發時間的程序員而言,非常重要!只有在不斷的積累中,我們才能漸漸體會到C++語言中的一些背後的東西。對於這點,沒有大量程序代碼寫作經驗的菜鳥,也可以借助《Effective C++》先攢一些經驗值。《Effective C++》是一本好書!。Meyers的書絕對值得一讀,Meyers可以說當今C++社群中數一數二的技術專家。  
  
  推薦網站:www.royaloo.com
  
  C++提供了操作符new來在堆上分配內存,操作符delete來釋放內存。有些情況下,我們需要對內存的分配和釋放進行更好的控制。許多程序創建和釋放一些重要類的大量的對象,如tree nodes,linked lists links,points,lines,messages,etc.使用通用的內存分配器如new和delete來進行這些對象的分配和釋放有時將支配程序的運行時間和內存需求。  
  
  
  兩方面的因素:通用內存分配操作的運行和空間的耗費以及不同對象大小引起的內存碎片。類使用定制的內存分配器將加快模擬器、編譯器和類似程序的執行速度。
  
  例外一種需要更好的內存控制的情況是:需要在有限資源的情況下長時間不間斷運行的程序。實時系統經常需要用最少的耗費來獲取有保證的可預期的內存。這也就導致了更好的內存控制的需要。一般來說,這些程序都避免使用動態的內存分配,而使用非凡目的的內存分配器來治理有限資源。
  
  此外,還有一些情況下由於硬件或系統的要求,需要將對象放在指定的內存位置。這也需要進行定制的內存治理(通過重載new來加以實現)。 更多內容請看C/C++技術專題  C/C++進階技術文檔專題,或 在C++ Release 2.0中,為了滿足以上需求,內存治理機制做了相應的修改。主要是引進了operator new [] 和 operator delete []。  
  
  new操作符的作用范圍(Scope for operator new Functions)
  
   <!-- frame contents --> <!-- /frame contents -->   操作符(Operator) 范圍(Scope)
  
  ::operator new Global
  
  class-name::operator new Class   
  
  operator new的第一個參數必須是類型size_t(在STDDEF.H中定義的類型),返回類型
  
  為void *。
  
  當分配內建(built-in)類型的對象、未包含用戶自定義的new操作符函數的類對象、任何類型的數組時,使用全局new操作符函數。當在類中自定義new操作符時,分配該類對象的內存時,調用該類的new操作符。如下: 
  
  #include
  #include
  class Blanks
  {
  public:
  Blanks(){}
  void *operator new( size_t stAllocateBlock, char chInit );
  };
  void *Blanks::operator new( size_t stAllocateBlock, char chInit )
  {
  void *pvTemp = malloc( stAllocateBlock );
  if( pvTemp != 0 )
  memset( pvTemp, chInit, stAllocateBlock );
  return pvTemp;
  }
  int main()
  {
  Blanks *a5 = new( 0xa5 ) Blanks;//創建對象Blanks,並且初試化為0xa5
  return a5 != 0;
  } 更多內容請看C/C++技術專題  C/C++進階技術文檔專題,或 new操作符可以重載,而delete卻不行。因為等到需要釋放的時候,我們所能得到的就是一個指針。而且該指針可能不是原先的對象類型指針(有可能進行了類型轉換)。實際上,當使用new獲得一個指向一片內存的指針時,在該片內存前有一個指示器(indicator),記錄實際分配的內存數量。 <!-- frame contents --> <!-- /frame contents --> 當調用delete時,可以獲知需要釋放的內存大小。數組的釋放(Deallocating Arrays): 
  
  void f( )
  {
  X* p1 = new X[10];
  //...
  delete [] X;
  }
  
  為什麼不使用delete [10] X;來釋放內存?Bjarne Stroustrup稱這種做法輕易導致錯
  
  誤,而將記錄元素個數的任務放在delete的實現中了。
  
  至於為什麼C++中未內建垃圾收集器(Garbage Collection)的原因,看《C++語言的設計和演化》(En) Bjarne Stroustrup 機械工業出版社(俗稱:D&E)可以得到答案。
  
  
  此外,C++標准庫中提供了一種智能型指針auto_ptr,這種指針可以幫助我們防止“被異常拋出時發生資源洩漏”。但是缺點是該智能型指針不能指向數組,因為其內部釋放內存是通過delete而非delete [] 來進行的。所以,只能使用其來指向一個單個對象。
  
  模板部分是C++中比較難的部分,也是C++的魅力所在。以下文字是我以前看過的,具體出處不清楚了。今天稍微整理了一下,作為模板介紹的一個單元。 更多內容請看C/C++技術專題  C/C++進階技術文檔專題,或
 
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved