C++語言簡介

來源:互聯網
上載者:User
c++


    我們已看到用COM伺服器組件對於建立一個基於網路的應用程式的重要性,但問題不在於是否建立它們,而在於用什麼語言去建立。一種選擇是用C++。
    人們對C++有許多不同的看法,保守的C++程式員堅持用其他語言建立COM組件,他們認為只有真正的程式員使用C++。另一方面,VB程式員認為C++是一種很難掌握和使用的語言,沒有必要增加編程時間和進行艱難的嘗試。Java程式員認為他們比C++程式員強,因為James Gosling(Java的發明者)吸收了許多語言(包括C++ )的優點發明了Java,本章和下一章的目的就是消除對C++的偏見和錯誤概念。
    本章集中介紹用C++ 建立伺服器組件,不講述C++語言,如果想學C++ ,請參閱Ivor.Horton著的《Beginning Visual C++6》,Wrox 出版,書號為ISBN 1-861000-88-X。
    本章的主要內容有:
    ? C++簡史。
    ? 使用C++原因。
    ? 從VB移植到C++。
    ? ATL、STL和MFC介紹。
    ? 建立一個COM組件。
    ? 錯誤處理與調試。
    更重要的是應該記住,現在,不只是在用C++建立組件,可以使用Visual C++中可用的任何工具,使得建立過程更加容易。先從C++的起源談起。
17.1 C++語言
    在決定是否使用C++語言之前,最好是搞清楚這種語言的實質,讓我們看一下C++的曆史和現狀。
17.1.1 C++簡史
    剛開始形成的是C語言,那些想建立更快更有效代碼的程式員非常欣賞C語言,有一位名叫Bjarne Stroustrup的人卻不滿足於僅僅是生產快速代碼,他想建立物件導向的C語言編程。他開始對C語言的核心進行必要的修改,使其能滿足物件導向模型的要求。C++從此產生。
    Bjarne Stroustrup是C++的最初設計者和實現者。它自誕生以來,經過開發和擴充已成一種完全成熟的程式設計語言。現在C++已由ANSI、BSI、DIN、其他幾個國家標準機構和ISO定為標準。ISO標準於1997年11月4日經投票正式通過。
    C++標準演變了許多年。C++模板是近幾年來對此語言的一種擴充,模板是根據型別參數來產生函數和類的機制,有時也稱模板為“參數化類別型”。使用模板,可以設計一個對許多類型的資料進行操作的類,而不需要為每個類型的資料建立一個單獨的類。標準模板庫(Standard Tempalte Library,STL )和微軟的Active Template Library(Active Tempalte Library,ATL )都基於這個C++語言擴充。
    C++標準可分為兩部分, C++語言本身和C++標準庫。C++標準庫對於Visual C++是相當新的,實際上微軟只是在發布Visual C++ 5.0時去除了一些“bug”。標準庫提供了標準的輸入/輸出、字串、容器(如向量、列表和映射等)、非數值運算(如排序、搜尋和合并等)和對數值計算的支援。應該說, C/C++包含了相對少的關鍵字,而且很多最有用的函數都來源於庫,C++標準庫實現容器和演算法的部分就是STL。
    STL是資料結構和演算法的一個架構,資料結構包括向量、列表和映射等,演算法包括這些資料結構的尋找、拷貝和排序等。1994年7月,ANSI/ISO C++標準委員會投票決定接受STL為C++標準庫的一部分,這個建議是根據Alex Stepanov、Meng Lee和David Musser這三人的編程和軟體庫研究提出的。STL的產生是為了滿足通用性的設計目標,而不是為了提高效能。
    那麼微軟對C++標準的態度怎什麼樣?微軟運行VC++與Plum-Hall C++,想比較得到的分數在92%和93%之間。為什麼不是100%的一個原因是跟蹤這個標準並同時建立一個編譯器比較困難,微軟也考慮了對現有編碼相容的重要性,有時他們不得不偏離標準以保持這個相容性。
17.1.2 使用C++的原因
    應該有充分的理由使用C++建立伺服器組件,而不只是為了給上司一個好印象才使用C++。如果以前沒用過C++,你必須要儘力學習。
    1. 效能
    效能有個兩方面,演算法速度和機器代碼效率。一個演算法可以定義為資料通過系統的概念化的路徑,它描述一些點,在這些點上,資料能夠被操作並可轉換產生某個結果。例如,一個演算法定義為擷取一個字串,計算字串中的字元個數,並作為結果返回的過程。演算法與
語言是獨立的,所以在編程之前必須設計演算法,編寫一個快速程式的第一個步驟是設計良好的演算法,能以最少的操作步驟得出問題的答案。第二個步是選擇語言,這也影響程式的速度。
    從效能的角度考慮,用組合語言編寫程式是最佳的選擇,它是電腦能理解的自然語言。但是,幾乎沒有人用組合語言編寫完整的程式,因為這樣做極其乏味。另一個最佳的選擇是C語言。然而,由VC++提供的所有工具都產生C++,而不是C。使用VC++的嚮導可以產生大量的使用代碼,而不必人工地編寫代碼。從編寫程式的難易程度和程式的效能綜合考慮, C++是最佳的選擇。
    C++效能良好,因為它被編譯為機器代碼。對於VBScript和Java等語言,代碼在運行時由程式解釋,而且每次運行程式時都要將代碼轉換為機器碼,這樣做效率比較低,不僅僅是已編譯過的C++程式運行得較快,而且微軟C++編譯器已存在多年。這意味著微軟的編譯器程式員已經把許多優點集中到編譯器上,以致於它能產生非常高效的機器碼。因為C++是編譯語言,而且非常自然,比VB更接近機器代碼,所以由C++編譯器產生的代碼一定比VB的編譯代碼效率更高。
    2. 錯誤處理
    一個好的程式與一個偉大的程式的區別就是其是否具有良好的錯誤處理支援。實際上,如果在實現中首先進行錯誤處理,而不是在最後才進行,那麼整個程式的開發與測試過程會更加完美。但是,錯誤處理只能與語言所支援的內容相一致。
    VBScript具有基本的錯誤處理支援功能。在預設情況下,不能捕獲VBScript中的錯誤。每次懷疑產生錯誤時,要調用On Error Resume Next功能,並檢查Error對象。
    而C++中的錯誤處理比較好,這是因為有“異常處理”,本章的後面部分將詳細介紹。
    3. 最小的依賴性
    正如上面所說,C++是一種編譯語言,即C++代碼在執行之前已轉換為機器碼。只要此代碼不依賴於外部的動態連結程式庫(DLL),C++就可以在不需要安裝額外程式的情況下移動到運行同樣作業系統的其他機器和微處理器上,而移動Java程式時需要先安裝Java運行期庫。
    4. 利用現有的代碼
    由於C和C++已經存在許多年了,現在有許多可利用的代碼,你的伺服器組件可以使用現有的C/C++代碼或庫。例如統計庫和到老系統的C介面。
    5. 最大化COM特徵
    COM與C++很接近,實際上, Don Box(COM的權威)在他的《Essential COM》一書的第一章寫道:“COM就是更好的C++”。他說明了COM規範是如何從C++語言規律中產生出來的。通過理解C++,會對COM有更深的理解。
    某些語言不能利用所有的COM特徵,而在C++中,幾乎可以使用所有的COM特徵。
17.1.3 不使用C++的原因
    知道什麼時候使用C++是重要的,同樣,知道什麼時候不使用C++也是重要的。想像一下那些長期維護代碼的人,如果他們中沒有一些C++程式員支援C++,那麼開發人員們不得不把眼光轉向另外一些他們熟悉的語言。
    改變C++組件時,為了看到這些改變的結果,必須重新編譯該組件代碼,這會花費很長的開發時間。C++不能像ASP頁面代碼那樣,只使用記事本,改變代碼的一行,重新裝載而得到結果。因此,如果某些工作需要經常變化(如原型),不要用C++。
    在C++中,對一些致命的錯誤不能獲得更多的保護,寫一個使組件崩潰的代碼是很容易的。這是為了提供快速代碼而付出的代價, C++不會停下來去檢查代碼是否按設計運行能否使程式不崩潰依賴於開發人員的技巧。如果在這方面花的時間較少或剛剛學習C++,最好不要使用C++。等到已經意識到C++中所有容易犯的錯誤,而且在檢測組件之前花了許多時間,才可以使用C++,如果想很快、很容易地建立一個組件,而且也不考慮該組件的執行速度,那麼使用VB吧!
17.1.4 把ASP技巧轉到C++上
    學習新東西的最好方法就是利用現有的技巧。對於ASP開發人員來說,已經學習了C++所要求的許多技巧,特別是,JScript文法和ActiveX或COM的物件導向編程的概念。
    1. JScript
    大部分ASP開發人員都用JScript在瀏覽器上使用DHTML。JScript的文法與C非常相似,所以,如果懂得JScript,那麼就懂得基本的C文法。當然,只是C++文法的子集。C++有許多額外的文法來支援物件導向編程,這就是我們下一步要做的。
    2. 物件導向編程
    如果你在VB中使用過類(class),則對任何COM對象和文件物件模型(Document ObjectModel,DOM )都應熟悉,因為已經有了物件導向編程(OOP)的概念。在前面已經說過, C和C++的區別是C++支援物件導向編程。




相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.