關於C++的一些東西

如何學習c++及c++用途

聲明:本文並非原創,由於收藏的時間比較久了,具體網址我記不清了,還請作者見諒!

很多人把學習C++語言當成學習VC了,我曾經就走過這樣的彎路。當學了很長時間的VC後還是得回過頭來學習C++語言本身。

那麼學習C++從何處入手?

C++語言相對於C語言來說引入了兩個大的新東西,一個就是面向對象(具體來將就是類),另外就是模板技術(模板編程或者叫泛型編程是進來非常流行的技術,在C#中雖然還沒有對泛型編程的支持,但是相信在將來也一定會加入這一功能),模板是C++中比較複雜的部分,但是作爲一個真正的C++程序員,這部分很重要。尤其是對C++標準程序庫的掌握尤爲重要。剛開始的時候千萬不要直撲VC中的各種嚮導和設計器。因爲依賴開發環境生成的很多代碼會把我們搞糊塗,也不利於我們學習C++語言本身。我的建議就是生成一個空的控制檯工程,然後自己向裏面添加文件。如下就是一個簡單的控制檯程序:

//robindy/list.cpp
#include  <iostream>
#include  <list>
using namespace std;
int main()
{
list<char> coll;
for(char c = 'a'; c <= 'z'; ++c)
{
coll.push_back(c);
    }
    list::const_iterator pos;
    for(pos = coll.begin();pos != coll.end(); ++pos)
    {
        cout << *pos<< ' ';
    }
    cout << endl;
    return 0;
}


對using namespace std;的解釋:

所謂namespace,是指標識符的各種可見範圍。C++標準程序庫中的所有標識符都被定義於一個名爲std的namespace中。由於namespace的概念,使用C++標準程序庫的任何標識符時,可以有三種選擇:

1、直接指定標識符。例如std::ostream而不是ostream。完整語句如下:

std::cout << std::hex << 3.4 << std::endl;

2、使用using關鍵字。

    using std::cout;

    using std::endl;

以上程序可以寫成  cout << std::hex<<  3.4 << endl;

3、最方便的就是使用using namespace

   std;這樣命名空間std內定義的所有標識符都有效(曝光)。就好像它們被聲明爲全局變量一樣。那麼以上語句可以如下寫:

   cout << hex << 3.4 <<endl;

這段程序用到了標準模板庫,在屏幕上打印字符a~z,其中main函數的標記式只有兩種是被C++標準委員會接受的,只有以下兩種寫法是符合C++標準的,是可移植的。即:

int main()

{

}

int main(intargc, char* argv[])

{

}

C++在main()的末尾定義了一個隱式的return 0; 但是在VC中必須顯式的寫出return語句。在BCB中可以不寫return而編譯通過。

這段程序中用到了STL中的容器:鏈表。先是向鏈表中插入26個字母,然後從遍歷鏈表,輸出字符。我不建議初學者一開始就從模板庫入手,但是我建議應該逐漸地有意識地學習模板庫。如我們應該熟悉cout和cin的用法(位於iostream),而減少使用老式的C函數庫中printf和scanf等。從控制檯入手的好處就是避免我們理解VC中嚮導等工具生成的其他代碼,整個程序的流程很清楚。新手學習VC的一大難點就是搞不清楚整個程序的流程(從那條語句開始執行,然後從那條語句退出。MFC做了太多封裝,掩蓋了事實的真相,^_^)。通過控制檯我們可以很快地學習C++語言中的很多新特性。如類的封裝、繼承和多態等。通過這個時期的學習,要能夠掌握三個東西: C++關鍵字、語法(重點是和麪向對象有關的,以及模板)、C++標準程序庫(知道怎麼使用即可,要徹底掌握需要很多時間和精力)。至於與界面有關的東東(MFC中很大一部分是與界面相關的類,所以我認爲MFC很臃腫而無聊!回頭看過以前用MFC寫的程序,有一種“垃圾”的感覺。)

自己做個測試: 寫一個控制檯程序,在其中體現出類的繼承,函數重載,動態多態(通過虛函數實現),數據封裝,C++標準庫的運用。如果你能夠輕鬆搞定,恭喜你,你已經通過C++語言關了。不過C++實在是一個複雜的東東,其中有各種千奇百怪的語法現象,如果沒有三、五年的功力,千萬不要說自己懂C++。^_^。

推薦書籍《Thinking in C++》(有精力的話,可以直接讀原版) 《Essential C++》

本來我計劃繼續說說如何來進入C++世界的,但是琢磨了一下,覺得還是要先解決一個問題:爲什麼要學習C++?我覺得在軟件開發這個行當了裏除了爲了生計外,學習新東西都是應該以興趣爲導向的。所以撇開我個人對C++的偏愛,我想爲你樹立起學習C++的信心和興趣。當初我對自己學習C++的第一個忠告就是:不能半途而廢!起初是興趣驅動,後來則是生計所需,最後還是迴歸到了興趣。畢竟我從中得到了樂趣,這就足夠了。在學一個新東西前,解決動機問題很重要。就如同殺人一樣,如果只是突然興起,那麼等嘗試了以後,是沒有成就感的。革命先烈們爲我們作出了很好的榜樣,就算我們在學習C++的道路上遇到了太多困惑和痛苦,但是我們畢竟爲自己的信念做了努力,我們知道自己在做什麼,知道自己在追求什麼。

C++適合做什麼樣的開發?

C++是一門廣泛用於工業軟件研發的大型語言。具有很高的複雜性和解決問題的能力。C++不僅在開發上極具價值,同時在學術界也就有很高的價值。有關C++的文章應該可以用浩如煙海來形容了吧。C++的世界級經典書籍也是數不勝數。然而,目前開發語言是如此地繁榮,就連微軟也在推出了新的開發語言C#。一個不可否認的現實是,在低階程序設計領域,C++擠壓着C同時也在承受着C的強烈反彈,前段時間看了據說是微軟操作系統源代碼的東東,其中很多還是C語言。而在高階程序設計領域,Java和C#正在不斷蠶食着C++的地盤。也許Java和C#的狂潮終將迫使C++迴歸本位— 回到它有着根本性優勢的開發領域:低級系統程序設計、高級大規模高性能應用設計、嵌入式程序設計、通用程序設計以及數值科學計算等。果真如此,我認爲這未嘗不是一件好事。電力系統軟件所要求的高性能和大規模數值計算正是C++所擅長的。就我所接觸的南瑞和魯能,很多涉及到電力系統計算的軟件如PAS等,都是用C++來開發的。在電力系統軟件開發這塊陣地,C++大有用武之地。C++吸引如此之多的智力投入,以至於這個領域的優秀作品,包括重量級的軟件產品、程序庫以及書籍等,數不勝數。在C++之父Bjarne Stroustrup的個人主頁上,有一頁列出了一些(全部或大部分)使用C++編寫的系統、應用程序和庫。

下面是一些例子(摘自榮耀網站):

n  Adobe Systems:所有主要應用程序都使用C++開發而成,比如Photoshop & ImageReady、Illustrator和Acrobat等。

n  Maya:知道“蜘蛛人”、“指環王”的電腦特技是使用什麼軟件做出來的嗎?沒錯,就是Maya。

n  Amazon.com:使用C++開發大型電子商務軟件。

n  Apple:部分重要“零件”採用C++編寫而成。

n  AT&T:美國最大的電訊技術提供商,主要產品採用C++開發。

n  Google:Web搜索引擎採用C++編寫。

n  IBM:OS/400。

n  Microsoft:以下產品主要採用C++(Visual C++)編寫:

u  Windows XP Windows NT:NT4、2000 Windows 9x:95、98、Me Microsoft

u  Office:Word、Excel、Access、PowerPoint、OutlookInternet Explorer,包括Outlook Express

u  Visual Studio:Visual C++、Visual Basic、Visual FoxPro.NET Framework類庫採用C #編寫,但C#編譯器自身則使用C++編寫而成。Exchange SQL Server FrontPage Project

n  所有遊戲......

n  KDE:K Desktop Environment(Linux)。

n  Symbian OS:最流行的蜂窩電話OS之一。

很多新手特別容易會對自己所學習的東東產生疑惑、迷茫。覺得自己學這個東西,花了這麼多時間有沒有用,會不會過時?這種思想很普遍。在一些論壇上經常會看到一些各語言的優劣比較,知道自己所學語言的優劣也好,但是如果一味停留在這個層面就沒有用了。任何語言都只是工具而已。重要的是使用工具的人!就我個人的經驗來講,真正處於業界搞開發的人都願意使用成熟的、爲自己所熟知的技術來完成工作。而新手都喜歡用一些比較新的技術來做開發,而且喜歡追求新奇(從界面很容易看出來,花花綠綠的界面多半出自新手)。其實,安於用一些效率可能低下、擴展性和維護性差的方法來解決問題並不是開發人員的錯。他們只是在完成工作而已。但是作爲一個真正有上進心的開發人員,我們應該使用更優雅和高效的編程技術,這纔是我們逐漸變成編程“大牛”的好習慣。老是停留在原地,很容易被淘汰的。在軟件開發這個行當,尤其如此。無論是對學生,還是一線開發人員,我覺得都不應該產生“書讀夠了”的感嘆!我有時候喜歡將以前看過的書翻出來再看,每次總能體會到一些新東西。有關C++語言的書籍更是如此,而且我覺得我所起的題目不是很好。爲什麼?因爲我覺得學習語言還只是新手跨入軟件開發“地獄”的第一步,單單學習語言本身是遠遠不夠的,還要學習相關的程序庫(C++當然首選是先學習C++標準程序庫)、相關的平臺技術(如.NET),說得更遠一點,還要鍛鍊對目標問題的分析、歸納能力等等。工作之前,技術路線自己作主,工作之後,絕大多數程序員將被公司技術路線左右。所以,趁現在還有時間,可以學一些自己感興趣的。如果想搞軟件開發,特別是電力系統軟件的開發,學好C++不會令我們失望。當我們進入C++的前門,然後經過一段黑暗之路,再從後門出來到達光明頂後,我們會體味到“一覽衆山小”的感覺。

推薦書籍:

《編程高手箴言》樑肇新(用過超級解霸的都應該知道吧,^_^)寫的第一本書,其中有幾章還是值得一讀的。在這本書中,樑告訴我們,學東西要耐心,要耐得住“寂寞”,走自己的路,讓別人去“說”吧!

最近比較忙,原來打算緊扣主題講講一些具體的C++語言的細節的,但還是抽不出大段的時間了。所以,現在只能再漫談一些關於C++的故事了。

C++源於C語言,還記得很久以前學習C語言的時光(那是一段快樂而充實的時光),可是現在學習C++,並不是在C的基礎上加上了類而已,如果這樣認爲,我們是耍不好C++的。因此,C++絕不是C的升級或擴充,我們應該把C++當作一門新語言來學習(C++之父Bjarne Stroustrup語)。

寫程序首先希望是程序能正確執行,其次是效率能夠被接受,再次就是易於維護。C++是一個難學易用的語言。C++提供了太多可選擇的東西,而且使用使用C++來寫程序可以有四種思考模式:基於過程、基於對象、面向對象和泛型。我們使用一種語言來寫程序,並不意味着就是使用語言本身,換句話說,我們更多的時候是使用程序庫在寫程序。比如 MFC、STL、ATL、VCL等等。其中要使用C++來寫出結構優美、性能卓越、代碼簡潔、易於維護的代碼,首推C++標準程序庫。STL對效率做了嚴格的要求,而且使用STL寫出來的程序簡潔美觀(前段時間我特意貼了一個要求對若干整數進行排序的帖子,其實目的就是用來展示STL的簡潔優雅)。一旦習慣使用泛型思維來考慮問題,我們能夠充分體會到模板帶來的美!對於數值計算來說,C++標準程序庫可以充分滿足現代化服務和商業計算對數據、信息的即時迴應的要求。

我覺得學好一門語言最重要的就是實踐。也就是多“寫”!“工程經驗之積累”對已具有一段開發時間的程序員而言,非常重要!只有在不斷的積累中,我們才能漸漸體會到C++語言中的一些背後的東西。對於這點,沒有大量程序代碼寫作經驗的菜鳥,也可以藉助《Effective C++》先攢一些經驗值。《EffectiveC++》是一本好書!。Meyers的書絕對值得一讀,Meyers可以說當今C++社羣中數一數二的技術專家。

發佈了33 篇原創文章 · 獲贊 41 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章