高質(zhì)量程序設(shè)計(jì)指南

出版時(shí)間:2007-5  出版社:電子工業(yè)  作者:林銳,韓永泉  頁(yè)數(shù):394  
Tag標(biāo)簽:無  

前言

  第3版  大約在2005年年初,本書第2版(和第1版)已經(jīng)售完。至今本書仍然受到軟件公司和C++程序員的關(guān)注,不斷有讀者詢問我從何處可以買到本書、什么時(shí)候再版。  說來慚愧,我從2002年寫完本書第1版后,再也沒有接觸過C++編程,現(xiàn)在對(duì)C++已經(jīng)很陌生了。2004年1月我離開上海貝爾,創(chuàng)辦了上海漫索計(jì)算機(jī)科技有限公司,專注于IT企業(yè)的研發(fā)管理整體解決方案(包括軟件產(chǎn)品和咨詢服務(wù))。我自己已經(jīng)從技術(shù)專家轉(zhuǎn)型為企業(yè)管理者,關(guān)注商務(wù)多于軟件技術(shù)。對(duì)于出版本書第3版,我的確心有余而力不足。幸好第2版的作者韓永泉仍然從事應(yīng)用軟件開發(fā),寶刀未老,他全面操辦了第3版,我只是掛名而已?! ≡谧珜懙?版的時(shí)候,為了更進(jìn)一步突出本書一貫強(qiáng)調(diào)的“高質(zhì)量程序設(shè)計(jì)”理念,對(duì)原書第2版的內(nèi)容做了一些調(diào)整:  首先是對(duì)第2版進(jìn)行了全面的修訂,改正了所有已經(jīng)發(fā)現(xiàn)的錯(cuò)誤,并對(duì)原有部分章節(jié)的內(nèi)容進(jìn)行了補(bǔ)充;  其次,刪除了第2版的第2章和第17章(名字空間和模板)。根據(jù)我們的觀察,除非是開發(fā)類庫(kù)等通用程序,第17章的內(nèi)容在現(xiàn)階段對(duì)應(yīng)用軟件開發(fā)人員一般不具有實(shí)際指導(dǎo)價(jià)值;  最后,增加了大約10個(gè)小節(jié)的內(nèi)容,分散在各章中。這些增加的內(nèi)容是實(shí)際應(yīng)用軟件開發(fā)過程中經(jīng)常會(huì)用到的技術(shù),可以顯著地提高編程效率,增強(qiáng)軟件的健壯性和可移植性?! 〔徽摫緯?版和第2版是好是差,它都被過度地使用了,產(chǎn)生了令作者始料不及的影響。本書的試題被國(guó)內(nèi)軟件公司大面積地用于C++程序員招聘考試,結(jié)果事先看過答案的應(yīng)試者考了高分而被錄取,還真有人向我致謝;也有不少人未看過答案而考了低分未被錄取,在網(wǎng)上把作者罵一通。本書的試題和答案早在2002年就公開了,不知有多少人看過,我很奇怪怎么到現(xiàn)在還被煞有介事地用于考試?! ”緯?版即將出版,我希望讀者正確地使用本書:請(qǐng)您學(xué)習(xí)和應(yīng)用您(或公司)認(rèn)為好的東西,不要把本書當(dāng)做標(biāo)準(zhǔn)來看待,不要全部照搬,也不必花費(fèi)很多時(shí)間去爭(zhēng)議本書是好還是壞?! 〉?版  《高質(zhì)量程序設(shè)計(jì)指南—C++/C語(yǔ)言》第1版上市后,一度成為暢銷書。網(wǎng)上評(píng)論甚多,褒貶參半。我們分析了讀者的批評(píng)和建議,總結(jié)了本書第1版的主要不足:  由于第1版原本是企業(yè)的培訓(xùn)教材,初衷是為了幫助程序員提高程序質(zhì)量,假設(shè)讀者已經(jīng)熟悉C++/C語(yǔ)法,所以內(nèi)容薄而精練、前后章節(jié)不連貫,看起來更像專題講座。出版社的宣傳工作做得很好,本書吸引了很多C++初學(xué)者和高級(jí)程序員。由于書中不講解入門知識(shí),導(dǎo)致很多初學(xué)者看不下去。有一些大學(xué)生聽了我的講座后,為表敬意特地買書讓我簽名,翻閱之后就塞進(jìn)書架當(dāng)做紀(jì)念品了。對(duì)于那些高級(jí)程序員而言,本書的大部分內(nèi)容他們?cè)缫呀?jīng)熟悉,好不容易看到幾處精彩的章節(jié),卻翻了幾頁(yè)就沒有了,真是不過癮啊?! ∥业难芯繉iL(zhǎng)是軟件工程和企業(yè)研發(fā)管理,而非程序設(shè)計(jì)。在C++/C編程方面自己僅僅是一名老工匠而已,我的確沒有時(shí)間沒有能力寫出讓初學(xué)者和高級(jí)程序員都喜歡的C++/C書籍。這本書炒作得過火,讓我騎虎難下了。從2002年11月起,我就開始物色真正的C++/C高手來寫本書的第2版。  恰好上海大唐移動(dòng)通信設(shè)備有限公司的韓永泉正在為公司寫C++/C培訓(xùn)教材,他也是本書第1版的讀者。韓永泉提出了很有價(jià)值的建議和批評(píng),并把他寫的培訓(xùn)教材發(fā)給我看,真是自投羅網(wǎng)??!  韓永泉是在西安電子科技大學(xué)計(jì)算機(jī)系讀的本科和碩士,內(nèi)功扎實(shí)。我和他碰頭交談了2小時(shí),就把第2版托付給他了。兩個(gè)月后,他把第2版的書稿交給我審閱。第2版的內(nèi)容比第1版多了一倍,其廣度符合我的設(shè)想,其深度完全出乎我的意料。為了闡述清楚C++/C程序之中的許多“為什么”,本書給出了大量的“提示、建議、規(guī)則”,并從編譯器實(shí)現(xiàn)的角度論述原理。這種深度非一般教科書能比,我用了一個(gè)月時(shí)間才審閱并且學(xué)習(xí)完畢,刪除了幾十頁(yè)過分深?yuàn)W的內(nèi)容(免得讓我自己看昏倒)。我相信第2版可以讓大多數(shù)高級(jí)程序員看過癮了?! 【W(wǎng)上有一些忌世憤俗者認(rèn)為計(jì)算機(jī)領(lǐng)域的每個(gè)分支都已經(jīng)有了世界名著,不具有世界頂尖水平的中國(guó)人再寫類似書籍都是欺世盜名的行為。這種極度自負(fù)和極度自卑的心態(tài)導(dǎo)致他們專愛罵國(guó)內(nèi)作者。如果中國(guó)作者的書籍中的技術(shù)錯(cuò)誤被他們抓住,經(jīng)過放大、推理、演繹之后基本上就能斷定作者是卑鄙之徒,于是磚頭就拍過來了(簡(jiǎn)稱“拍磚”)。拍磚者們遙相呼應(yīng),很快就能拍出江湖豪情,被拍的作者就成了倒霉蛋。有位好心的讀者怕我經(jīng)受不起,特意發(fā)給我一本拍磚大法——《拍磚十二流》以增強(qiáng)內(nèi)功?! 【W(wǎng)上自由漫罵既是網(wǎng)絡(luò)價(jià)值的體現(xiàn)又是民主的體現(xiàn),這是物質(zhì)文明和精神文明發(fā)展到一定境界的產(chǎn)物?!陡哔|(zhì)量程序設(shè)計(jì)指南——C++/C語(yǔ)言》第2版即將出版,作者忐忑不安地等待第二輪“拍磚”?! 〉?版  軟件質(zhì)量是被許多程序員掛在嘴上而不是放在心上的東西!  除了完全外行和真正的編程高手外,初讀本書,你最先的感受將是驚慌:“哇!我以前捏造的C++/C程序怎么會(huì)有那么多的毛病?”  別難過,作者只不過比你早幾年、多幾次驚慌而已?! ≌?qǐng)花幾小時(shí)認(rèn)真閱讀這本經(jīng)書,你將會(huì)獲益匪淺,這是前面N-1個(gè)讀者的建議。  編程老手與高手的誤區(qū)  自從計(jì)算機(jī)問世以來,程序設(shè)計(jì)就成了令人羨慕的職業(yè),程序員在受人寵愛之后容易發(fā)展成為毛病特多卻常能自我臭美的群體?! ∪缃裨贗nternet上流傳的“真正”的程序員據(jù)說是這樣的:  (1)真正的程序員沒有進(jìn)度表,只有討好領(lǐng)導(dǎo)的馬屁精才有進(jìn)度表,真正的程序員會(huì)讓領(lǐng)導(dǎo)提心吊膽。  (2)真正的程序員不寫使用說明書,用戶應(yīng)當(dāng)自己去猜想程序的功能?! 。?)真正的程序員幾乎不寫代碼的注釋,如果注釋很難寫,它理所當(dāng)然也很難讀。 ?。?)真正的程序員不畫流程圖,原始人和文盲才會(huì)干這事?! 。?)真正的程序員不看參考手冊(cè),新手和膽小鬼才會(huì)看?! 。?)真正的程序員不寫文檔也不需要文檔,只有看不懂程序的笨蛋才用文檔?! 。?)真正的程序員認(rèn)為自己比用戶更明白用戶需要什么。 ?。?)真正的程序員不接受團(tuán)隊(duì)開發(fā)的理念,除非他自己是頭頭。 ?。?)真正的程序員的程序不會(huì)第一次就正確運(yùn)行,但是他們?cè)敢馐刂鴻C(jī)器進(jìn)行若干個(gè)30小時(shí)的調(diào)試改錯(cuò)?! 。?0)真正的程序員不會(huì)在上午9:00到下午5:00之間工作,如果你看到他在上午9:00工作,這表明他從昨晚一直干到現(xiàn)在?!   【邆渖鲜鎏卣髟蕉?,越顯示程序員水平高,資格老。所以別奇怪,程序員的很多缺點(diǎn)竟然可以被當(dāng)做優(yōu)點(diǎn)來欣賞。就像在武俠小說中,那些獨(dú)來獨(dú)往、不受約束且?guī)c(diǎn)邪氣的高手最令人崇拜一樣。我曾經(jīng)也這樣信奉,并且希望自己成為那樣的“真正”的程序員,結(jié)果沒有得到好下場(chǎng)。  我從讀大學(xué)到博士畢業(yè)10年來一直勤奮好學(xué),累計(jì)編寫了數(shù)十萬(wàn)行C++/C代碼。有這樣的苦勞和疲勞,我應(yīng)該稱得上是編程老手了吧?  我開發(fā)的軟件都與科研相關(guān)(集成電路CAD和3D圖形學(xué)領(lǐng)域),動(dòng)輒數(shù)萬(wàn)行程序,技術(shù)復(fù)雜,難度頗高。這些軟件頻頻獲獎(jiǎng),有一個(gè)軟件獲得首屆中國(guó)大學(xué)生電腦大賽軟件展示一等獎(jiǎng)。在1995年開發(fā)的一套圖形軟件庫(kù)到2000年還有人買。羅列出這些“業(yè)績(jī)”,可以說明我算得上是編程高手了吧?  可惜這種個(gè)人感覺不等于事實(shí)?!   ∽x博期間我曾用一年時(shí)間開發(fā)了一個(gè)近10萬(wàn)行C++代碼的3D圖形軟件產(chǎn)品,我內(nèi)心得意表面謙虛地向一位真正的軟件高手請(qǐng)教。他雖然從未涉足過3D圖形領(lǐng)域,卻在幾十分鐘內(nèi)指出該軟件多處重大設(shè)計(jì)錯(cuò)誤。讓人感覺那套軟件是用紙糊的華麗衣服,扯一下掉一塊,戳一下破個(gè)洞。我目瞪口呆地意識(shí)到這套軟件毫無實(shí)用價(jià)值,一年的心血白花了,并且害死了自己的軟件公司?! ∪说念D悟通常發(fā)生在最心痛的時(shí)刻,在沮喪和心痛之后,我作了深刻反省,“面壁”半年,重新溫習(xí)軟件設(shè)計(jì)的基礎(chǔ)知識(shí)。補(bǔ)修“內(nèi)功”之后,又覺得腰板硬了起來。博士畢業(yè)前半年,我曾到微軟中國(guó)研究院找工作,接受微軟公司一位資深軟件工程師的面試。他讓我寫函數(shù)strcpy的代碼?! √菀琢税桑俊 ″e(cuò)!  這么一個(gè)小不點(diǎn)兒的函數(shù),他從三個(gè)方面考查: ?。?)編程風(fēng)格; ?。?)出錯(cuò)處理; ?。?)算法復(fù)雜度分析(用于提高性能)。  在大學(xué)里從來沒有人如此嚴(yán)格地考查過我的程序。我花了半小時(shí),修改了數(shù)次,他還不盡滿意,讓我回家好好琢磨。我精神抖擻地進(jìn)“考場(chǎng)”,大汗淋漓地出“考場(chǎng)”。這“高手”當(dāng)?shù)靡蔡C囊了。我又好好地反省了一次。  我把反省后的心得體會(huì)寫成文章放在網(wǎng)上,引起了不少軟件開發(fā)人員的共鳴。我因此有幸和國(guó)內(nèi)大型IT企業(yè)如華為、上海貝爾、中興等公司的同行們廣泛交流。大家認(rèn)為提高質(zhì)量與生產(chǎn)率是軟件工程要解決的核心問題。高質(zhì)量程序設(shè)計(jì)是非常重要的環(huán)節(jié),畢竟軟件是靠編程來實(shí)現(xiàn)的?! ∥覀冃哪恐械睦鲜謧兒透呤謧兡芊窬帉懗龈哔|(zhì)量的程序來?  不見得都能!  就我的經(jīng)歷與閱歷來看,國(guó)內(nèi)大學(xué)的計(jì)算機(jī)教育根本就沒有灌輸高質(zhì)量程序設(shè)計(jì)的觀念,教師們和學(xué)生們也很少自覺關(guān)心軟件的質(zhì)量。勤奮好學(xué)的程序員長(zhǎng)期在低質(zhì)量的程序堆中滾爬,吃盡苦頭之后才有一些心得體會(huì),長(zhǎng)進(jìn)極慢,我就是一例。  現(xiàn)在國(guó)內(nèi)IT企業(yè)擁有學(xué)士、碩士、博士文憑的軟件開發(fā)人員比比皆是,但他們?cè)诮邮艽髮W(xué)教育時(shí)就“先天不足”,豈能一到企業(yè)就突然實(shí)現(xiàn)質(zhì)的飛躍。試問有多少軟件開發(fā)人員對(duì)正確性、健壯性、可靠性、性能、易用性、清晰性、可擴(kuò)展性、安全性、兼容性、可移植性等質(zhì)量屬性了如指掌?并且能在實(shí)踐中運(yùn)用自如?“高質(zhì)量”可不是干活小心點(diǎn)就能實(shí)現(xiàn)的!  我們有充分的理由疑慮: ?。?)編程老手可能會(huì)長(zhǎng)期用隱含錯(cuò)誤的方式編程,習(xí)慣成自然后,被人指出發(fā)現(xiàn)毛病時(shí)都不愿相信那是真的! ?。?)編程高手可以在某一領(lǐng)域?qū)懗鰳O有水平的代碼,但未必能從全局把握軟件質(zhì)量的方方面面?! ∈聦?shí)證明如此。我到上海貝爾工作后,陸續(xù)面試或測(cè)試過近百名“新”、“老”程序員的編程技能,合格率低于50%。很少有人能夠?qū)懗鐾耆腺|(zhì)量要求的if語(yǔ)句,很多程  序員對(duì)指針、內(nèi)存管理一知半解……  領(lǐng)導(dǎo)們不敢相信這是真的。我做過現(xiàn)場(chǎng)試驗(yàn):有一次部門新進(jìn)14名碩士生,在開歡迎會(huì)之前對(duì)他們進(jìn)行“C++/C編程技能”摸底考試。我問大家試題難不難?所有的人都回答不難。結(jié)果沒有一個(gè)人及格,有半數(shù)人得零分?! 「?jìng)爭(zhēng)對(duì)手如華為、中興、大唐等公司的朋友們也做過試驗(yàn),也是類似的結(jié)果。真的不是我“心狠手辣”或者要求過高(甚至變態(tài)),而是很多軟件開發(fā)人員對(duì)自己的要求不夠高。要知道這些大公司的員工素質(zhì)在國(guó)內(nèi)IT企業(yè)中是比較位列前茅前列的,倘若他們的編程質(zhì)量都如此差的話,我們?cè)趺锤移谕行」灸贸龈哔|(zhì)量的軟件呢?連程序都編不好,還談什么振興民族軟件產(chǎn)業(yè)?! 《嗄陙?,我在軟件開發(fā)過程中的苦頭吃得實(shí)在太多了,現(xiàn)在總算被折磨清醒了。我打算定義編程老手和編程高手,請(qǐng)您別見笑?! 《x1:能長(zhǎng)期穩(wěn)定地編寫出高質(zhì)量程序的程序員稱為編程老手?! 《x2:能長(zhǎng)期穩(wěn)定地編寫出高難度、高質(zhì)量程序的程序員稱為編程高手。  根據(jù)上述定義,馬上得到第一推論:我既不是高手也算不上是老手?! ≡趯懘藭埃议喿x了不少程序設(shè)計(jì)方面的英文著作,越看越羞慚。因?yàn)榘l(fā)現(xiàn)自己在編程基本技能方面都未能全面掌握,頂多算是二流水平,還好意思談什么老手和高手。希望和我一樣在國(guó)內(nèi)土生土長(zhǎng)的程序員朋友們能夠做到: ?。?)知錯(cuò)就改; ?。?)經(jīng)常溫故而知新; ?。?)堅(jiān)持學(xué)習(xí),天天向上?!   ×咒J  2002年4月  上海貝爾阿爾卡特股份有限公司

內(nèi)容概要

  高質(zhì)量程序設(shè)計(jì)是軟件行業(yè)的薄弱環(huán)節(jié),大部分企業(yè)只能大量的測(cè)試和改錯(cuò)來提高軟件產(chǎn)品的質(zhì)量,為此付出了高昂的代價(jià)。因此,如何讓程序員熟練地掌握編程技術(shù)和編程規(guī)范,在開發(fā)過程中內(nèi)建高質(zhì)量代碼,是IT企業(yè)面臨的主要挑戰(zhàn)之一?! ”緯暂p松幽默的筆調(diào)向讀者論述了高質(zhì)量軟件開發(fā)方法與C++/C編程規(guī)范。它是作者多年從事軟件開發(fā)工作的經(jīng)驗(yàn)總結(jié)。本書共17章,第1章到第4章重點(diǎn)介紹軟件質(zhì)量和基本的程序設(shè)計(jì)方法;第5章到第16章重點(diǎn)闡述C++/C編程風(fēng)格、面向?qū)ο蟪绦蛟O(shè)計(jì)方法和一些技術(shù)專題;第17章闡述STL的原理和使用方法。  本書第1版和第2版部分章節(jié)曾經(jīng)在Imemet上廣泛流傳,被國(guó)內(nèi)IT企業(yè)的不少軟件開發(fā)人員采  用本書的附錄C《大學(xué)十年》是作者在網(wǎng)上發(fā)表的一個(gè)短篇傳記,文中所描述的充滿激情的學(xué)習(xí)和生活態(tài)度,感染了大批莘莘學(xué)子?! ”緯闹饕x者對(duì)象是IT企業(yè)的程序員和項(xiàng)目經(jīng)理,以及大專院校的本科生和研究生。

作者簡(jiǎn)介

  林銳,1973年生。1990年至1996年,就讀于西安電子科技大學(xué),獲碩士學(xué)位。 1997年至2000年,就讀于浙江大學(xué)計(jì)算機(jī)系,獲博士學(xué)位。大學(xué)期間兩度被評(píng)為中國(guó)百名跨世紀(jì)優(yōu)秀大學(xué)生,1996年獲電子工業(yè)部科技進(jìn)步二等獎(jiǎng),1997年獲首屆中國(guó)大學(xué)生電腦大賽軟件展示一等獎(jiǎng)。2000年7月加入上海貝爾有限公司,從事軟件工程和CMM的研究推廣工作,2003年7月當(dāng)選為Alcatel集團(tuán)軟件工程專家。2004年初創(chuàng)建上海漫索計(jì)算機(jī)科技有限公司(http://www.chinaspis.com),致力于創(chuàng)作適合國(guó)內(nèi)企業(yè)需求的軟件研發(fā)管理解決方案,包括方法論和軟件產(chǎn)品。工作期間出版著作六部。

書籍目錄

第1章 高質(zhì)量軟件開發(fā)之道	11.1 軟件質(zhì)量基本概念	11.1.1 如何理解軟件的質(zhì)量	11.1.2 提高軟件質(zhì)量的基本方法	31.1.3 “零缺陷”理念	41.2 細(xì)說軟件質(zhì)量屬性	41.2.1 正確性	41.2.2 健壯性	51.2.3 可靠性	51.2.4 性能	61.2.5 易用性	71.2.6 清晰性	71.2.7 安全性	71.2.8 可擴(kuò)展性	81.2.9 兼容性	81.2.10 可移植性	81.3 人們關(guān)注的不僅僅是質(zhì)量	91.3.1 質(zhì)量、生產(chǎn)率和成本之間的關(guān)系	91.3.2 軟件過程改進(jìn)的基本概念	111.4 高質(zhì)量軟件開發(fā)的基本方法	131.4.1 建立軟件過程規(guī)范	131.4.2 復(fù)用	151.4.3 分而治之	161.4.4 優(yōu)化與折中	171.4.5 技術(shù)評(píng)審	181.4.6 測(cè)試	191.4.7 質(zhì)量保證	211.4.8 改錯(cuò)	221.5 關(guān)于軟件開發(fā)的一些常識(shí)和思考	241.5.1 有最好的編程語(yǔ)言嗎	241.5.2 編程是一門藝術(shù)嗎	241.5.3 編程時(shí)應(yīng)該多使用技巧嗎	241.5.4 換更快的計(jì)算機(jī)還是換更快的算法	251.5.5 錯(cuò)誤是否應(yīng)該分等級(jí)	251.5.6 一些錯(cuò)誤的觀念	251.6 小結(jié)	26第2章 編程語(yǔ)言發(fā)展簡(jiǎn)史	272.1 編程語(yǔ)言大事記	272.2 Ada的故事	302.3 C/C++發(fā)展簡(jiǎn)史	312.4 Borland與Microsoft之爭(zhēng)	322.5 Java陣營(yíng)與Microsoft的較量	332.6 小結(jié)	36第3章 程序的基本概念	373.1 程序設(shè)計(jì)語(yǔ)言	373.2 語(yǔ)言實(shí)現(xiàn)	383.3 程序庫(kù)	403.4 開發(fā)環(huán)境	403.5 程序的工作原理	413.6 良好的編程習(xí)慣	42第4章 C++/C程序設(shè)計(jì)入門	454.1 C++/C程序的基本概念	454.1.1 啟動(dòng)函數(shù)main()	454.1.2 命令行參數(shù)	474.1.3 內(nèi)部名稱	484.1.4 連接規(guī)范	494.1.5 變量及其初始化	514.1.6 C Runtime Library	524.1.7 編譯時(shí)和運(yùn)行時(shí)的不同	524.1.8 編譯單元和獨(dú)立編譯技術(shù)	544.2 基本數(shù)據(jù)類型和內(nèi)存映像	544.3 類型轉(zhuǎn)換	564.3.1 隱式轉(zhuǎn)換	564.3.2 強(qiáng)制轉(zhuǎn)換	584.4 標(biāo)識(shí)符	604.5 轉(zhuǎn)義序列	614.6 運(yùn)算符	624.7 表達(dá)式	634.8 基本控制結(jié)構(gòu)	654.9 選擇(判斷)結(jié)構(gòu)	654.9.1 布爾變量與零值比較	664.9.2 整型變量與零值比較	674.9.3 浮點(diǎn)變量與零值比較	674.9.4 指針變量與零值比較	694.9.5 對(duì)if語(yǔ)句的補(bǔ)充說明	704.9.6 switch結(jié)構(gòu)	704.10  循環(huán)(重復(fù))結(jié)構(gòu)	714.10.1 for語(yǔ)句的循環(huán)控制變量	724.10.2 循環(huán)語(yǔ)句的效率	734.11 結(jié)構(gòu)化程序設(shè)計(jì)原理	784.12 goto/continue/break語(yǔ)句	794.13 示例	80第5章 C++/C常量	855.1 認(rèn)識(shí)常量	855.1.1 字面常量	855.1.2 符號(hào)常量	865.1.3 契約性常量	875.1.4 枚舉常量	875.2 正確定義符號(hào)常量	875.3 const與#define的比較	885.4 類中的常量	895.5 實(shí)際應(yīng)用中如何定義常量	90第6章 C++/C函數(shù)設(shè)計(jì)基礎(chǔ)	956.1 認(rèn)識(shí)函數(shù)	956.2 函數(shù)原型和定義	966.3 函數(shù)調(diào)用方式	976.4 認(rèn)識(shí)函數(shù)堆棧	996.5 函數(shù)調(diào)用規(guī)范	1006.6 函數(shù)連接規(guī)范	1016.7 參數(shù)傳遞規(guī)則	1026.8 返回值的規(guī)則	1046.9 函數(shù)內(nèi)部實(shí)現(xiàn)的規(guī)則	1076.10 存儲(chǔ)類型及作用域規(guī)則	1096.10.1 存儲(chǔ)類型	1096.10.2 作用域規(guī)則	1106.10.3 連接類型	1116.11 遞歸函數(shù)	1136.12 使用斷言	1166.13 使用const提高函數(shù)的健壯性	1186.13.1 用const修飾函數(shù)的參數(shù)	1186.13.2 用const修飾函數(shù)的返回值	119第7章 C++/C指針、數(shù)組和字符串	1217.1 指針	1217.1.1 指針的本質(zhì)	1217.1.2 指針的類型及其支持的運(yùn)算	1237.1.3 指針傳遞	1257.2 數(shù)組	1267.2.1 數(shù)組的本質(zhì)	1267.2.2 二維數(shù)組	1287.2.3 數(shù)組傳遞	1297.2.4 動(dòng)態(tài)創(chuàng)建、初始化和刪除數(shù)組的方法	1317.3 字符數(shù)組、字符指針和字符串	1337.3.1 字符數(shù)組、字符串和\0的關(guān)系	1337.3.2 字符指針的誤區(qū)	1347.3.3 字符串拷貝和比較	1347.4 函數(shù)指針	1357.5 引用和指針的比較	137第8章 C++/C高級(jí)數(shù)據(jù)類型	1418.1 結(jié)構(gòu)(Struct)	1418.1.1 關(guān)鍵字struct與class的困惑	1418.1.2 使用struct	1428.1.3 位域	1458.1.4 成員對(duì)齊	1478.2 聯(lián)合(Union)	1598.3 枚舉(Enum)	1618.4 文件	163第9章 C++/C編譯預(yù)處理	1659.1 文件包含	1659.1.1 內(nèi)部包含衛(wèi)哨和外部包含衛(wèi)哨	1659.1.2 頭文件包含的合理順序	1669.2 宏定義	1669.3 條件編譯	1699.3.1 #if、#elif和#else	1699.3.2 #ifdef 和 #ifndef	1709.4 #error	1719.5 #pragma	1719.6 #和##運(yùn)算符	1719.7 預(yù)定義符號(hào)常量	172第10章 C++/C文件結(jié)構(gòu)和程序版式	17510.1 程序文件的目錄結(jié)構(gòu)	17510.2 文件的結(jié)構(gòu)	17610.2.1 頭文件的用途和結(jié)構(gòu)	17610.2.2 版權(quán)和版本信息	17710.2.3 源文件結(jié)構(gòu)	17810.3 代碼的版式	17810.3.1 適當(dāng)?shù)目招?17810.3.2 代碼行及行內(nèi)空格	17910.3.3 長(zhǎng)行拆分	18010.3.4 對(duì)齊與縮進(jìn)	18110.3.5 修飾符的位置	18210.3.6 注釋風(fēng)格	18210.3.7 ADT/UDT版式	183第11章 C++/C應(yīng)用程序命名規(guī)則	18511.1 共性規(guī)則	18511.2 簡(jiǎn)單的Windows應(yīng)用程序命名	186第12章 C++面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述	18912.1 漫談面向?qū)ο?18912.2 對(duì)象的概念	19012.3 信息隱藏與類的封裝	19112.4 類的繼承特性	19512.5 類的組合特性	20012.6 動(dòng)態(tài)特性	20112.6.1 虛函數(shù)	20212.6.2 抽象基類	20212.6.3 動(dòng)態(tài)綁定	20512.6.4 運(yùn)行時(shí)多態(tài)	20712.6.5 多態(tài)數(shù)組	20812.7 C++對(duì)象模型	21512.7.1 對(duì)象的內(nèi)存映像	21512.7.2 隱含成員	22412.7.3 C++編譯器如何處理成員函數(shù)	22512.7.4 C++編譯器如何處理靜態(tài)成員	22512.8 小結(jié)	226第13章 對(duì)象的初始化、拷貝和析構(gòu)	22913.1 構(gòu)造函數(shù)與析構(gòu)函數(shù)的起源	22913.2 為什么需要構(gòu)造函數(shù)和析構(gòu)函數(shù)	23013.3 構(gòu)造函數(shù)的成員初始化列表	23213.4 對(duì)象的構(gòu)造和析構(gòu)次序	23413.5 構(gòu)造函數(shù)和析構(gòu)函數(shù)的調(diào)用時(shí)機(jī)	23513.6 構(gòu)造函數(shù)和賦值函數(shù)的重載	23613.7 示例:類String的構(gòu)造函數(shù)和析構(gòu)函數(shù)	23813.8 何時(shí)應(yīng)該定義拷貝構(gòu)造函數(shù)和拷貝賦值函數(shù)	23913.9 示例:類String的拷貝構(gòu)造函數(shù)和拷貝賦值函數(shù)	24013.10 用偷懶的辦法處理拷貝構(gòu)造函數(shù)和拷貝賦值函數(shù)	24213.11 如何實(shí)現(xiàn)派生類的基本函數(shù)	243第14章 C++函數(shù)的高級(jí)特性	24714.1 函數(shù)重載的概念	24714.1.1 重載的起源	24714.1.2 重載是如何實(shí)現(xiàn)的	24714.1.3 當(dāng)心隱式類型轉(zhuǎn)換導(dǎo)致重載函數(shù)產(chǎn)生二義性	24914.2 成員函數(shù)的重載、覆蓋與隱藏	25014.2.1 重載與覆蓋	25014.2.2 令人迷惑的隱藏規(guī)則	25114.2.3 擺脫隱藏	25314.3 參數(shù)的默認(rèn)值	25414.4 運(yùn)算符重載	25514.4.1 基本概念	25514.4.2 運(yùn)算符重載的特殊性	25614.4.3 不能重載的運(yùn)算符	25714.4.4 重載++和——	25714.5 函數(shù)內(nèi)聯(lián)	25914.5.1 用函數(shù)內(nèi)聯(lián)取代宏	25914.5.2 內(nèi)聯(lián)函數(shù)的編程風(fēng)格	26014.5.3 慎用內(nèi)聯(lián)	26114.6 類型轉(zhuǎn)換函數(shù)	26114.7 const成員函數(shù)	264第15章 C++異常處理和RTTI	26715.1 為什么要使用異常處理	26715.2 C++異常處理	26815.2.1 異常處理的原理	26815.2.2 異常類型和異常對(duì)象	26915.2.3 異常處理的語(yǔ)法結(jié)構(gòu)	27015.2.4 異常的類型匹配規(guī)則	27215.2.5 異常說明及其沖突	27215.2.6 當(dāng)異常拋出時(shí)局部對(duì)象如何釋放	27315.2.7 對(duì)象構(gòu)造和析構(gòu)期間的異常	27315.2.8 如何使用好異常處理技術(shù)	27515.2.9 C++的標(biāo)準(zhǔn)異常	27815.3 虛函數(shù)面臨的難題	27815.4 RTTI及其構(gòu)成	28015.4.1 起源	28015.4.2 typeid運(yùn)算符	28115.4.3 dynamic_cast運(yùn)算符	28315.4.4 RTTI的魅力與代價(jià)	285第16章 內(nèi)存管理	28716.1 內(nèi)存分配方式	28716.2 常見的內(nèi)存錯(cuò)誤及其對(duì)策	28816.3 指針參數(shù)是如何傳遞內(nèi)存的	28916.4 free和delete把指針怎么啦	29116.5 動(dòng)態(tài)內(nèi)存會(huì)被自動(dòng)釋放嗎	29216.6 杜絕“野指針”	29216.7 有了malloc/free為什么還要new/delete	29316.8 malloc/free的使用要點(diǎn)	29516.9 new有3種使用方式	29616.9.1 plain new/delete	29616.9.2 nothrow new/delete	29716.9.3 placement new/delete	29716.10 new/delete的使用要點(diǎn)	30016.11 內(nèi)存耗盡怎么辦	30116.12 用對(duì)象模擬指針	30216.13 泛型指針auto_ptr	30516.14 帶有引用計(jì)數(shù)的智能指針	30616.15 智能指針作為容器元素	310第17章 學(xué)習(xí)和使用STL	32317.1 STL簡(jiǎn)介	32317.2 STL頭文件的分布	32417.2.1 容器類	32417.2.2 泛型算法	32517.2.3 迭代器	32517.2.4 數(shù)學(xué)運(yùn)算庫(kù)	32517.2.5 通用工具	32517.2.6 其他頭文件	32617.3 容器設(shè)計(jì)原理	32617.3.1 內(nèi)存映像	32617.3.2 存儲(chǔ)方式和訪問方式	32717.3.3 順序容器和關(guān)聯(lián)式容器的比較	32817.3.4 如何遍歷容器	33117.3.5 存儲(chǔ)空間重分配問題	33217.3.6 什么樣的對(duì)象才能作為STL容器的元素	33317.4 迭代器	33417.4.1 迭代器的本質(zhì)	33417.4.2 迭代器失效及其危險(xiǎn)性	33817.5 存儲(chǔ)分配器	34617.6 適配器	34717.7 泛型算法	35017.8 一些特殊的容器	35417.8.1 string類	35417.8.2 bitset并非set	35517.8.3 節(jié)省存儲(chǔ)空間的vector	35717.8.4 空容器	35817.9 STL容器特征總結(jié)	36017.10 STL使用心得	362附錄A C++/C試題	365附錄B C++/C試題答案與評(píng)分標(biāo)準(zhǔn)	369附錄C 大學(xué)十年	375附錄D 《大學(xué)十年》后記	393附錄E 術(shù)語(yǔ)與縮寫解釋	395參考文獻(xiàn)	397

圖書封面

圖書標(biāo)簽Tags

評(píng)論、評(píng)分、閱讀與下載


    高質(zhì)量程序設(shè)計(jì)指南 PDF格式下載


用戶評(píng)論 (總計(jì)20條)

 
 

  •   書買來了一直沒怎么看,慚愧啊
  •   好書啊!好多東西是其他書上沒有的!
  •   性價(jià)比,給力
  •   高質(zhì)量程序設(shè)計(jì)指南
  •   看到網(wǎng)上說的比較好,就買了
  •   很基礎(chǔ)很透徹
  •   別人代買的 還不錯(cuò)···
  •     林銳博士在寫這本書的時(shí)候畢竟很早了,所以書中出現(xiàn)了很多錯(cuò)誤。
      
      第1章 文件結(jié)構(gòu)
      
      每個(gè)C++/C程序通常分為兩個(gè)文件。
      
      //錯(cuò)誤。沒有強(qiáng)調(diào)翻譯單元的概念。
      
      另一個(gè)文件用于保存程序的實(shí)現(xiàn)(implementation),稱為定義(definition)文件。
      
      //有誤。實(shí)現(xiàn)不簡(jiǎn)單等同于定義。例如,類的完整聲明也是類的定義,但不是完整的實(shí)現(xiàn)。頭文件也可以存放其它定義(例如模板和內(nèi)聯(lián)函數(shù)的實(shí)現(xiàn))。
      
      
      1.2
      建議1-2-1
      
      在C++語(yǔ)法中,類的成員函數(shù)可以在聲明的同時(shí)被定義,并且自動(dòng)成為內(nèi)聯(lián)函數(shù)。這雖然會(huì)帶來書寫上的方便,但卻造成了風(fēng)格不一致,弊大于利。建議將成員函數(shù)的定義與聲明分開,不論該函數(shù)體有多么小。
      
      //這條建議一般不適用于類模板。
      
      
      1.4
      
      頭文件能加強(qiáng)類型安全檢查。如果某個(gè)接口被實(shí)現(xiàn)或被使用時(shí),其方式與頭文件中的聲明不一致,編譯器就會(huì)指出錯(cuò)誤,這一簡(jiǎn)單的規(guī)則能大大減輕程序員調(diào)試、改錯(cuò)的負(fù)擔(dān)。
      
      //在使用合理的情況下,這基本上是正確的,但頭文件可以導(dǎo)致其它方面——像重構(gòu)(典型情況如重命名一個(gè)函數(shù))的復(fù)雜化。
      
      
      第2章 程序的版式
      這章基本是主觀內(nèi)容。讀者需要注意風(fēng)格是有爭(zhēng)議的,其中的“良好風(fēng)格”或“不良風(fēng)格”并非公認(rèn)。
      
      2.8
      很多C++教課書受到Biarne Stroustrup第一本著作的影響,不知不覺地采用了“以數(shù)據(jù)為中心”的書寫方式,并不見得有多少道理。
      
      我建議讀者采用“以行為為中心”的書寫方式,即首先考慮類應(yīng)該提供什么樣的函數(shù)。這是很多人的經(jīng)驗(yàn)——“這樣做不僅讓自己在設(shè)計(jì)類時(shí)思路清晰,而且方便別人閱讀。因?yàn)橛脩糇铌P(guān)心的是接口,誰(shuí)愿意先看到一堆私有數(shù)據(jù)成員!”
      
      //“ Biarne Stroustrup ”拼寫錯(cuò)誤。C++之父的名字是 Bjarne Stroustrup 。有些一廂情愿了: C++ 的類定義中既然允許顯式地表示 private 成員,就不是純粹的接口描述方式。以我個(gè)人的經(jīng)驗(yàn),數(shù)據(jù)成員寫在后面可能會(huì)導(dǎo)致順序閱讀代碼時(shí)需要回溯。當(dāng)類定義長(zhǎng)度較小時(shí)這點(diǎn)影響不大,但定義長(zhǎng)度比較長(zhǎng)的時(shí)候(例如Loki::Functor里的代碼)就會(huì)需要較頻繁地滾屏,影響代碼閱讀效率。
      
      
      第3章 命名規(guī)則
      這章也基本是主觀內(nèi)容。
      
      3.1
      規(guī)則3-1-1
      
      標(biāo)識(shí)符應(yīng)當(dāng)直觀且可以拼讀,可望文知意,不必進(jìn)行“解碼”。
      
      //這點(diǎn)和此文建議使用的匈牙利命名法有一定程度的矛盾。
      
      
      規(guī)則3-1-3
      
      命名規(guī)則盡量與所采用的操作系統(tǒng)或開發(fā)工具的風(fēng)格保持一致。
      
      //盡管大部分人應(yīng)該樂于支持這個(gè)觀點(diǎn),不過事實(shí)上有時(shí)候無法實(shí)現(xiàn)。例如同時(shí)使用標(biāo)準(zhǔn)庫(kù)和Windows API 風(fēng)格的代碼。這時(shí)倒不妨直接約定允許根據(jù)上下文選擇要使用的命名風(fēng)格。要點(diǎn)是,應(yīng)該讓人看出某個(gè)名稱是用哪個(gè)風(fēng)格命名的,而不至于一眼就混淆來源。
      
      
      3.2
      規(guī)則3-2-7
      
      為了防止某一軟件庫(kù)中的一些標(biāo)識(shí)符和其它軟件庫(kù)中的沖突,可以為各種標(biāo)識(shí)符加上能反映軟件性質(zhì)的前綴。例如三維圖形標(biāo)準(zhǔn)OpenGL的所有庫(kù)函數(shù)均以gl開頭,所有常量(或宏定義)均以GL開頭。
      
      //在 C++ 中應(yīng)該考慮是否可以用命名空間代替前綴。
      
      
      第4章 表達(dá)式和基本語(yǔ)句
      
      我真的發(fā)覺很多程序員用隱含錯(cuò)誤的方式寫表達(dá)式和基本語(yǔ)句,我自己也犯過類似的錯(cuò)誤。
      
      //作者似乎沒搞清楚“錯(cuò)誤”一詞的語(yǔ)義。
      
      
      4.3
      規(guī)則4-3-4
      不要寫成
       if (p== 0) // 容易讓人誤解p是整型變量
       if (p!= 0)
      
      //事實(shí)上,C++中的NULL典型地就是 int 字面量 0 (考慮到成文時(shí)間,不提新標(biāo)準(zhǔn)的空指針類型),和 int 兼容。以 Bjarne Stroustrup 的觀點(diǎn),這樣恰恰會(huì)使人誤以為 NULL 不是整數(shù),因此推薦用 0 而不是 NULL 。
      
      
      4.3.5
      
      或者改寫成更加簡(jiǎn)練的return (condition ? x : y);
      
      //這里的括號(hào)是多余的。
      
      
      4.4
      這節(jié)不是語(yǔ)言本身而是涉及語(yǔ)言實(shí)現(xiàn)的內(nèi)容。以現(xiàn)在的觀點(diǎn)來看,優(yōu)化器會(huì)可能會(huì)在此做一些工作。當(dāng)然了解一些相關(guān)原理大體上還是有益的。
      
      第5章 常量
      
      常量是一種標(biāo)識(shí)符,它的值在運(yùn)行期間恒定不變。C語(yǔ)言用 #define來定義常量(稱為宏常量)。C++ 語(yǔ)言除了 #define外還可以用const來定義常量(稱為const常量)。
      
      //譚XX風(fēng)格的信口開河。這段引文中逗號(hào)或者句號(hào)之間的內(nèi)容,沒一個(gè)能算得上是正確的。
      
      
      5.2
      規(guī)則5-2-1
      
      在C++程序中只使用 const常量而不使用宏常量,即const常量完全取代宏常量。
      
      //這是有問題的。事實(shí)上很多情況下 const 只能讓編譯器被修飾的對(duì)象當(dāng)做只讀變量,而非編譯期的真正意義的常量進(jìn)行處理。與 #define 的符號(hào)常量(字面量)相比,只讀變量受到了一些限制,例如不能作 case 的標(biāo)號(hào)。
      
      
      第6章 函數(shù)設(shè)計(jì)
      
       C語(yǔ)言中,函數(shù)的參數(shù)和返回值的傳遞方式有兩種:值傳遞(pass by value)和指針傳遞(pass by pointer)。
      
      //錯(cuò)誤。形式上, C 語(yǔ)言函數(shù)參數(shù)只按值傳遞。所謂的指針傳遞是按值傳遞的一種,只是傳遞參數(shù)的類型是指針而已。
      
      
      6.1
      規(guī)則6-1-1
      
      參數(shù)的書寫要完整,不要貪圖省事只寫參數(shù)的類型而省略參數(shù)名字。如果函數(shù)沒有參數(shù),則用void填充。
      
      //不妥當(dāng)。有時(shí)候參數(shù)的名稱并非有意義,像 int max(int, int); 之類的原型,寫了也不會(huì)讓函數(shù)的意義更清楚。此外,并沒有指出C函數(shù)沒有參數(shù)時(shí)參數(shù)列表為 void ,這和省略參數(shù)列表(接受任意參數(shù))是不同的。而 C++ 中省略參數(shù)列表和 void 參數(shù)相同,參數(shù)列表 ... 接受不確定個(gè)數(shù)的參數(shù)。
      
      
      6.2
      規(guī)則6-2-3
      
      不要將正常值和錯(cuò)誤標(biāo)志混在一起返回。正常值用輸出參數(shù)獲得,而錯(cuò)誤標(biāo)志用return語(yǔ)句返回。
      
      //在C++中可以不使用此規(guī)則而使用異常(在 C 中理論上也可以類似地使用 setjmp/longjmp ,但容易造成語(yǔ)義不明確,實(shí)際上基本不用)。
      
      
      6.3
      規(guī)則6-3-1
      
      在函數(shù)體的“入口處”,對(duì)參數(shù)的有效性進(jìn)行檢查。
      
      //在函數(shù)接口語(yǔ)義明確的情況下并非是必需的。例如 C 標(biāo)準(zhǔn)庫(kù) <string.h> 中以及 POSIX 標(biāo)準(zhǔn)中的許多函數(shù)。
      
      規(guī)則6-3-2
      
      在函數(shù)體的“出口處”,對(duì)return語(yǔ)句的正確性和效率進(jìn)行檢查。
      
      //同樣不是必需的。此外檢查可能損失效率。
      
      //這里是誤讀。但原文關(guān)于“臨時(shí)變量”的說法有誤。
      
      要搞清楚返回的究竟是“值”、“指針”還是“引用”。
      
      //注意返回對(duì)象的語(yǔ)義,但是刻意區(qū)分“值”和“指針”是不必要的,嚴(yán)格上是錯(cuò)誤的——它們根本就不是可以比較的一類概念。
      
      建議6-4-2
      
      函數(shù)體的規(guī)模要小,盡量控制在50行代碼之內(nèi)。
      
      //盡管為數(shù)不多,有些特殊情況,如編譯器的某些分析程序,是明顯的反例。
      
      
      第7章 內(nèi)存管理
      “640Kought to be enough for everybody
      
      —Bill Gates 1981”
      
      //和本章主題無關(guān)。
      
      
      7.1
      
      內(nèi)存分配方式有三種
      
      //有誤。內(nèi)存分配具體方式由實(shí)現(xiàn)決定,語(yǔ)言只限制存儲(chǔ)類。
      
      
       7.2
      漏了重復(fù)釋放內(nèi)存的錯(cuò)誤(這通常會(huì)引起程序崩潰)。
      規(guī)則7-2-1
      
      用malloc或new申請(qǐng)內(nèi)存之后,應(yīng)該立即檢查指針值是否為NULL。防止使用指針值為NULL的內(nèi)存。
      
      //對(duì) C++ 而言是錯(cuò)誤的。 ISO C++ 關(guān)于內(nèi)存分配失敗的默認(rèn)行為是拋出 std::bad_alloc 異常。如果要使分配失敗不拋出異常,使用 nothrow 版本,或者設(shè)置實(shí)現(xiàn)相關(guān)的編譯選項(xiàng)。
      
      規(guī)則7-2-5
      
      用free或delete釋放了內(nèi)存之后,立即將指針設(shè)置為NULL,防止產(chǎn)生“野指針”。
      
      //不一定必要。例如指針是自動(dòng)變量,在退出所在的塊作用域被自動(dòng)釋放時(shí)。
      
      
      7.3.1
      
      該語(yǔ)句企圖修改常量字符串的內(nèi)容而導(dǎo)致運(yùn)行錯(cuò)誤
      
      //有誤。 C 語(yǔ)言中字符串字面量(具有數(shù)組類型)未必是常量。當(dāng)然還是應(yīng)該避免修改字符串字面量,這是未定義行為。
      
      
      7.9
      
      為new和malloc設(shè)置異常處理函數(shù)。例如VisualC++可以用_set_new_hander函數(shù)為new設(shè)置用戶自己定義的異常處理函數(shù),也可以讓malloc享用與new相同的異常處理函數(shù)。
      
      //應(yīng)該補(bǔ)充的是,標(biāo)準(zhǔn)庫(kù)有 std::set_new_handler 。
      
      
      第8章C++函數(shù)的高級(jí)特性
      
      const與virtual機(jī)制僅用于類的成員函數(shù)。
      
      //應(yīng)該強(qiáng)調(diào)“非靜態(tài)”成員函數(shù),否則就是錯(cuò)誤的。
      
      
     ?。m然似乎沒有更多明顯的錯(cuò)誤,不過遺漏的地方一堆,堅(jiān)決不吐槽……= =)
      
      第9章 類的構(gòu)造函數(shù)、析構(gòu)函數(shù)與賦值函數(shù)
      9.1
      
      Stroustrup的命名方法既簡(jiǎn)單又合理:讓構(gòu)造函數(shù)、析構(gòu)函數(shù)與類同名,由于析構(gòu)函數(shù)的目的與構(gòu)造函數(shù)的相反,就加前綴‘~’以示區(qū)別。
      
      //錯(cuò)誤。構(gòu)造函數(shù)和析構(gòu)函數(shù)是無名的(這個(gè)細(xì)節(jié)決定了一些語(yǔ)言特性的限制,例如不能 using 聲明基類的構(gòu)造函數(shù)),看起來名稱和類名相同的調(diào)用方式其實(shí)是語(yǔ)法的限制。
      
      非內(nèi)部數(shù)據(jù)類型的成員對(duì)象應(yīng)當(dāng)采用第一種方式初始化,以獲取更高的效率。
      
      //效率在這里倒是次要的(很容易被編譯器優(yōu)化掉),重要的是語(yǔ)義。另外,初始化列表的一些行為是受到特殊限制的,例如基類子對(duì)象和成員的初始化順序和異常。
      
      9.7
      
     ?。ㄈ匀徊幌胪虏勐┑魋wap&copy這樣高效可靠的方法而在operator=實(shí)現(xiàn)里分配內(nèi)存……)
      
      
      第10章 類的繼承與組合
      首先標(biāo)題有點(diǎn)問題。類可以繼承,組合的應(yīng)該是類的實(shí)例而非本身。
      
      如果將對(duì)象比作房子,那么類就是房子的設(shè)計(jì)圖紙。所以面向?qū)ο笤O(shè)計(jì)的重點(diǎn)是類的設(shè)計(jì),而不是對(duì)象的設(shè)計(jì)。
      
      //因果關(guān)系不成立。而且觀點(diǎn)是有問題的,僅適于經(jīng)典的 class-based OOD 。
      
      
      10.2
      規(guī)則10-2-1
      
      若在邏輯上A是B的“一部分”(a partof),則不允許B從A派生,而是要用A和其它東西組合出B。
      
      //錯(cuò)誤。盡管一般組合能夠勝任這項(xiàng)工作,但并非絕對(duì)??梢允褂胮rivate繼承完成相同的任務(wù),并且提供覆蓋成員函數(shù)的特性。這是組合無法完成的。
      
      
      第11章 其它編程經(jīng)驗(yàn)
      11.1.3
      
      如果在編寫const成員函數(shù)時(shí),不慎修改了數(shù)據(jù)成員,或者調(diào)用了其它非const成員函數(shù),編譯器將指出錯(cuò)誤
      
      //錯(cuò)誤漏了 mutable 修飾的成員這個(gè)特例。
      
      建議11-3-8
      
      避免編寫技巧性很高代碼。
      
      //不應(yīng)該逃避。技巧性高不意味著難以理解;即使難以理解,也可以通過注釋彌補(bǔ)。當(dāng)然,前提是技巧要使用得合理。
      
      建議11-3-13
      
      把編譯器的選擇項(xiàng)設(shè)置為最嚴(yán)格狀態(tài)。
      
      //有時(shí)候現(xiàn)實(shí)不允許,例如考慮已有代碼的兼容性,需要配置時(shí)會(huì)帶來額外的復(fù)雜性。
      
      
      附錄C :C++/C試題的答案與評(píng)分標(biāo)準(zhǔn)
      標(biāo)準(zhǔn)答案示例:
      const float EPSINON = 0.00001;
      
      if ((x >= - EPSINON) && (x <= EPSINON)
      
      //如果是“標(biāo)準(zhǔn)”的,為什么不用標(biāo)準(zhǔn)庫(kù)的 <float.h>/<cfloat> 的FLT_EPSILON而自己重復(fù)發(fā)明輪子?
      
      
      三、簡(jiǎn)答題(25分)
      
      1、頭文件中的ifndef/define/endif 干什么用?(5分)
      
      答:防止該頭文件被重復(fù)引用。
      
      //錯(cuò)誤。條件編譯顯然不只用于給頭文件增加 header guard 。
      
      
      四、有關(guān)內(nèi)存的思考題(每小題5分,共20分)
      答:程序崩潰。
      因?yàn)镚etMemory并不能傳遞動(dòng)態(tài)內(nèi)存,
      Test函數(shù)中的 str一直都是 NULL。
      
      strcpy(str, "hello world");將使程序崩潰。
      
      //錯(cuò)誤。未定義行為不等同于程序崩潰,盡管很可能是這樣。
      
      
      六、編寫類String的構(gòu)造函數(shù)、析構(gòu)函數(shù)和賦值函數(shù)(25分)
      
      String& String::operate =(const String &other)
      
      //關(guān)鍵字operator拼寫錯(cuò)誤。實(shí)現(xiàn)冗余就不說了。
      
      EOF
  •     我很喜歡第一版,也就是100多頁(yè)的那一份。
      
      我是帶著膜拜看完的第三版,也是一種忍受。下面說下評(píng)論。
      
      第一章:
       我覺得說了很多廢話,像這些輔助的章節(jié),不深不淺的東西,沒必要花30頁(yè)去說,既啰嗦又讓人看不懂,其實(shí)有個(gè)幾頁(yè)就可以講完了嘛,要看的話人家會(huì)去找一下軟件工程的專著。
      
      第二章:
       還蠻有趣。
      第三章:
       覺得還不錯(cuò)。因?yàn)楹芏嘈率滞植磺迨裁词鞘裁矗裁词钦Z(yǔ)言什么是庫(kù),程序是如何跑起來的等等,還有把VC++就當(dāng)成C++的,新手我也差不多是這樣。
      
      第四章以及其后:
       我覺得太基礎(chǔ)的語(yǔ)法等東西講得太多了,簡(jiǎn)直就是啰嗦,而且像他這樣說的話,新手看不懂,老手覺得拖沓~!我覺得一點(diǎn)意義都沒有,講講這講講那~完全就是來湊字?jǐn)?shù)~?。。。。。。?br />   反正之后的章節(jié),除了第一版的內(nèi)容以外,其他的都是雞肋,食之無味,棄之嘛,它打印在書上了又搽不掉~!?。。?br />   
      不好,完全不推薦,我只推薦第一版那100多頁(yè)的那個(gè)版本就可以了~~~~~~
  •     寫得不錯(cuò)的一本書,但是后面的一些面向?qū)ο蟮谋容^深一些的地方因?yàn)樽约核接邢薏荒芎芎玫捏w會(huì)。
      還會(huì)看第二遍、第n遍的。 后記中《大學(xué)十年》,給了我很大的鼓勵(lì)。讓我覺得,牛逼是來自與苦逼,沒有奮斗,沒有癡狂的喜歡,走不到高峰。加油,共勉。
  •     整本書是比較實(shí)用的,編寫出來的代碼也會(huì)非常漂亮。
      但問題是,這種代碼編寫的規(guī)范不該由coder來執(zhí)行,而應(yīng)該是一個(gè)自動(dòng)的代碼規(guī)范器來完成。
      C++本來就是很惡心的語(yǔ)言,如果coder每天沒日沒夜的按照林博士說的來打空格和{},不知會(huì)降低多少工作效率。
      
      但總體來說,這本書仍然是五顆星。因?yàn)樗_實(shí)有用。
  •     和《C語(yǔ)言深度剖析》一樣,這是國(guó)內(nèi)難得的一本好書。主要是介紹如何寫出高質(zhì)量C/C++程序。所謂的高質(zhì)量,主要是指代碼可讀性好,軟件易維護(hù)。書中提出的一些建議讓我受益匪淺。如果你覺得自己的代碼寫得很爛,那么快去讀讀這本書吧。
  •     國(guó)人所寫的C++技術(shù)書籍大多很坑爹!難得這本是個(gè)例外,值得一讀,尤其是對(duì)計(jì)算機(jī)系畢業(yè)生而言。這本書出自經(jīng)驗(yàn)豐富的一線軟件工程師之手,比某些大學(xué)里閉門造車的教授們東拼西湊的教程強(qiáng)太多了!
      
      本書也就定位在初、中級(jí)C/C++技術(shù)水平。你不可能通過本書學(xué)會(huì)C++,也不能讀過此書就精通了C++,這本書只是眾多C++技術(shù)書籍中值得你閱讀的一本。
      
      真有不少公司就是用該書后面的C/C++測(cè)試題做筆試題,雖然這對(duì)沒讀過這本書的同學(xué)有些不公平。不過如果真理解了那些測(cè)試題,對(duì)C++初學(xué)者的幫助也是很明顯的。
      
      雖然這本書的缺點(diǎn)也有不少,比如說文風(fēng)不夠簡(jiǎn)練,某些章節(jié)內(nèi)容冗長(zhǎng)拖沓,但瑕不掩瑜這本書仍然是我所讀過的、國(guó)人所寫對(duì)C++初學(xué)者最有幫助的書籍。
  •     西電前輩寫的,是一本有特色的國(guó)產(chǎn)技術(shù)書,比現(xiàn)在市面上好多互相抄來抄去的書要好出很多。在傳統(tǒng)C++語(yǔ)法書之外,這本書可以輔助我們對(duì)一些內(nèi)容進(jìn)行再次的深刻認(rèn)識(shí)。書里面有一些編程規(guī)范的東西,對(duì)于寫程序的人來說,還是不錯(cuò)的,可以培養(yǎng)好的編碼習(xí)慣。最后附了林銳的自傳——《我的大學(xué)十年》,文筆不錯(cuò)。
  •     適合已經(jīng)看了C++ primer,effective C++之類,并且有較強(qiáng)糾錯(cuò)和猜測(cè)能力的人來看。。。如果是把這本書拿來做準(zhǔn)備找工的筆試面試還是不錯(cuò)的,最好能結(jié)合一下其它的資料。
      最后的后記寫的很精彩,佩服這種精力旺盛的人
  •     這是一本曾經(jīng)被很多人奉為經(jīng)典的書,據(jù)說不少公司曾經(jīng)直接作為招聘的筆試題。我在高中的時(shí)候看過第一版,也幫助我養(yǎng)成了不少受用至今的好習(xí)慣,然后稀里糊涂地考上了西電技術(shù)物理學(xué)院,做了林銳的學(xué)弟。
      
      我是在考上西電計(jì)算機(jī)院之后買了這本書的第三版,也就是我成為韓永泉的學(xué)弟的時(shí)候……看我們老師上課時(shí)候給的示例代碼里還似乎能看出來這本書的一點(diǎn)點(diǎn)影響,甚至老師上課舉得第一個(gè)例子就是GetMemory。但是現(xiàn)在看來這本書雖然加入了一些關(guān)于OO和STL的東西但是大部分內(nèi)容還是照搬第一版,沒有任何變化。而書中林博士的語(yǔ)言風(fēng)格實(shí)在讓我非常頭大,我實(shí)在是……忍著惡心讀完的很多部分。
      
      如果這本書能夠真的用心去認(rèn)真雕琢,完全可以接近Effective系列的水平,但是顯然作者做的還遠(yuǎn)不夠
  •     不錯(cuò),我找到了電子版,是完整的。
      
      http://www.5ifreedom.com/viewthread.php?tid=508&extra=page%3D1
      
      可以感受到書的確是不錯(cuò)的。
      
      同意他的觀點(diǎn)
  •     難得的技術(shù)方面的簡(jiǎn)體中文好書,看的我那叫一個(gè)那啥......
      
      在學(xué)校里廣聞林銳師兄的光輝事跡,并影響了班里的一群哥們兒,大四一年里專業(yè)課N多不過,成群結(jié)隊(duì)拿著林銳的《大學(xué)十年》跑去找輔導(dǎo)員想辦法,雖然我一次也沒這么干過,因?yàn)槲疑钪稽c(diǎn):他是輔導(dǎo)員又不是副導(dǎo)演?!不過還真是有舉事成功的哥們,引無數(shù)哥們競(jìng)挨罵并夭折......
      
      反正,沒事玩兒?jiǎn)h。
  •     很適合剛走上工作崗位的人,和那些不注意編程習(xí)慣的人。提的東西比較廣、很重要,可惜講的不太深,看完這本書以后建議找更多的讀物來深入理解。
      
      比較有趣的是,有些公司招聘可能會(huì)用到里面的內(nèi)容……
      
      每個(gè)軟件公司都應(yīng)當(dāng)有自己的編碼規(guī)范,遵照?qǐng)?zhí)行即可,用不著爭(zhēng)論和本書的細(xì)微區(qū)別。
      
      關(guān)于C語(yǔ)言的嵌入式編程還可以參考MISRA的工業(yè)標(biāo)準(zhǔn)編程規(guī)范。
  •   感覺語(yǔ)言風(fēng)格讓我讀的很費(fèi)力且沒勁
 

250萬(wàn)本中文圖書簡(jiǎn)介、評(píng)論、評(píng)分,PDF格式免費(fèi)下載。 第一圖書網(wǎng) 手機(jī)版

京ICP備13047387號(hào)-7