TOP
0
0
【簡體曬書區】 單本79折,5本7折,活動好評延長至5/31,趕緊把握這一波!
Effective C++中文版:改善程序與設計的55個具體做法(第三版)(簡體書)
滿額折
Effective C++中文版:改善程序與設計的55個具體做法(第三版)(簡體書)
Effective C++中文版:改善程序與設計的55個具體做法(第三版)(簡體書)
Effective C++中文版:改善程序與設計的55個具體做法(第三版)(簡體書)
Effective C++中文版:改善程序與設計的55個具體做法(第三版)(簡體書)
Effective C++中文版:改善程序與設計的55個具體做法(第三版)(簡體書)

Effective C++中文版:改善程序與設計的55個具體做法(第三版)(簡體書)

人民幣定價:89 元
定  價:NT$ 534 元
優惠價:87465
缺貨無法訂購
相關商品
商品簡介
作者簡介
名人/編輯推薦
目次

商品簡介

《Effective C++:改善程序與設計的55個具體做法(第3版)中文版(雙色)》在國際上所引起的反響,波及整個計算機技術的出版領域,余音至今未絕。幾乎在所有C++書籍的推薦名單上,《Effective C++:改善程序與設計的55個具體做法(第3版)中文版(雙色)》都會位于前三名。作者高超的技術把握力、獨特的視角、詼諧輕鬆的寫作風格、獨具匠心的內容組織,都受到極大的推崇和仿效。這種奇特的現象,只能解釋為人們對《Effective C++:改善程序與設計的55個具體做法(第3版)中文版(雙色)》衷心的贊美和推崇。《Effective C++:改善程序與設計的55個具體做法(第3版)中文版(雙色)》不是讀完一遍就可以束之高閣的快餐讀物,也不是用以解決手邊問題的參考手冊,而是需要您去反復閱讀體會的,C++是真正程序員的語言,背後后精神的思想與無以倫比的表達能力,這使得它具有類似宗教般的魅力。希望《Effective C++:改善程序與設計的55個具體做法(第3版)中文版(雙色)》能夠幫您跨越C++的重重險阻,領略高處才有的壯美風光,做一個成功而快樂的C++程序員。

作者簡介

Scott Meyers

全世界最知名的C++軟件開發專家之一。他是暢銷書《Effective C++》系列(Effective C++,More Effective C++,Effective STL)的作者,又是創新產品《Effective C++CD》的設計者和作者,也是Addison-wesley的“Effective Software Development Series”顧問編輯,以及《Software Development》雜志諮詢板成員。他也為若干新公司的技術諮詢板提供服務。Meyers于1993年自Brown大學獲得計算機博土學位。


侯捷

是計算機技術書籍的作家、澤者、書評人。著有《深入淺出MFC》、《多犁與虛擬》、《STL源碼剖析》、《無責任書評》三卷,澤有眾多膾炙人口的高階技術書籍,包括Meyers所著的“Effective C++”系列。侯捷兼任教職于元智大學、同濟大學、南京大學。

名人/編輯推薦

這是一本輕薄短小高密度的“專家經驗累積”。

如果你聲稱自己是個C++程序員之前,那你一定得讀過這本書。

認真地讀完這本書,普通的C++程序員也可以搖身一變成為專家級C++程序員。

這是作者智慧的再一次提煉和昇華,你沒理由還在原地踏步,趕緊閱讀這本書,迎頭趕上吧。

 

序言

1991年我寫下《Effective C++》第一版。1997年撰寫第二版時我更新了許多重要內容,但為了不讓熟悉第一版的讀者感到困惑,我竭盡所能保留原始結構:原先50個條款中的48個標題基本沒變。如果把書籍視為一棟房屋,第二版只是更換地毯燈飾,重新粉刷一遍而已。

到了第三版,修繕工作進一步深入壁骨牆筋(好幾次我甚至希望能夠翻新地基)。1991年起C++ 世界經歷了巨大變革,而本書目標——在一本小而有趣的書中確認最重要的一些C++ 編程準則——卻已不再能夠由15年前建立的那些條款體現出來。「“C++ 程序員擁有C背景」”這句話在1991年是個合理假設,如今C++ 程序員卻很可能來自Java或C# 陣營。繼承(inheritance)和麵向對象編程(object-oriented programming)在1991年對大多數程序員都很新鮮,如今程序員已經建立良好概念,異常(exceptions)、模板(templates)和泛型編程(generic programming)才是需要更多引導的領域。1991年沒人聽過所謂設計模式(design patterns),如今少了它很難討論軟件系統。1991年C++ 正式標準才剛要上路,如今C++ 標準規格規範已經8歲,新版規格規範蓄勢待發。

為了對付這些改變,我把所有條款抹得一干乾二淨,然後問自己「“2005年什麼是對C++ 程序員最重要的忠告?」”答案便是第三版中的這些條款。本書有兩個新章,一個是資源管理(resource management),一個是模板編程(programming with templates)。實際上template(模板)這東西遍布全書,因為它們幾乎影響了C++ 的每個角落。本書新素材還包括在exceptions(異常)概念下編程、套用設計模式、以及運用新的TR1程序庫設施(TR1於條款54描述)。本書也告訴大家在單線程系統(single-threaded systems)中運作良好但可能不適用於多線程系統(multithreaded systems)的某些技術和作法做法。本書半數以上內容是新的。在此同時第二版大部分基礎信息仍然很重要,所以我找出一個保留它們的辦法:你可以在附錄B找到第二、第三兩版的條款對映對應表。

我努力讓本書達到我所能夠達到的最佳狀態,但這並不表示它已臻完美。如果你認為某些條款不適合做為作為一般性忠告,或你有更好的辦法完成本書所談的某件工作,或書中某些技術討論不夠清楚不夠完全,甚或有所誤導,請告訴我。如果你找出任何錯誤——— 技術上的、文法上的、排版印刷上的,不論哪一種——— 也請告訴我。我很樂意將第一位提出問題並吸引我注意的朋友加入下次印刷的致謝名單中。

即使本書條款個數擴充為55,這一整組編程準則還談不上完備。然而畢竟整理出優良準則——幾乎任何時間適用於任何應用程序的準則——比想像中困難得多。如果你有其它其他編程準則的想法或建議,我將樂以與聞。

我手上維護本書第一刷以來的變化清單,其中包括錯誤修訂、進一步說明和技術更新。這份清單放在網址為http://aristeia.com/BookErrata/ec++3e-errata.html的"Effective C++ Errata" 網頁上。如果你希望在這份清單更新時獲得通知,請加入我的電郵名錄郵件列表。這份列表名錄用來發布消息給可能對我的專業工作感興趣的人士,詳情請見http://aristeia.com/MailingList/

致謝

Acknowledge

《Effective C++》已經面世15年了,我開始學習C++ 則是在書寫此書的前5年。也就是說"Effective C++項目" 已經發展兩個年代了。此期間我得益於數百(數千?)人的深刻知識、對我的建議與修正,以及偶發的一些目瞪口呆的事績。這些人幫助我更加完善《Effective C++》,我要對他們全體表示感謝。

我已經放棄追踪「“在哪兒學到什麼」”的歷史,但永遠記得有個公眾信息來源不斷帶給我幫助:Usenet C++ newsgroups,特別是comp.lang.c++.moderated和comp.std.c++。本書許多——也許是大多數——條款得益於這些討論群所突出的若干技術想法和後續調查與診療。

關於第三版新內容,Steve Dewhurst和我一起討論了最初的條款名單。條款11中關於「“藉由copy-and-swap實現operator=」”的構想來自Herb Sutter在此主題的作品,像是《Exceptional C++》(Addison-Wesley, 2000)條款13。RAII(見條款13 )源自Bjarne Stroustrup的《The C++ Programming Language》(Addison-Wesley, 2000)。條款17背後的想法來自Boost shared_ptr網頁上的"“Best Practices”" 節區(http://boost.org/libs/ smart_ptr/shared_ptr.htm#BestPractices),又得到Herb Sutter的《More Exceptional C++》(Addison-Wesley, 2002)條款21的琢磨。條款29強烈受到Herb Sutter在此主題上的廣泛作品的影響,像是《 Exceptional C++》條款8~19,《More Exceptional C++》條款17~23,以及《Exceptional C++ Style》(Addison-Wesley, 2005)條款11~13;David Abrahams幫助我更好地了解三個異常安全性保證。條款35的NVI 手法來自Herb Sutter寫於《C/C++ Users Journal》2001年9月份的"Virtuality" 專欄。同一條款中的Template Method和Strategy設計模式來自《Design Patterns》(Addison-Wesley, 1995) ,作者是Erich Gamma, Richard Helm, Ralph Johnson和John Vlissides。條款37所說的NVI使用手法,概念來自Hendrik Schober。David Smallberg 給了我動機在條款38寫出一個定制型set 實現品。條款39提到EBO通常只在多重繼承中才可用,這個構想源自David Vandevoorde和Nicolai M. Josuttis合著著的《C++ Templates》(Addison-Wesley, 2003)。條款42中我對typename的最初理解來自Greg Comeau主持的"C++ and C FAQ"(http://www. comeaucomputing.com/techtalk/#typename),Leor Zolman則幫助我認知我的最初了解並不正確(是我的錯,和Greg無關)。條款46的本質源自於Dan Sak的談話,"Making New Friends"。條款52末尾的那個想法「“如果你聲明一版operator new,你也應該聲明其對應的delete夥伴”」源自Herb Sutter的《Exceptional C++ Style》條款22。我從David Abrahams身上更多了解了Boost的檢評過程(條款55有一份摘要)。com/techtalk/#typename),Leor Zolman則幫助我認知我的最初了解並不正確(是我的錯,和Greg無關)。條款46的本質源自於Dan Sak的談話,"Making New Friends"。條款52末尾的那個想法「“如果你聲明一版operator new,你也應該聲明其對應的delete夥伴”」源自Herb Sutter的《Exceptional C++ Style》條款22。我從David Abrahams身上更多了解了Boost的檢評過程(條款55有一份摘要)。com/techtalk/#typename),Leor Zolman則幫助我認知我的最初了解並不正確(是我的錯,和Greg無關)。條款46的本質源自於Dan Sak的談話,"Making New Friends"。條款52末尾的那個想法「“如果你聲明一版operator new,你也應該聲明其對應的delete夥伴”」源自Herb Sutter的《Exceptional C++ Style》條款22。我從David Abrahams身上更多了解了Boost的檢評過程(條款55有一份摘要)。

上面所說關於我向誰或從某處學習某一技術,並不必然表示誰或某處就是該技術的發明人或發表處。

我的筆記還告訴我,我也使用了來自Steve Clamage, Antoine Trux, Timothy Knox和Mike Kaelbling的信息,可惜這份筆記沒有提到如何以及在哪兒學到什麼。

第一版草稿由Tom Cargill, Glenn Carroll, Tony Davis, Brian Kernighan, Jak Kirman, Doug Lea, Moises Lejter, Eugene Santos, Jr., John Shewchuk, John Stasko, Bjarne Stroustrup, Barbara Tilly和Nancy L. Urbano共同檢閱。我收到了一些改善建議並納入後來刷次,這些建議來自Nancy L. Urbano, Chris Treichel, David Corbin, Paul Gibson, Steve Vinoski, Tom Cargill, Neil Rhodes, David Bern, Russ Williams, Robert Brazile, Doug Morgan, Uwe Steinmüller, Mark Somer, Doug Moore, David Smallberg, Seth Meltzer, Oleg Shteynbuk, David Papurt, Tony Hansen, Peter McCluskey, Stefan Kuhlins, David Braunegg, Paul Chisholm, Adam Zell, Clovis Tondo, Mike Kaelbling, Natraj Kini, Lars Nyman , Greg Lutz, Tim Johnson, John Lakos, Roger Scott, Scott Frohman, Alan Rooks, Robert Poor, Eric Nagler, Antoine Trux, Cade Roux, Chandrika Gokul, Randy Mangoba和Glenn Teitelbaum。

第二版草稿由以下人士共同檢閱:Derek Bosch, Tim Johnson, Brian Kernighan, Junichi Kimura, Scott Lewandowski, Laura Michaels, David Smallberg, Clovis Tondo, Chris Van Wyk和Oleg Zabluda。我收到來自以下人士的意見並因此對新刷有所幫助:Daniel Steinberg, Arunprasad Marathe, Doug Stapp, Robert Hall, Cheryl Ferguson, Gary Bartlett, Michael Tamm, Kendall Beaman, Eric Nagler, Max Hailperin, Joe Gottman, Richard Weeks, Valentin Bonnard, Jun He, Tim King, Don Maier, Ted Hill, Mark Harrison, Michael Rubenstein, Mark Rodgers, David Goh, Brenton Cooper, Andy Thomas-Cramer, Antoine Trux, John Wait, Brian Sharon, Liam Fitzpatrick, Bernd Mohr, Gary Yee, John O'Hanley, Brady Patterson, Christopher Peterson, Feliks Kluzniak, Isi Dunietz, Christopher Creutzi, Ian Cooper, Carl Harris, Mark Stickel, Clay Budin, Panayotis Matsinopoulos, David Smallberg, Herb Sutter, Pajo Misljencevic, Giulio Agostini,

第三版早期部分草稿由以下人士共同檢閱:Brian Kernighan, Angelika Langer, Jesse Laeuchli, Roger E. Pedersen, Chris Van Wyk, Nicholas Stroustrup和Hendrik Schober。完整草稿由以下人士共同檢閱:Leor Zolman, Mike Tsao, Eric Nagler, Gene Gutnik, David Abrahams, Gerhard Kreuzer, Drosos Kourounis, Brian Kernighan, Andrew Kirmse, Balog Pal, Emily Jagdhar, Eugene Kalenkovich, Mike Roze, Enrico Carrara, Benjamin Berck, Jack Reeves, Steve Schirripa, Martin Fallenstedt, Timothy Knox, Yun Bai, Michael Lanzetta, Philipp Janert, Guido Bartolucci, Michael Topic, Jeff Scherpelz, Chris Nauroth, Nishant Mittal, Jeff Somers, Hal Moroff, Vincent Manis, Brandon Chang , Greg Li, Jim Meehan, Alan Geller, Siddhartha Singh, Sam Lee, Sasan Dashtinezhad, Alex Marin, Steve Cai, Thomas Fruchterman, Cory Hicks, David Smallberg, Gunavardhan Kakulapati, Danny Rabbani, Jake Cohen, Hendrik Schober, Paco Viciana, Glenn Kennedy, Jeffrey D. Oldham, Nicholas Stroustrup, Matthew Wilson, Andrei Alexandrescu, Tim Johnson, Leon Matthews, Peter Dulimov和Kevlin Henney。某些個別條款的草稿由Herb Sutter和Attila F. Feher檢閱。

檢閱一份不夠洗煉(而且可能尚未完成)的手稿是件吃力的工作,在時間壓力之下進行只會使得它更困難。我要感謝這麼多人願意為我做這件事。

如果對討論素材缺乏背景,而又期望捕捉手稿中的每一個問題,檢閱工作將更加困難。令人驚訝的是還是有人選擇成為文字編輯。Chrysta Meadowbrooke是本書的文字編輯,她的周密工作揭露出許多逃過其它其他每一雙眼睛的問題。

Leor Zolman在正式檢閱前先以多種編譯器檢驗所有代碼,在我校訂手稿之後又做一次。如果書中仍然存在任何錯誤,全是我的責任。Karl Wiegers和(特別是)Tim Johnson提供我快速而有幫助的反饋。

John Wait是我的前兩版編輯,有點傻傻地又簽下這一份責任約。他的助理Denise Mickelsen熟練地處理我頻繁的糾纏,帶著愉快的微笑(至少我認為她是。呃,我從未見過她)。Julie Nahil 向來扮演救火隊角色吸著截短的吸管並因此成為我的產品經理。她以非凡的鎮定指揮產品計劃內的六週通宵工作。John Fuller(她的老闆)和Marty Rabinowitz(他的老闆)也協助解決了產品發行量問題。Vanessa Moore的正式工作是提供FrameMaker和PDF支持,但她也協助製作附錄B的條目並格式化打印於封底里。Solveig Haugland協助將索引格式化。Sandra Schroeder和Chuti Prasertsith負責封面設計,Chuti總是在每次我說『“如果把這張相片加上那個顏色的線條會怎樣?』”時修訂封面。Chanda Leary-Coutu對市場營銷舉重若輕。

在我忙於手稿的數月之中,電視影劇集Buffy the Vampire Slayer常常幫助我在每天工作結束後解壓。帶著極大的克制我才能夠不讓Buffyspeak的身影進入本書。Kathy Reed於1971年教我寫程序,我很高興我們保持友誼至今。Donald French僱用我和Moises Lejter於1989年建立起C++ 培訓教材(這項計劃誘使我真正了解C++),1991年他又聘我在Stratus Computer體現它們。該班學生鼓勵我寫下最終成為本書第一版的東西。Don也將我介紹給John Wait,他同意出版它們。

我的妻子Nancy L. Urbano持續鼓勵我寫作,即使在我完成了七本書、一張CD改寫版、一篇論文之後。她有令人難以置信難以致信的忍耐、自製與寬容。沒有她我無法完成我所完成的任何事情。

自始至終,我們的狗兒Persephone是我們無可取代的同伴。令人悲傷的是,在這個項目的大部分時間裡,她和我們之間的交往關係已經改為辦公室內的一壇骨灰甕。我們十分懷念她。

導讀

Introduction

學習程序語言根本大法是一回事;學習如何以某種語言設計並實現高效程序則是另一回事。這種說法對C++ 尤其適用,因為C++ 以擁有罕見的威力和豐富的表達能力為傲。只要適當使用,C++ 可以成為工作上的歡愉夥伴。巨大而變化多端的設計可以被直接表現出來,並且被有效實現出來。一組明智選擇並精心設計的classes, functions和templates可使程序編寫容易、直觀、高效、並且遠離錯誤。如果你知道怎麼做,寫出有效的C++ 程序並不太困難。然而如果沒有良好培訓,C++ 可能會導致你的代碼難以理解、不易維護、不易擴充、效率低下又錯誤連連。

本書的目的是告訴你如何有效運用C++。我假設你已經知道C++ 是個語言並且已經對它有某些使用經驗。這裡提供的是這個語言的使用導引,使你的軟件易理解、易維護、可移植、可擴充、高效、並且有著你所預期的行為。

我所提出的忠告大致分為兩類:一般性的設計策略,以及帶有具體細節的特定語言特性。設計上的討論集中於「“如何在兩個不同作法做法中擇一完成某項任務」”。你該選擇inheritance(繼承)還是templates(模板)?該選擇public繼承還是private繼承?該選擇private繼承還是composition(複合)?該選擇member函數還是non-member函數?該選擇pass-by-value還是pass-by-reference?在這些選擇點上做出正確決定很重要,因為一個不良的決定有可能不至於很快帶來影響,卻在發展後期才顯現惡果,那時候再來矯正往往既困難又耗時間,而且代價昂貴。

即使你完全知道該做什麼,完全進入正軌還是可能有點棘手。什麼是assignment 操作符的適當返回類型(return type)?何時該令析構函數為virtual?當operator new無法找到足夠內存時該如何行事?榨出這些細節很是重要,因為如果疏忽而不那麼做,幾乎總是導致未可預期的、也許神秘難解的程序行為。本書將幫助你趨吉避凶。

這並不是一本範圍廣泛的C++ 參考書。這是一份55個特定建議(我稱之為條款)的集合,談論如何強化你的程序和設計。每個條款有相當程度的獨立性,但大多數也參考其它其他條款。因此閱讀本書的一個方式是,從你感興趣的條款開始,然後看它逐步把你帶往何方。

本書也不是一本C++ 入門書籍。例如在第2章中我熱切告訴你實現構造函數(constructors)、析構函數(destructors)和賦值操作符(assignment operators)的一切種種,但我假設你已經知道或有能力在其它其他地方學得這些函數的功能以及它們如何聲明。市面上有許多C++ 書籍內含這類信息。

本書目的是要強調那些常常被漠視的C++ 編程方向與觀點。其它其他書籍描述C++ 語言的各個成分,本書告訴你如何結合那些成分以便最終獲得有效程序。其它其他書籍告訴你如何讓程序通過編譯,本書告訴你如何迴避編譯器難以顯露的問題。

在此同時,本書將範圍限制在標準C++ 上頭。書內只會出現官方規格書規範上所列的特性。本書十分重視移植性,所以如果你想找一些與平台相依的秘訣和竅門,這裡沒有。

另一個你不會在本書發現的是C++ 福音書——走向完美C++ 軟件的唯一真理之路。本書每個條款都提供引導,告訴我們如何發展出更好的設計,如何避免常見的問題,或是如何達到更高的效率,但沒有任何一個條款放之四海皆準、一體適用。軟件設計和實現是複雜的差使,被硬件、操作系統、應用程序的約束條件塗上五顏六色,所以我能做的最好的就是提供指南,讓你得以創造出更棒的程序。

如果任何時間你都遵循每一條準則,不太可能掉入C++ 最常見的陷阱中。但是所謂準則天生就帶有例外。這就是為什麼每個條款都有解釋與說明。這些解釋與說明是本書最重要的一部分。惟惟有了解條款背後的基本原理,你才能夠決定是否將它套用於你所開發的軟件,並奉行其所昭示的獨特約束。

本書的最佳用途就是徹底了解C++ 如何行為、為什麼那樣行為,以及如何運用其行為形成優勢。盲目應用書中條款是非常不適合的。但如果沒有好理由,你或許也不該違反任何一個條款。

目次

譯序vii

中英簡繁術語對照ix

目錄xvii

序言xxi

致謝xxiii

導讀 1

1. 讓自己習慣C++ 11

Accustoming Yourself to C++ 11

條款01:視C++ 為一個語言聯邦11

View C++ as a fedueration of languages 11

條款02:盡量以const, enum, inline替換#define 13

Prefer consts,enums, and inlines to #defines. 13

條款03:盡可能使用const 17

Use const whenever possible. 17

條款04:確定對像被使用前已先被初始化26

Make sure that objects are initialized before they're used. 26

2. 構造/析構/賦值運算34

Constructors, Destructors, and Assignment Operators 34

條款05:了解C++ 默默編寫並調用哪些函數34

Know what functions C++ silently writes and calls. 34

條款06:若不想使用編譯器自動生成的函數,就該明確拒絕37

Explicitly disallow the use of compiler-generated functions you do not want. 37

條款07:為多態基類聲明virtual析構函數40

Declare destructors virtual in polymorphic base classes. 40

條款08:別讓異常逃離析構函數44

Prevent exceptions from leaving destructors. 44

條款09:絕不在構造和析構過程中調用virtual函數48

Never call virtual functions during construction or destruction. 48

條款10:令operator= 返回一個reference to *this 52

Have assignment operators return a reference to *this. 52

條款11:在operator= 中處理「“自我賦值」” 53

Handle assignment to self in operator=. 53

條款12:複製對象時勿忘其每一個成分57

Copy all parts of an object. 57

3. 資源管理61

Resource Management 61

條款13:以對像管理資源61

Use objects to manage resources. 61

條款14:在資源管理類中小心coping行為66

Think carefully about copying behavior in resource-managing classes. 66

條款15:在資源管理類中提供對原始資源的訪問69

Provide access to raw resources in resource-managing classes. 69

條款16:成對使用new和delete時要採取相同形式73

Use the same form in corresponding uses of new and delete. 73

條款17:以獨立語句將newed對象置入智能指針75

Store newed objects in smart pointers in standalone statements. 75

4. 設計與聲明78

Designs and Declarations 78

條款18:讓接口容易被正確使用,不易被誤用78

Make interfaces easy to use correctly and hard to use incorrectly. 78

條款19:設計class猶如設計type 84

Treat class design as type design. 84

條款20:寧以pass-by-reference-to-const替換pass-by-value 86

Prefer pass-by-reference-to-const to pass-by-value. 86

條款21:必須返回對象時,別妄想返回其reference 90

Don't try to return a reference when you must return an object. 90

條款22:將成員變量聲明為private 94

Declare data members private. 94

條款23:寧以non-member、non-friend替換member函數98

Prefer non-member non-friend functions to member functions. 98

條款24:若所有參數皆需類型轉換,請為此採用non-member函數102

Declare non-member functions when type conversions should apply to all parameters. 102

條款25:考慮寫出一個不拋異常的swap函數106

Consider support for a non-throwing swap. 106

5. 實現113

Implementations 113

條款26:盡可能延後變量定義式的出現時間113

Postpone variable definitions as long as possible. 113

條款27:盡量少做轉型動作116

Minimize casting. 116

條款28:避免返回handles指向對象內部成分123

Avoid returning "handles" to object internals. 123

條款29:為“「異常安全」”而努力是值得的127

Strive for exception-safe code. 127

條款30:透徹了解inlining的里里外外134

Understand the ins and outs of inlining. 134

條款31:將文件間的編譯依存關係降至最低140

Minimize compilation dependencies between files. 140

6. 繼承與面向對象設計149

Inheritance and Object-Oriented Design 149

條款32:確定你的public繼承塑模出is-a關係150

Make sure public inheritance models "is-a." 150

條款33:避免遮掩繼承而來的名稱156

Avoid hiding inherited names. 156

條款34:區分接口繼承和實現繼承161

Differentiate between inheritance of interface and inheritance of implementation. 161

條款35:考慮virtual函數以外的其它其他選擇169

Consider alternatives to virtual functions. 169

條款36:絕不重新定義繼承而來的non-virtual函數178

Never redefine an inherited non-virtual function. 178

條款37:絕不重新定義繼承而來的缺省參數值180

Never redefine a function's inherited default parameter value. 180

條款38:通過複合塑模出has-a或"根據某物實現出" 184

Model "has-a" or "is-implemented-in-terms-of" through composition. 184

條款39:明智而審慎地使用private繼承187

Use private inheritance judiciously. 187

條款40:明智而審慎地使用多重繼承192

Use multiple inheritance judiciously. 192

7. 模板與泛型編程199

Templates and Generic Programming 199

條款41:了解隱式接口和編譯期多態199

Understand implicit interfaces and compile-time polymorphism. 199

條款42:了解typename的雙重意義203

Understand the two meanings of typename. 203

條款43:學習處理模板化基類內的名稱207

Know how to access names in templatized base classes. 207

條款44:將與參數無關的代碼抽離templates 212

Factor parameter-independent code out of templates. 212

條款45:運用成員函數模板接受所有兼容類型218

Use member function templates to accept "all compatible types." 218

條款46:需要類型轉換時請為模板定義非成員函數222

Define non-member functions inside templates when type conversions are desired. 222

條款47:請使用traits classes表現類型信息226

Use traits classes for information about types. 226

條款48:認識template元編程233

Be aware of template metaprogramming. 233

8. 定制new和delete 239

Customizing new and delete 239

條款49:了解new-handler的行為240

Understand the behavior of the new-handler. 240

條款50:了解new和delete的合理替換時機247

Understand when it makes sense to replace new and delete. 247

條款51:編寫new和delete時需固守常規252

Adhere to convention when writing new and delete. 252

條款52:寫了placement new也要寫placement delete 256

Write placement delete if you write placement new. 256

9. 雜項討論262

Miscellany 262

條款53:不要輕忽編譯器的警告262

Pay attention to compiler warnings. 262

條款54:讓自己熟悉包括TR1在內的標準程序庫263

Familiarize yourself with the standard library, including TR1. 263

條款55:讓自己熟悉Boost 269

Familiarize yourself with Boost. 269

A 本書之外273

B 新舊版條款對映277

索引280

您曾經瀏覽過的商品

購物須知

大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。

特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。

無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。

為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。

若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。

優惠價:87 465
缺貨無法訂購

暢銷榜

客服中心

收藏

會員專區