⑴ 《程序員面試金典(第5版)》epub下載在線閱讀全文,求百度網盤雲資源
《程序員面試金典(第5版)》([美]GayleLaakmannMcDowell)電子書網盤下載免費在線閱讀
鏈接: https://pan..com/s/13iXMFa3SS14p1obKirfGDw
書名:程序員面試金典(第5版)
豆瓣評分:8.9
作者:[美]GayleLaakmannMcDowell
出版社:人民郵電出版社
原作名:Cracking the coding interview:150 programming questions and solutions,fifth edition
譯者:李琳驍/漆犇
出版年:2013-11
頁數:372
內容簡介:
本書是原谷歌資深面試官的經驗之作,層層緊扣程序員面試的每一個環節,全面而詳盡地介紹了程序員應當如何應對面試,才能在面試中脫穎而出。第1~7 章主要涉及面試流程解析、面試官的幕後決策及可能提出的問題、面試前的准備工作、對面試結果的處理等內容;第8~9 章從數據結構、概念與演算法、知識類問題和附加面試題4 個方面,為讀者呈現了出自微軟、蘋果、谷歌等多家知名公司的150 道編程面試題,並針對每一道面試題目,分別給出了詳細的解決方案。
本書適合程序開發和設計人員閱讀。
作者簡介:
Gayle Laakmann McDwell
美國求職咨詢網站CareerCup.cm創始人兼CE,是一位著名軟體工程師,曾在微軟、蘋果與谷歌任職。早先,她自己就是一位十分成功的求職者,成功通過了微軟、谷歌、亞馬遜、蘋果、IBM、高盛等多家最著名企業極其嚴苛的面試過程。工作以後,她又成為一位出色的面試官。在谷歌任職期間,她還是該公司資深面試官及招聘委員會成員,期間閱人無數,積累了相當豐富的面試經驗。除此書外,還著有《金領簡歷:敲開蘋果、微軟、谷歌的大門》。
譯者簡介:
李琳驍
從事嵌入式Linux內核/驅動開發,關注IT、開放源碼和安防監控等領域。業余時以技術翻譯為樂,時而客串編輯,好為愛書挑錯,渴求完美,卻也常因「小」失大,不得讀書要領。翻譯或參與翻譯了《Linux命令詳解手冊》《編程人生》《編程大師訪談錄》等圖書。網路ID為leal,管理Vim、Andrid等豆瓣小組,個人站點:http://linxia.net。
漆犇
畢業於中國地質大學,擁有十餘年軟體開發、測試及流程管理經驗,曾翻譯出版了《Linux/Unix設計思想》《金領簡歷 : 敲開蘋果、微軟、谷歌的大門》等書。目前定居於美國西雅圖,在微軟Windws Phne開發中心從事與WP應用開發者相關的項目管理事務。
⑵ 本人正在學C和C++,但不知道C和C++都可以干點什麼,
這些書都很不錯。 轉載自博客 斑駁盛夏' Blog 原文地址: http://vir56k.blog.hexun.com/6105839_d.html (一)語言入門: 《 C++ Primer》 最新版本:第三版(第四版國外已上架,國內一些網上書店也在預訂中) 適合有豐富C經驗,缺乏 C++ 經驗的。不過我個人一直認為此書帶著過於強烈的C語言的痕跡,對於 C++ 的學習未必是好事。 《The C++ Programming Language》/《 C++ 程序設計語言》 最新版本:第三版特別版 簡稱T C++ PL,有其他語言的豐富經驗的。(也有人簡稱之為「TCPL」,但需與另一本《The C Programmer Language》區分開來) 《Essential C++ 》 《Accelerated C++ 》 這兩本薄一些,都是不錯的選擇。《Accelerated C++ 》本人沒有讀過,從各方面的評價來看,完全值得 推薦 。 以上幾本書都有相應的中文版,而且翻譯的質量都不錯。上面的書未必都需要讀一遍,但無論如何,T C++ PL是應該閱讀的。 (二)進階A: 這個路線側重於語言本身 《Effective C++ 》 最新版本:第二版(第三版國外已上架,國內一些網上書店也在預訂中) 簡稱EC。 C++ 程序員必讀!很多時候,我們說 C++ 聖經不是指T C++ PL,而是這一本。《The Pragmatic Programmer》一書中寫到:「一旦你發現自己要參與 C++ 項目的開發,趕快跑(不要走)到書店去購買Scott Mayer的《Effective C++ 》,可能還要《More Effective C++ 》」。 《 C++ Coding Standards: 101 Rules, Guidelines, and Best Practices》/《 C++ 編程規范》 個人認為此書應為 C++ 程序員必備的案頭書。幾乎Effective系列和Exceptional系列都在這里得到了總結。最新的模版、異常的業界經驗都在這里的到了體現。可能的唯一缺陷就是對一個新手而言,關於「為什麼這么做」的問題,解釋的不夠。 我的看法是:如果你不理解其中的條款,記憶,並且照做;如果你理解其中的條款,我猜你一定會同意書中的觀點。我認為這本書中的內容至少在2009年以前都不會過時,人們將廣為傳誦它制定的101條戒律。 還不知道他的簡稱,也許「101」會成為一個候選者? 提到《Effective C++ 》,那麼另外三本書一一浮出水面: 《More Effective C++ 》 《Exceptional C++ 》 《More Exceptional C++ 》。 新書《Exceptional C++ Style》也是值得一看的好書。 上述幾本書,一本也不應該放過。 個人建議上述 書籍 按順序閱讀。並且,在將來反復閱讀這幾本書。 (三)進階B: 這個路線側重於程序庫。 《The C++ Standard Library》/《 C++ 標准程序庫—自修教程與參考手冊》 聽說過STL嗎?這本書會教你最基本的,也是最重要的STL的使用。這本書,應該是必讀的。 《Effective STL》 會使用STL還不夠,還必須知道什麼時候選擇什麼STL組件,這是STL使用的必讀書。 《Generic Programming and the STL: Using and Extending the C++ Standard Template Library》/《泛型編程與STL》。 這本書理論性較強,但是真的很嚴謹,而且並不是非常難懂。理解其中對於Concept的解釋,將是非常重要的。 《 C++ STL》 這不是講述使用程序庫的,而是講述程序庫實現原理的。腸胃不好的,需要慢慢吸收。 這個路線的書,仍然是建議按順序閱讀。 進階A、進階B兩個路線應該是可以並行的。 其他進階參考書 提出這些參考書,只是避免爭議,也為開闊視野,筆者並不曾完全讀過所有的。 《Thinking in C++ 》/《 C++ 編程思想》 這本書及其中文版傳言好壞都有,沒有認真看過,不做評價,如果確有興趣,不妨嘗試一下該書。 以下幾本書基本上涉及的都是語言本身,大體上可以按照以下的順序閱讀。 《 C++ 必知必會》 如果早一年,這本書將是重量級的,然而它被101和《Exceptional C++ Style》蓋過一頭。 《 C++ Gotchas: Avoiding Common Problems in Coding and Design》/《 C++ 程序設計陷阱》 這又是一本我未曾讀過,而且廣受好評的書。 《STL 源碼剖析》 這本書我剛到手,就被人"借"走,以至於到現在也沒有看過。看過這本書的朋友,可以給一個合適的評價。 高級: 《The Design and Evolution of C++ 》/《 C++ 語方的設計和演化》 簡稱D&E,內容並不艱深,Bjarne的書,僅此,就值得一讀。 前段時間,互動網曾8塊一本(人民幣)賤賣此書,現在好像沒了。 《Inside The C++ Object Model》/《深度探索 C++ 對象模型》 C程序員讀後一定會覺得 C++ 原來並不神秘。 《 C++ Template》 在閱讀STL、Boost或者Loki的源代碼之前,請仔細閱讀本書,它可以減輕一些閱讀的煩惱。這本書是討論 C++ 模版的權威。 《Modern C++ Design Generic Programming and Design Patterns Applied》/《 C++ 設計新思維——泛型編程與設計模式之應用》 簡稱MCD。在閱讀MCD之前,建議先閱讀一下《 C++ Template》。 《對象揭秘:Java、Eiffel和 C++ 》 你對 C++ 不滿嗎?這本書可以部分地幫你完成抱怨的目標。也許它還可以讓你不迷信 C++ 。 最後,一份 C++ 標准文檔也是應該加以咀嚼的。 還有一些 書籍 ,並不能簡單的歸於 C++ ,也難以在純粹的書本學習中加以掌握。《Design Patterns》/《設計模式》一書就歸於此類。 所有上述的 書籍 ,要麼談論 C++ 語言本身,要麼談論STL的,要麼兼而有之(當然嚴格講STL也是 C++ 語言非常重要的一部分)。偶爾,某些書中條目也會涉及實際工程。這些書並不是 C++ 軟體開發的全部,但是他們很重要。閱讀這些書,未必需要化費太多的精力,有時候是會困難,但也有時候會很快速。 最後,編程語言並非計算機科學技術的全部,尤其對於在校的學生來說,打好基礎、開闊視野都是非常重要的。
⑶ 想學好c++語言有什麼辦法例如看什麼書學會那些軟體
C++學習之路
(一)語言入門:
《C++ Primer》
最新版本:第三版(第四版國外已上架,國內一些網上書店也在預訂中)
適合有豐富C經驗,缺乏C++經驗的。不過我個人一直認為此書帶著過於強烈的C語言的痕跡,對於C++的學習未必是好事。
《The C++ Programming Language》/《C++程序設計語言》
最新版本:第三版特別版
簡稱TC++PL,有其他語言的豐富經驗的。(也有人簡稱之為「TCPL」,但需與另一本《The C Programmer Language》區分開來)
《Essential C++》
《Accelerated C++》
這兩本薄一些,都是不錯的選擇。《Accelerated C++》本人沒有讀過,從各方面的評價來看,完全值得推薦。
以上幾本書都有相應的中文版,而且翻譯的質量都不錯。上面的書未必都需要讀一遍,但無論如何,TC++PL是應該閱讀的。
(二)進階A:
這個路線側重於語言本身
《Effective C++》
最新版本:第二版(第三版國外已上架,國內一些網上書店也在預訂中)
簡稱EC。C++程序員必讀!很多時候,我們說C++聖經不是指TC++PL,而是這一本。《The Pragmatic Programmer》一書中寫到:「一旦你發現自己要參與C++項目的開發,趕快跑(不要走)到書店去購買Scott Mayer的《Effective C++》,可能還要《More Effective C++》」。
《C++ Coding Standards: 101 Rules, Guidelines, and Best Practices》/《C++ 編程規范》
個人認為此書應為C++程序員必備的案頭書。幾乎Effective系列和Exceptional系列都在這里得到了總結。最新的模版、異常的業界經驗都在這里的到了體現。可能的唯一缺陷就是對一個新手而言,關於「為什麼這么做」的問題,解釋的不夠。
我的看法是:如果你不理解其中的條款,記憶,並且照做;如果你理解其中的條款,我猜你一定會同意書中的觀點。我認為這本書中的內容至少在2009年以前都不會過時,人們將廣為傳誦它制定的101條戒律。
還不知道他的簡稱,也許「101」會成為一個候選者?
提到《Effective C++》,那麼另外三本書一一浮出水面:
《More Effective C++》
《Exceptional C++》
《More Exceptional C++》。
新書《Exceptional C++ Style》也是值得一看的好書。
上述幾本書,一本也不應該放過。
個人建議上述書籍按順序閱讀。並且,在將來反復閱讀這幾本書。
(三)進階B:
這個路線側重於程序庫。
《The C++ Standard Library》/《C++標准程序庫—自修教程與參考手冊》
聽說過STL嗎?這本書會教你最基本的,也是最重要的STL的使用。這本書,應該是必讀的。
《Effective STL》
會使用STL還不夠,還必須知道什麼時候選擇什麼STL組件,這是STL使用的必讀書。
《Generic Programming and the STL: Using and Extending the C++ Standard Template Library》/《泛型編程與STL》。
這本書理論性較強,但是真的很嚴謹,而且並不是非常難懂。理解其中對於Concept的解釋,將是非常重要的。
《C++ STL》
這不是講述使用程序庫的,而是講述程序庫實現原理的。腸胃不好的,需要慢慢吸收。
這個路線的書,仍然是建議按順序閱讀。
進階A、進階B兩個路線應該是可以並行的。
其他進階參考書
提出這些參考書,只是避免爭議,也為開闊視野,筆者並不曾完全讀過所有的。
《Thinking in C++》/《C++編程思想》
這本書及其中文版傳言好壞都有,沒有認真看過,不做評價,如果確有興趣,不妨嘗試一下該書。
以下幾本書基本上涉及的都是語言本身,大體上可以按照以下的順序閱讀。
《C++必知必會》
如果早一年,這本書將是重量級的,然而它被101和《Exceptional C++ Style》蓋過一頭。
《C++ Gotchas: Avoiding Common Problems in Coding and Design》/《C++程序設計陷阱》
這又是一本我未曾讀過,而且廣受好評的書。
《STL 源碼剖析》
這本書我剛到手,就被人"借"走,以至於到現在也沒有看過。看過這本書的朋友,可以給一個合適的評價。
高級:
《The Design and Evolution of C++》/《C++語方的設計和演化》
簡稱D&E,內容並不艱深,Bjarne的書,僅此,就值得一讀。
前段時間,互動網曾8塊一本(人民幣)賤賣此書,現在好像沒了。
《Inside The C++ Object Model》/《深度探索C++對象模型》
C程序員讀後一定會覺得C++原來並不神秘。
《C++ Template》
在閱讀STL、Boost或者Loki的源代碼之前,請仔細閱讀本書,它可以減輕一些閱讀的煩惱。這本書是討論C++模版的權威。
《Modern C++ Design Generic Programming and Design Patterns Applied》/《C++設計新思維——泛型編程與設計模式之應用》
簡稱MCD。在閱讀MCD之前,建議先閱讀一下《C++ Template》。
《對象揭秘:Java、Eiffel和C++》
你對C++不滿嗎?這本書可以部分地幫你完成抱怨的目標。也許它還可以讓你不迷信C++。
最後,一份C++標准文檔也是應該加以咀嚼的。
還有一些書籍,並不能簡單的歸於C++,也難以在純粹的書本學習中加以掌握。《Design Patterns》/《設計模式》一書就歸於此類。
所有上述的書籍,要麼談論C++語言本身,要麼談論STL的,要麼兼而有之(當然嚴格講STL也是C++語言非常重要的一部分)。偶爾,某些書中條目也會涉及實際工程。這些書並不是C++軟體開發的全部,但是他們很重要。閱讀這些書,未必需要化費太多的精力,有時候是會困難,但也有時候會很快速。
最後,編程語言並非計算機科學技術的全部,尤其對於在校的學生來說,打好基礎、開闊視野都是非常重要的。
================================================================
c++書籍推薦
第一篇
一些同學問我,如何學好C++,我沒有別的辦法給你們,唯一的辦法就是讀書,讀大量的書,就可以解決。要把C++作為日常語言,而不是一種程序語言,這樣就好辦了。
有人又要問我,那麼我應該讀什麼書才好?沒有時間怎麼辦?
我只能對你們說,沒時間的話,就別學C++了,做你們喜歡做的事。生活中沒有C++,也同樣美好。
如果你准備學,一定要學好,那麼我開個書單,應該問題不是甚大。
首先肯定要讀一讀Bjarne Stroustrup的The Design and Evolution of C++,了解一下這個語言的歷史。接下來就可以看別的書了,但要不停地回頭看這本書,看到你不斷地學到的新技術是怎麼樣一點點地被接納到這個語言中去的。
第一本書因人而異,基礎好一些的,可以看Stanley B. Lippman的C++ Primer,這本書非常地巨大,你打星號的部分可以不要看。基礎不太好的,可以看Stanley B.Lippman的Essential C++,這本書份量要輕得多,不過四個C++的范型都講了,而且講得非常清楚。
第二本應該停止技術層面的東西,靜下心來看看Pike和Kernighan的The Practiceof Programming,好好地整理一下,在程序設計中應該有哪些注意的事項。這本非常薄的booklet,可以說是程序員必讀的指南。
第三本書,就應該是Bruce Eckel寫的、候捷譯的Thinking in C++,這本書每過半年我就要重讀一遍。可以說每一章都是寫得發人深省的,這本書讓我感覺到了技術運用的非常高的境界,但是語言非常平實,只要認真地讀,即使基礎不行,也一定可以懂。我在教課的時候,就是用這本書(面對的學生是零基礎)。
要更上一層的話,就要慢一步,先要把握C++設計習慣的良好。這是Scott Meyers的Effective C++和More Effective C++帶給我們的無盡收益。我More Effective C++買不起,只好花了10塊錢復印裝訂了一本"線裝本",看起來像葵花寶典(;-))。這兩本書是真正的經典,作者對C++的純熟,使得語言的風格讀起來簡直是如飴甘甜,就像他站在對面在講課。我手中有這兩本書的原版CD,如果有興趣,可以發E-mail到[email protected]或在飲水思源投條兒給gaobo索要,只要您提供光碟我就給免費燒。如果你已經深刻地理解了Effective C++和More Effective C++,那你可以發現,你在眾人中已經是雞群之鶴。可以指導項目運作了,可以編寫一切你想做的程序了,可以指出別人看起來不錯的代碼的大小問題了。如果你能一眼看出有人的代碼是對應於"條款27"或"條款M6",那你可真是讓本人刮目了。
我已經講了,如果要寫程序,EC++和MEC++的境界已經足以使你自如應付,可是如果你還不滿足,想關注一些理論層面的問題,或是想看看實現的代碼,你就不應該錯過這幾本好極了的書。我是說Herb Sutter的Exceptional C++和More Exceptional C++,這兩本書的難度是非常大的,我對每一條的閱讀筆記都是十多頁。特別是泛型程序設計的部分,這兩本書旁徵博引,極盡深入探討之能事,每每看懂一條,都抹汗一次,大感酣暢淋漓;還有侯捷的STL源碼剖析,以實際的例子一點點地講解一個STL是怎麼樣實現的,我是剛開始讀,不發表評論;而Stanley B. Lippman,Cfront的實現者之一,執筆寫出Inside the C++ Object Model,我只有一個字,就是基本帥呆了。我從中了解了無數的編譯器解釋源代碼的細節,以及記憶體分配的細節,呵呵,這些都知道了,我還怕什麼呢?最近得到了另一Cfront實現者、C++標准委員會Koenig的C++沉思錄,看起來非常不錯,這里也推薦給大家,但我也沒看完,亦無發言權。
最後最後,你們,未來的C++理論家們,可要記住,Bjarne Stroustrup的The C++ Programming Language無論如何也應該讀個四五遍!這是一切C++的書本的源泉。如果還覺得不夠,就向C++標准委員會訂購一本C++標准。
一切中國大陸作者的書,一概不要看(包括我的)。一切VC++或講特定的編譯器的書,一概不要看。如果需要補C語言的課,買一本非常小的K&R的The C Programming Language足矣,其它的書一概不要看。不要先學C,再學C++,而要直接學C++。你不是先學古文,再學白話的,對不對?所以相信我,直接來更容易。
以上文字,皆為原創,本人願意為每個字負責。
第二篇
好久未來C板了,原因這段時間一直在研究兩本書,看得自己不敢多說一句話。
1、《Effective STL》
訂購:http://www.cnforyou.com/query/bookdetail.asp?viBookCode=8537
作者:Scott Meyers
出版社:中國電力出版社
一開始欺負這本書比較薄,想快點看完,但不久就發現自己已經翻不動了。直到看完最後一個字,才發現一個基本的事實:薄的不是這本書,而是自己的見識。
有關STL的書也讀了不少,正如讀《Effective C++》以前,有關C++的書也讀了不少。Meyers的書總是給人一種脫胎換骨的提升感覺,他總能在大家以為老生常談的地方挖出意想不到的新意,並指出一些一般人習以為常的東西其實存在種種危機,或是在一些看來完全等價的選擇中,為特定的場合選擇最有效的(Most Effective)那一種。而且他的切入口總是讓人看得懂的(不像Stroustrup的書,
第一句話就要琢磨半天),但是他總是會選擇幾個拓展點,並把它們分析得淋漓盡致,這時候就需要一段代碼一段代碼甚至是語句粒度地閱讀了——當然,最後總是看得懂,這和讀者的閱讀程度總是正比,這會給人極大的成就感。可以說,在STL
實踐的書籍,無書可出其右(當然在STL實作方面,我還是要向大家推薦侯捷的《STL源碼剖析》)。
讀完這本書後,和Pascal就產生明顯的距離感了。這里我仍然要說:請熱愛
Delphi!我還是更願意寫「var s:set of char;」而不是
「set <char*, less<char*>, allocator<char*> > s」,;-)。
2、《Modern C++ Design》
訂購(中文):http://www.cnforyou.com/query/bookdetail.asp?viBookCode=8184
訂購(影印):http://www.cnforyou.com/query/bookdetail.asp?viBookCode=8319
作者:Andrei Alexandrescu
譯者:侯捷、於春景
出版社:華中科技大學出版社(中文)
中國電力出版社(影印)
讀完這本書的第一頁,我就知道自己放不下它了,但我也知道,我的苦難經歷又要多上一筆了。用C++實作設計模式,已經是骨灰級的難度,但這本書明顯還在講一個template的對象模型的問題,這在我讀《Inside the C++ Object Model》時是屢攻不下的難點。不過,出乎意料的是這本書居然使我具有一些概念了,而且動手寫出了一個SmartPointer。
這本書我還遠不能說我讀懂了,但是確乎是讀完了。如果你還沒有讀過對象模型和設計模式的書,我認為需要讀一讀。否則,直接看這本書根本就是受罪。最近,有一些朋友也注意到設計模式的重要性了,可能從明年起我在《電腦報》上要發表一些文章,屆時請朋友們指教吧。
另外就是Effective C++點評繼續寫,我現在覺得更惶恐,但是信心也更足了。
⑷ 什麼是OpeenGL
OpenGL目錄
概述
Open GL現狀
高級功能
OpenGL編程入門
OpenGL與DirectX的區別
概述
OpenGL - 高性能圖形演算法行業標准
OpenGL™ 是行業領域中最為廣泛接納的 2D/3D 圖形 API, 其自誕生至今已催生了各種計算機平台及設備上的數千優秀應用程序。OpenGL™ 是獨立於視窗操作系統或其它操作系統的,亦是網路透明的。在包含CAD、內容創作、能源、娛樂、游戲開發、製造業、制葯業及虛擬現實等行業領域中,OpenGL™ 幫助程序員實現在 PC、工作站、超級計算機等硬體設備上的高性能、極具沖擊力的高視覺表現力圖形處理軟體的開發。
OpenGL(全寫Open Graphics Library)是個定義了一個跨編程語言、跨平台的編程介面的規格,它用於三維圖象(二維的亦可)。OpenGL是個專業的圖形程序介面,是一個功能強大,調用方便的底層圖形庫。OpenGL的前身是SGI公司為其圖形工作站開發的IRIS GL。IRIS GL是一個工業標準的3D圖形軟體介面,功能雖然強大但是移植性不好,於是SGI公司便在IRIS GL的基礎上開發了OpenGL。OpenGL的英文全稱是「Open Graphics Library」,顧名思義,OpenGL便是「開放的圖形程序介面」。雖然DirectX在家用市場全面領先,但在專業高端繪圖領域,OpenGL是不能被取代的主角。
OpenGL是個與硬體無關的軟體介面,可以在不同的平台如Windows 95、Windows NT、Unix、Linux、MacOS、OS/2之間進行移植。因此,支持OpenGL的軟體具有很好的移植性,可以獲得非常廣泛的應用。由於OpenGL是圖形的底層圖形庫,沒有提供幾何實體圖元,不能直接用以描述場景。但是,通過一些轉換程序,可以很方便地將AutoCAD、3DS/3DSMAX等3D圖形設計軟體製作的DXF和3DS模型文件轉換成OpenGL的頂點數組。
在OpenGL的基礎上還有Open Inventor、Cosmo3D、Optimizer等多種高級圖形庫,適應不同應用。其中,Open Inventor應用最為廣泛。該軟體是基於OpenGL面向對象的工具包,提供創建互動式3D圖形應用程序的對象和方法,提供了預定義的對象和用於交互的事件處理模塊,創建和編輯3D場景的高級應用程序單元,有列印對象和用其它圖形格式交換數據的能力。
OpenGL的發展一直處於一種較為遲緩的態勢,每次版本的提高新增的技術很少,大多隻是對其中部分做出修改和完善。1992年7月,SGI公司發布了OpenGL的1.0版本,隨後又與微軟公司共同開發了Windows NT版本的OpenGL,從而使一些原來必須在高檔圖形工作站上運行的大型3D圖形處理軟體也可以在微機上運用。1995年OpenGL的1.1版本面市,該版本比1.0的性能有許多提高,並加入了一些新的功能。其中包括改進列印機支持,在增強元文件中包含OpenGL的調用,頂點數組的新特性,提高頂點位置、法線、顏色、色彩指數、紋理坐標、多邊形邊緣標識的傳輸速度,引入了新的紋理特性等等。OpenGL 1.5又新增了「OpenGL Shading Language」,該語言是「OpenGL 2.0」的底核,用於著色對象、頂點著色以及片斷著色技術的擴展功能。
OpenGL 2.0標準的主要制訂者並非原來的SGI,而是逐漸在ARB中占據主動地位的3DLabs。2.0版本首先要做的是與舊版本之間的完整兼容性,同時在頂點與像素及內存管理上與DirectX共同合作以維持均勢。OpenGL 2.0將由OpenGL 1.3的現有功能加上與之完全兼容的新功能所組成(如圖一)。藉此可以對在ARB停滯不前時代各家推出的各種糾纏不清的擴展指令集做一次徹底的精簡。此外,硬體可編程能力的實現也提供了一個更好的方法以整合現有的擴展指令。
目前,隨著DirectX的不斷發展和完善,OpenGL的優勢逐漸喪失,至今雖然已有3Dlabs提倡開發的2.0版本面世,在其中加入了很多類似於DirectX中可編程單元的設計,但廠商的用戶的認知程度並不高,未來的OpenGL發展前景迷茫。
[編輯本段]Open GL現狀
Open GL仍然是唯一能夠取代微軟對3D圖形技術的完全控制的API。它仍然具有一定的生命力,但是Silicon Graphics已經不再以任何讓微軟不悅的方式推廣Open GL,因而它存在較高的風險。游戲開發人員是一個有著獨立思想的群體,很多重要的開發人員目前仍然在使用Open GL。因此,硬體開發商正在設法加強對它的支持。Direct3D目前還不能支持高端的圖形設備和專業應用; Open GL在這些領域占據著統治地位。最後,開放源碼社區(尤其是Mesa項目)一直致力於為任何類型的計算機(無論它們是否使用微軟的操作系統)提供Open GL支持。
今年08年正式公布OpenGL3.0版本。並且得到了,nv的支持,其官方網站上提供針對N卡的sdk下載。
[編輯本段]高級功能
OpenGL被設計為只有輸出的,所以它只提供渲染功能。核心API沒有窗口系統、音頻、列印、鍵盤/滑鼠或其它輸入設備的概念。雖然這一開始看起來像是一種限制,但它允許進行渲染的代碼完全獨立於他運行的操作系統,允許跨平台開發。然而,有些整合於原生窗口系統的東西需要允許和宿主系統交互。這通過下列附加API實現:
* GLX - X11(包括透明的網路)
* WGL - Microsoft Windows
* AGL - Apple MacOS
另外,GLUT庫能夠以可移植的方式提供基本的窗口功能。
[編輯本段]OpenGL編程入門
OpenGL作圖非常方便,故日益流行,但對許多人來說,是在微機上進行的,首先碰到的問題是,如何適應微機環境。這往往是最關鍵的一步,雖然也是最初級的。一般的,我不建議使用glut 包.那樣難以充分發揮 windows 的界面上的功能.
下面介紹如何在 VC++ 上進行 OpenGL 編程。 OpenGL 繪圖的一般過程可以看作這樣的,先用 OpenGL 語句在 OpenGL 的繪圖環境 RenderContext (RC)中畫好圖, 然後再通過一個 Swap buffer 的過程把圖傳給操作系統的繪圖環境 DeviceContext (DC)中,實實在在地畫出到屏幕上.
下面以畫一條 Bezier 曲線為例,詳細介紹VC++ 上 OpenGL編程的方法。文中給出了詳細注釋,以便給初學者明確的指引。一步一步地按所述去做,你將順利地畫出第一個 OpenGL 平台上的圖形來。
一、產生程序框架 Test.dsw
New Project | MFC Application Wizard (EXE) | "Test" | OK
*注* : 加「」者指要手工敲入的字串
二、導入 Bezier 曲線類的文件
用下面方法產生 BezierCurve.h BezierCurve.cpp 兩個文件:
WorkSpace | ClassView | Test Classes| <右擊彈出> New Class | Generic Class(不用MFC類) | "CBezierCurve" | OK
三、編輯好 Bezier 曲線類的定義與實現
寫好下面兩個文件:
BezierCurve.h BezierCurve.cpp
四、設置編譯環境:
1. 在 BezierCurve.h 和 TestView.h 內各加上:
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glaux.h>
2. 在集成環境中
Project | Settings | Link | Object/library mole | "opengl32.lib glu32.lib glaux.lib" | OK
五、設置 OpenGL 工作環境:(下面各個操作,均針對 TestView.cpp )
1. 處理 PreCreateWindow(): 設置 OpenGL 繪圖窗口的風格
cs.style |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN | CS_OWNDC;
2. 處理 OnCreate():創建 OpenGL 的繪圖設備。
OpenGL 繪圖的機制是: 先用 OpenGL 的繪圖上下文 Rendering Context (簡稱為 RC )把圖畫好,再把所繪結果通過 SwapBuffer() 函數傳給 Window 的 繪圖上下文 Device Context (簡記為 DC).要注意的是,程序運行過程中,可以有多個 DC,但只能有一個 RC。因此當一個 DC 畫完圖後,要立即釋放 RC,以便其它的 DC 也使用。在後面的代碼中,將有詳細注釋。
int CTestView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
myInitOpenGL();
return 0;
}
void CTestView::myInitOpenGL()
{
m_pDC = new CClientDC(this); //創建 DC
ASSERT(m_pDC != NULL);
if (!mySetupPixelFormat()) //設定繪圖的點陣圖格式,函數下面列出
return;
m_hRC = wglCreateContext(m_pDC->m_hDC);//創建 RC
wglMakeCurrent(m_pDC->m_hDC, m_hRC); //RC 與當前 DC 相關聯
} //CClient * m_pDC; HGLRC m_hRC; 是 CTestView 的成員變數
BOOL CTestView::mySetupPixelFormat()
{//我們暫時不管格式的具體內容是什麼,以後熟悉了再改變格式
static PIXELFORMATDESCRIPTOR pfd =
{
sizeof(PIXELFORMATDESCRIPTOR), // size of this pfd
1, // version number
PFD_DRAW_TO_WINDOW | // support window
PFD_SUPPORT_OPENGL | // support OpenGL
PFD_DOUBLEBUFFER, // double buffered
PFD_TYPE_RGBA, // RGBA type
24, // 24-bit color depth
0, 0, 0, 0, 0, 0, // color bits ignored
0, // no alpha buffer
0, // shift bit ignored
0, // no accumulation buffer
0, 0, 0, 0, // accum bits ignored
32, // 32-bit z-buffer
0, // no stencil buffer
0, // no auxiliary buffer
PFD_MAIN_PLANE, // main layer
0, // reserved
0, 0, 0 // layer masks ignored
};
int pixelformat;
if ( (pixelformat = ChoosePixelFormat(m_pDC->m_hDC, &pfd)) == 0 )
{
MessageBox("ChoosePixelFormat failed");
return FALSE;
}
if (SetPixelFormat(m_pDC->m_hDC, pixelformat, &pfd) == FALSE)
{
MessageBox("SetPixelFormat failed");
return FALSE;
}
return TRUE;
}
3. 處理 OnDestroy()
void CTestView::OnDestroy()
{
wglMakeCurrent(m_pDC->m_hDC,NULL); //釋放與m_hDC 對應的 RC
wglDeleteContext(m_hRC); //刪除 RC
if (m_pDC)
delete m_pDC; //刪除當前 View 擁有的 DC
CView::OnDestroy();
}
4. 處理 OnEraseBkgnd()
BOOL CTestView::OnEraseBkgnd(CDC* pDC)
{
// TODO: Add your message handler code here and/or call default
// return CView::OnEraseBkgnd(pDC);
//把這句話注釋掉,若不然,Window
//會用白色北景來刷新,導致畫面閃爍
return TRUE;//只要空返回即可。
}
5. 處理 OnDraw()
void CTestView::OnDraw(CDC* pDC)
{
wglMakeCurrent(m_pDC->m_hDC,m_hRC);//使 RC 與當前 DC 相關聯
myDrawScene( ); //具體的繪圖函數,在 RC 中繪制
SwapBuffers(m_pDC->m_hDC);//把 RC 中所繪傳到當前的 DC 上,從而
//在屏幕上顯示
wglMakeCurrent(m_pDC->m_hDC,NULL);//釋放 RC,以便其它 DC 進行繪圖
}
void CTestView::myDrawScene( )
{
glClearColor(0.0f,0.0f,0.0f,1.0f);//設置背景顏色為黑色
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glPushMatrix();
glTranslated(0.0f,0.0f,-3.0f);//把物體沿(0,0,-1)方向平移
//以便投影時可見。因為預設的視點在(0,0,0),只有移開
//物體才能可見。
//本例是為了演示平面 Bezier 曲線的,只要作一個旋轉
//變換,可更清楚的看到其 3D 效果。
//下面畫一條 Bezier 曲線
bezier_curve.myPolygon();//畫Bezier曲線的控制多邊形
bezier_curve.myDraw(); //CBezierCurve bezier_curve
//是 CTestView 的成員變數
//具體的函數見附錄
glPopMatrix();
glFlush(); //結束 RC 繪圖
return;
}
6. 處理 OnSize()
void CTestView::OnSize(UINT nType, int cx, int cy)
{
CView::OnSize(nType, cx, cy);
VERIFY(wglMakeCurrent(m_pDC->m_hDC,m_hRC));//確認RC與當前DC關聯
w=cx;
h=cy;
VERIFY(wglMakeCurrent(NULL,NULL));//確認DC釋放RC
}
7 處理 OnLButtonDown()
void CTestView::OnLButtonDown(UINT nFlags, CPoint point)
{
CView::OnLButtonDown(nFlags, point);
if(bezier_curve.m_N>MAX-1)
{
MessageBox("頂點個數超過了最大數MAX=50");
return;
}
//以下為坐標變換作準備
GetClientRect(&m_ClientRect);//獲取視口區域大小
w=m_ClientRect.right-m_ClientRect.left;//視口寬度 w
h=m_ClientRect.bottom-m_ClientRect.top;//視口高度 h
//w,h 是CTestView的成員變數
centerx=(m_ClientRect.left+m_ClientRect.right)/2;//中心位置,
centery=(m_ClientRect.top+m_ClientRect.bottom)/2;//取之作原點
//centerx,centery 是 CTestView 的成員變數
GLdouble tmpx,tmpy;
tmpx=scrx2glx(point.x);//屏幕上點坐標轉化為OpenGL畫圖的規范坐標
tmpy=scry2gly(point.y);
bezier_curve.m_Vertex[bezier_curve.m_N].x=tmpx;//加一個頂點
bezier_curve.m_Vertex[bezier_curve.m_N].y=tmpy;
bezier_curve.m_N++;//頂點數加一
InvalidateRect(NULL,TRUE);//發送刷新重繪消息
}
double CTestView::scrx2glx(int scrx)
{
return (double)(scrx-centerx)/double(h);
}
double CTestView::scry2gly(int scry)
{
}
附錄:
1.CBezierCurve 的聲明: (BezierCurve.h)
class CBezierCurve
{
public:
myPOINT2D m_Vertex[MAX];//控制頂點,以數組存儲
//myPOINT2D 是一個存二維點的結構
//成員為Gldouble x,y
int m_N; //控制頂點的個數
public:
CBezierCurve();
virtual ~CBezierCurve();
void bezier_generation(myPOINT2D P[MAX],int level);
//演算法的具體實現
void myDraw();//畫曲線函數
void myPolygon(); //畫控制多邊形
};
2. CBezierCurve 的實現: (BezierCurve.cpp)
CBezierCurve::CBezierCurve()
{
m_N=4;
m_Vertex[0].x=-0.5f;
m_Vertex[0].y=-0.5f;
m_Vertex[1].x=-0.5f;
m_Vertex[1].y=0.5f;
m_Vertex[2].x=0.5f;
m_Vertex[2].y=0.5f;
m_Vertex[3].x=0.5f;
m_Vertex[3].y=-0.5f;
}
CBezierCurve::~CBezierCurve()
{
}
void CBezierCurve::myDraw()
{
bezier_generation(m_Vertex,LEVEL);
}
void CBezierCurve::bezier_generation(myPOINT2D P[MAX], int level)
{ //演算法的具體描述,請參考相關書本
int i,j;
level--;
if(level<0)return;
if(level==0)
{
glColor3f(1.0f,1.0f,1.0f);
glBegin(GL_LINES); //畫出線段
glVertex2d(P[0].x,P[0].y);
glVertex2d(P[m_N-1].x,P[m_N-1].y);
glEnd();//結束畫線段
return; //遞歸到了最底層,跳出遞歸
}
myPOINT2D Q[MAX],R[MAX];
for(i=0;i {
Q.x=P.x;
Q.y=P.y;
}
for(i=1;i<m_N;i++)
{
R[m_N-i].x=Q[m_N-1].x;
R[m_N-i].y=Q[m_N-1].y;
for(j=m_N-1;j>=i;j--)
{
Q[j].x=(Q[j-1].x+Q[j].x)/double(2);
Q[j].y=(Q[j-1].y+Q[j].y)/double(2);
}
}
R[0].x=Q[m_N-1].x;
R[0].y=Q[m_N-1].y;
bezier_generation(Q,level);
bezier_generation(R,level);
}
void CBezierCurve::myPolygon()
{
glBegin(GL_LINE_STRIP); //畫出連線段
glColor3f(0.2f,0.4f,0.4f);
for(int i=0;i<m_N;i++)
{
glVertex2d(m_Vertex.x,m_Vertex.y);
}
glEnd();//結束畫連線段
}
[編輯本段]OpenGL與DirectX的區別
OpenGL 只是圖形函數庫。
DirectX 包含圖形, 聲音, 輸入, 網路等模塊。
OpenGL穩定,可跨平台使用。DirectX僅能用於Windows系列平台,包括Windows Mobile/CE系列以及XBOX/XBOX360。
----------------------------------------------------------------------------------------------
1995年至1996年,微軟實行了一項新計劃,以支持在Windows95上運行游戲,目標是把市場擴展到被任天堂和世嘉控制的游戲領域。然而,微軟不想用已經在NT上提供的OpenGL技術。微軟收購了Rendermorphics,Ltd.並得到他的被稱作RealityLab的3D API。經重新整理,微軟發布了新的3D API——Direct3D。
微軟,推行Direct3D,凍結OpenGL!
微軟當時拒絕了在Window95上支持OpenGL。不止如此,微軟採取異常手段收回對OpenGL的MCD驅動介面的支持,以致硬體廠商不得不放棄已經進入最後測試的OpenGL驅動。微軟的市場部門開始向游戲開發商、硬體廠商、新聞出版機構推銷Direct3D,同時排斥OpenGL。
API之戰!
Silicon Graphics和很多OpenGL用戶都依賴OpenGL創新且高性能的技術。但很明顯微軟打算用Direct3D代替OpenGL,盡管D3D有很多問題而且不能像OpenGL那樣被硬體廠商擴展。Silicon Graphics決定在1996 SIGGRAPH會議上作一項演示。演示證明OpenGL至少和D3D一樣快,從而駁倒微軟的市場論調。因為OpenGL是業界公認標准,比D3D功能豐富,而且圖像質量要高一些,所以演示在計算機圖形和游戲開發社區導致了激烈論戰。
游戲開發者要求OpenGL和D3D站在同等地位!
當技術和市場問題暴露,強烈的支持OpenGL行動開始了。Doom的開發者John Carmack聲明拒絕D3D,Chris Hecker在游戲開發雜志上發表了兩套API的全面分析,移微軟應放棄D3D為結論。游戲開發者先後兩次向微軟遞交請願書。第一次由56名首席游戲開發者要求微軟發行OpenGL MCD驅動,但未成功,因為會讓OpenGL與D3D競爭。第二次的公開信由254人簽名開始,截止時達到1400人。微軟的回答仍是重申舊市場立場。盡管請願者清楚的要求兩套API同等競爭以促進發展,微軟卻以增加D3D的投資、更加減少OpenGL的投資為回應。
Fahrenheit——D3D與OpenGL的合並?
Silicon Graphics,Microsoft, HP,Intel達成協議聯合開發下一代3D API——Fahrenheit。但不了了之,因為微軟的打算是把OpenGL的技術用到D3D里並且以此之名驅除OpenGL的威脅。(估計DirectX 8 Graphics即是剩下微軟獨自開發的Fahrenheit,吸收了OpenGL的很多東西。)
OpenGL豪氣不減當年!
OpenGL依然是唯一能與微軟單獨控制的D3D對立的API,盡管Silicon Graphics不再以任何微軟不能接受的方式推行OpenGL。游戲開發這是獨立的,並且很多關鍵人物在用OpenGL,因此,硬體廠商正努力提高對其支持。D3D仍不能支持高端圖像和專業應用,而OpenGL主宰著這些土地。在開放原碼社區,Mesa項目正提供獨立於微軟的OpenGL驅動。
譯者註:表面上好像D3D比OpenGL支持更多的功能,其實由於D3D不支持硬體擴展,如硬體全景陰影,硬體渲染順序無關半透明材質等新技術根本無法使用,而D3D(特指D3D8)本身提供的功能只有一小部分能在使用HAL且硬體不支持時模擬,你要用大量代碼分析硬體能力和採取不同策略
⑸ 計算機二級C語言怎麼學
1.題庫每年都會有一點變化,但是變化不大,每一年的肯定會新增一些題目,萬卷不離其宗,考來考去知識點都那些,多看書,多做題,就差不多了。做歷年真題就行了,和考四六級一樣。都是模式化的東西。
2.計算機二級C語言考試的流程:
1)筆試:90分鍾,滿分100分,其中含公共基礎知識部分的30分。
2)上機操作:90分鍾,滿分100分。
上機操作包括:
(1) 基本操作。
(2) 簡單應用。
(3) 綜合應用。
3.計算機二級C語言考試內容 :
一、C語言程序的結構
1.程序的構成,main函數和其他函數。
2.頭文件,數據說明,函數的開始和結束標志以及程序中的注釋。
3.源程序的書寫格式。
4.C語言的風格。
二、數據類型及其運算
1.C的數據類型(基本類型,構造類型,指針類型,無值類型)及其定義方法。
2.C運算符的種類、運算優先順序和結合性。
3.不同類型數據間的轉換與運算。
4.C表達式類型(賦值表達式,算術表達式,關系表達式,邏輯表達式,條件表達式,逗號表達式)和求值規則。
三、基本語句
1.表達式語句,空語句,復合語句。
2.輸入輸出函數的調用,正確輸入數據並正確設計輸出格式。
四、選擇結構程序設計
1.用if語句實現選擇結構。
2.用switch語句實現多分支選擇結構。
3.選擇結構的嵌套。
五、循環結構程序設計
1.for循環結構。
2.while和do-while循環結構。
3.continue語句break語句。
4.循環的嵌套。
六、數組的定義和引用
1.一維數組和二維數組的定義、初始化和數組元素的引用。
2.字元串與字元數組。
七、函數
1.庫函數的正確調用。
2.函數的定義方法。
3.函數的類型和返回值。
4.形式參數與實在參數,參數值的傳遞。
5.函數的正確調用,嵌套調用,遞歸調用。
6.局部變數和全局變數。
7.變數的存儲類別(自動,靜態,寄存器,外部),變數的作用域和生存期。
八、編譯預處理
1.宏定義和調用(不帶參數的宏,帶參數的宏)。
2.「文件包含」處理。
九、指針
1.地址與指針變數的概念,地址運算符與間址運算符。
2.一維。二維數組和字元串的地址以及指向變數、數組、字元串、函數、結構體的指針變數的定義。通過指針引用以上各類型數據。
3.用指針作函數參數。
4.返回地址值的函數。
5.指針數組,指向指針的指針。
十、結構體(即「結構」)與共同體(即:「聯合」)
1.用typedef說明一個新類型。
2.結構體和共用體類型數據的定義和成員的引用。
3.通過結構體構成鏈表,單向鏈表的建立,結點數據的輸出、刪除與插入。
十一、位運算
1.位運算符的含義和使用。
2.簡單的位運算。
十二、文件操作
只要求緩沖文件系統(即高級磁碟I/O系統),對非標准緩沖文件系統(即低級磁碟I/O系統)不要求。
1.文件類型指針(FILE類型指針)。
2.文件的打開與關閉(fopen,fclose)。
3.文件的讀寫(fputc,fgetc,fputs,fgets,fread,fwrite,fprintf,fscanf函數的應用),文件的定位(rewind,fseek函數的應用)。
⑹ C語言怎麼學
轉載
(一)語言入門:
《C++
Primer》
最新版本:第三版(第四版國外已上架,國內一些網上書店也在預訂中)
適合有豐富C經驗,缺乏C++經驗的。不過我個人一直認為此書帶著過於強烈的C語言的痕跡,對於C++的學習未必是好事。
《The
C++
Programming
Language》/《C++程序設計語言》
最新版本:第三版特別版
簡稱TC++PL,有其他語言的豐富經驗的。(也有人簡稱之為「TCPL」,但需與另一本《The
C
Programmer
Language》區分開來)
《Essential
C++》
《Accelerated
C++》
這兩本薄一些,都是不錯的選擇。《Accelerated
C++》本人沒有讀過,從各方面的評價來看,完全值得推薦。
以上幾本書都有相應的中文版,而且翻譯的質量都不錯。上面的書未必都需要讀一遍,但無論如何,TC++PL是應該閱讀的。
(二)進階A:
這個路線側重於語言本身
《Effective
C++》
最新版本:第二版(第三版國外已上架,國內一些網上書店也在預訂中)
簡稱EC。C++程序員必讀!很多時候,我們說C++聖經不是指TC++PL,而是這一本。《The
Pragmatic
Programmer》一書中寫到:「一旦你發現自己要參與C++項目的開發,趕快跑(不要走)到書店去購買Scott
Mayer的《Effective
C++》,可能還要《More
Effective
C++》」。
《C++
Coding
Standards:
101
Rules,
Guidelines,
and
Best
Practices》/《C++
編程規范》
個人認為此書應為C++程序員必備的案頭書。幾乎Effective系列和Exceptional系列都在這里得到了總結。最新的模版、異常的業界經驗都在這里的到了體現。可能的唯一缺陷就是對一個新手而言,關於「為什麼這么做」的問題,解釋的不夠。
我的看法是:如果你不理解其中的條款,記憶,並且照做;如果你理解其中的條款,我猜你一定會同意書中的觀點。我認為這本書中的內容至少在2009年以前都不會過時,人們將廣為傳誦它制定的101條戒律。
還不知道他的簡稱,也許「101」會成為一個候選者?
提到《Effective
C++》,那麼另外三本書一一浮出水面:
《More
Effective
C++》
《Exceptional
C++》
《More
Exceptional
C++》。
新書《Exceptional
C++
Style》也是值得一看的好書。
上述幾本書,一本也不應該放過。
個人建議上述書籍按順序閱讀。並且,在將來反復閱讀這幾本書。
(三)進階B:
這個路線側重於程序庫。
《The
C++
Standard
Library》/《C++標准程序庫—自修教程與參考手冊》
聽說過STL嗎?這本書會教你最基本的,也是最重要的STL的使用。這本書,應該是必讀的。
《Effective
STL》
會使用STL還不夠,還必須知道什麼時候選擇什麼STL組件,這是STL使用的必讀書。
《Generic
Programming
and
the
STL:
Using
and
Extending
the
C++
Standard
Template
Library》/《泛型編程與STL》。
這本書理論性較強,但是真的很嚴謹,而且並不是非常難懂。理解其中對於Concept的解釋,將是非常重要的。
《C++
STL》
這不是講述使用程序庫的,而是講述程序庫實現原理的。腸胃不好的,需要慢慢吸收。
這個路線的書,仍然是建議按順序閱讀。
進階A、進階B兩個路線應該是可以並行的。
其他進階參考書
提出這些參考書,只是避免爭議,也為開闊視野,筆者並不曾完全讀過所有的。
《Thinking
in
C++》/《C++編程思想》
這本書及其中文版傳言好壞都有,沒有認真看過,不做評價,如果確有興趣,不妨嘗試一下該書。
以下幾本書基本上涉及的都是語言本身,大體上可以按照以下的順序閱讀。
《C++必知必會》
如果早一年,這本書將是重量級的,然而它被101和《Exceptional
C++
Style》蓋過一頭。
《C++
Gotchas:
Avoiding
Common
Problems
in
Coding
and
Design》/《C++程序設計陷阱》
這又是一本我未曾讀過,而且廣受好評的書。
《STL
源碼剖析》
這本書我剛到手,就被人"借"走,以至於到現在也沒有看過。看過這本書的朋友,可以給一個合適的評價。
高級:
《The
Design
and
Evolution
of
C++》/《C++語方的設計和演化》
簡稱D&E,內容並不艱深,Bjarne的書,僅此,就值得一讀。
前段時間,互動網曾8塊一本(人民幣)賤賣此書,現在好像沒了。
《Inside
The
C++
Object
Model》/《深度探索C++對象模型》
C程序員讀後一定會覺得C++原來並不神秘。
《C++
Template》
在閱讀STL、Boost或者Loki的源代碼之前,請仔細閱讀本書,它可以減輕一些閱讀的煩惱。這本書是討論C++模版的權威。
《Modern
C++
Design
Generic
Programming
and
Design
Patterns
Applied》/《C++設計新思維——泛型編程與設計模式之應用》
簡稱MCD。在閱讀MCD之前,建議先閱讀一下《C++
Template》。
《對象揭秘:Java、Eiffel和C++》
你對C++不滿嗎?這本書可以部分地幫你完成抱怨的目標。也許它還可以讓你不迷信C++。
最後,一份C++標准文檔也是應該加以咀嚼的。
還有一些書籍,並不能簡單的歸於C++,也難以在純粹的書本學習中加以掌握。《Design
Patterns》/《設計模式》一書就歸於此類。
所有上述的書籍,要麼談論C++語言本身,要麼談論STL的,要麼兼而有之(當然嚴格講STL也是C++語言非常重要的一部分)。偶爾,某些書中條目也會涉及實際工程。這些書並不是C++軟體開發的全部,但是他們很重要。閱讀這些書,未必需要化費太多的精力,有時候是會困難,但也有時候會很快速。
最後,編程語言並非計算機科學技術的全部,尤其對於在校的學生來說,打好基礎、開闊視野都是非常重要的。