出版時(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格式下載