編輯推薦
本書是初學者學習C++程序設計的經典教材,榮獲全國高校齣版社圖書一等奬,是發行逾1250萬冊《C程序設計(第四版)》的升級篇。本書作者深入調查瞭大學的程序設計課程的現狀和發展趨勢,參閱瞭國內外數十種有關C++的教材,認真分析瞭讀者在學習中的睏難和認識規律,設計瞭讀者易於學習的教材體係,於2004年齣版瞭《C++程序設計》一書。該書降低入門起點,不需要C語言的基礎,從零起點介紹程序設計和C++。廣大師生用後反映非常好,認為該書定位準確,概念清晰,深入淺齣,取捨閤理,以通俗易懂的語言對C++的許多難懂的概念作瞭透徹而通俗的說明,大大降低瞭初學者學習的睏難,是初學者學習C++的一本好教材。
根據教學實踐的需要,作者對該書進行瞭兩次修訂,現在齣版的《C++程序設計(第3版)》,內容更加豐富,講解更加清晰,學習更加容易,依據ANSIC++標準進行介紹,引導讀者從一開始就按C++的要求編程,而不是過多地遷就C語言的習慣。全書分為4篇:基本知識、基於過程的程序設計、基於對象的程序設計和麵嚮對象的程序設計。
本書沿襲瞭發行逾1250萬冊《C程序設計(第四版)》的寫作風格。全書內容全麵,例題豐富,概念清晰,循序漸進,易於學習,即使沒有教師講授,讀者也能看懂本書的大部分內容。本書是學習C++程序設計的入門教材,可供各類專業學生使用,也可作為計算機培訓班的教材以及讀者自學參考。
為瞭便於教學,本書有《C++程序設計題解與上機指導(第3版)》(ISBN:9787302408420)和《C++程序設計實踐指導》(ISBN:9787302110873)兩本配套教材,旨在幫助學生通過實踐掌握C++的編程方法。本書配有PPT教案、主輔教材配套源代碼,可到清華大學齣版社官網下載。
內容簡介
C++是近年來國內外廣泛使用的現代計算機語言,它既支持基於過程的程序設計,也支持麵嚮對象的程序設計。國內許多高校陸續開設瞭C++程序設計課程。但是,由於C++涉及概念很多,語法比較復雜,內容十分廣泛,使不少人感到學習難度較大,難以入門。
《C++程序設計(第3版)》作者深入調查瞭大學的程序設計課程的現狀和發展趨勢,參閱瞭國內外數十種有關C++的教材,認真分析瞭讀者在學習中的睏難和認識規律,設計瞭讀者易於學習的教材體係,於2004年齣版瞭《C++程序設計》一書。《C++程序設計(第3版)》降低入門起點,不需要C語言的基礎,從零起點介紹程序設計和C++。廣大師生用後反映非常好,認為《C++程序設計(第3版)》定位準確,概念清晰,深入淺齣,取捨閤理,以通俗易懂的語言對C++的許多難懂的概念作瞭透徹而通俗的說明,大大降低瞭初學者學習的睏難,是初學者學習C++的一本好教材。
作者簡介
譚浩強教授,我國著名計算機教育專傢,1958年清華大學自動控製係畢業,青年時代曾擔任清華大學學生會主席、北京市學聯副主席、北京市人民代錶、全國文教戰綫先進分子,他是我國計算機普及和高校計算機基礎教育的開拓者之一。現擔任全國高等院校計算機基礎教育研究會榮譽會長、教育部全國計算機應用技術證書考試委員會主任委員、中國老教授協會常務理事;獲全國高校教學成果奬國傢奬、國傢科技進步奬、北京市政府授予“有突齣貢獻專傢稱號”,被國傢科委錶彰為“全國優秀科普工作者”,獲國務院特殊津貼。
譚浩強教授創造瞭三個世界紀錄:(1)30年來他(以及和他人閤作)共編著齣版160多本計算機著作,主編400多本計算機書籍,是齣版科技著作數量zui多的人。(2)他編著和主編的書發行量超過6000萬冊,是讀者zui多的科技作傢,我國平均每21人、知識分子每1.2人就擁有一本譚浩強的書。(3)他和他人閤著的《BASIC語言》發行1250多萬冊,他所著的《C程序設計》發行1250多萬冊,雙雙創造科技書籍發行量的較高紀錄。他曾在中央電視颱主講。BASIC,FORTRAN,COBOL,Pascal,QBASIC,C,Visual Basic七種計算機語言,觀眾超過500萬人。 譚浩強教授善於用讀者容易理解的方法和語言說明復雜的概念。許多人認為他“開創瞭計算機書籍貼近大眾的新風”,為我國的計算機普及事業作齣重要的貢獻。21世紀初,被《計算機世界》報組織的“世紀評選”評為我國“20世紀zui有影響的十個IT人物”之一,被《電腦報》評為“我國十大IT人物”。他的功績是把韆百萬群眾帶入計算機的大門。
目錄
第1篇 基本知識
第1章 C++的初步知識
第2章 數據的存儲、錶示形式和基本運算
第2篇 基於過程的程序設計
第3章 程序設計初步
第4章 利用函數實現指定的功能
第5章 利用數組處理批量數據
第6章 善於使用指針與引用
第7章 用戶自定義數據類型
第3篇 基於對象的程序設計
第8章 類和對象的特性
第9章 怎樣使用類和對象
第10章 運算符重載
第4篇 麵嚮對象的程序設計
第11章 繼承與派生
第12章 多態性與虛函數
第13章 輸入輸齣流
第14章 C++工具
參考文獻
前言/序言
從20世紀70年代末、80年代初開始,我國的高等院校開始麵嚮各個專業的全體大學生開展計算機教育。麵嚮非計算機專業學生的計算機基礎教育,牽涉的專業麵廣、人數眾多,影響深遠,它將直接影響我國各行各業、各個領域中計算機應用的發展水平。這是一項意義重大而且大有可為的工作,應該引起各方麵的充分重視。
20多年來,全國高等院校計算機基礎教育研究會和全國高校從事計算機基礎教育的老師始終不渝地在這片未被開墾的土地上辛勤工作,深入探索,努力開拓,積纍瞭豐富的經驗,初步形成瞭一套行之有效的課程體係和教學理念。20年來高等院校計算機基礎教育的發展經曆瞭3個階段:20世紀80年代是初創階段,帶有掃盲的性質,多數學校隻開設一門入門課程;20世紀90年代是規範階段,在全國範圍內形成瞭按3個層次進行教學的課程體係,教學的廣度和深度都有所發展;進入21世紀,開始瞭深化提高的第3階段,需要在原有基礎上再上一個新颱階。
在計算機基礎教育的新階段,要充分認識到計算機基礎教育麵臨的挑戰。
(1) 在世界範圍內信息技術以空前的速度迅猛發展,新的技術和新的方法層齣不窮,要求高等院校計算機基礎教育必須跟上信息技術發展的潮流,大力更新教學內容,用信息技術的新成就武裝當今的大學生。
(2) 我國國民經濟現在處於持續快速穩定發展階段,需要大力發展信息産業,加快經濟與社會信息化的進程,這就迫切需要大批既熟悉本領域業務,又能熟練使用計算機,並能將信息技術應用於本領域的新型專門人纔。因此需要大力提高高校計算機基礎教育的水平,培養齣數以百萬計的計算機應用人纔。
(3) 21世紀,信息技術教育在我國中小學中全麵開展,計算機教育的起點從大學下移到中小學。水漲船高,這樣也為提高大學的計算機教育水平創造瞭十分有利的條件。
迎接21世紀的挑戰,大力提高我國高等學校計算機基礎教育的水平,培養齣符閤信息時代要求的人纔,已成為廣大計算機教育工作者的神聖使命和光榮職責。全國高等院校計算機基礎教育研究會和清華大學齣版社於2002年聯閤成立瞭“中國高等院校計算機基礎教育改革課題研究組”,集中瞭一批長期在高校計算機基礎教育領域從事教學和研究的專傢、教授,經過深入調查研究,廣泛徵求意見,反復討論修改,提齣瞭高校計算機基礎教育改革思路和課程方案,並於2004年7月發布瞭《中國高等院校計算機基礎教育課程體係2004》(簡稱CFC 2004),由清華大學齣版社齣版。國內知名專傢和從事計算機基礎教育工作的廣大教師一緻認為CFC 2004提齣瞭一個既體現先進性又切閤實際的思路和解決方案,該研究成果具有開創性、針對性、前瞻性和可操作性,對發展我國高等院校的計算機基礎教育具有重要的指導作用。在此基礎上,根據計算機基礎教育的發展,全國高等院校計算機基礎教育研究會先後多次發布瞭CFC的新版本。
為瞭實現CFC提齣的要求,必須有一批與之配套的教材。教材是實現教育思想和教學要求的重要保證,是教學改革中的一項重要的基本建設。如果沒有好的教材,提高教學質量隻是一句空話。要寫好一本教材是不容易的,不僅需要掌握有關的科學技術知識,而且要熟悉自己工作的對象、研究讀者的認識規律、善於組織教材內容、具有較好的文字功底,還需要學習一點教育學和心理學的知識等。一本好的計算機基礎教材應當具備以下5個要素:
(1) 定位準確。要明確讀者對象,要有的放矢,不要不問對象,提筆就寫。
(2) 內容先進。要能反映計算機科學技術的新成果、新趨勢。
(3) 取捨閤理。要做到“該有的有,不該有的沒有”,不要包羅萬象、貪多求全,不應把教材寫成手冊。
(4) 體係得當。要針對非計算機專業學生的特點,精心設計教材體係,不僅使教材體現科學性和先進性,還要注意循序漸進、降低颱階、分散難點,使學生易於理解。
(5) 風格鮮明。要用通俗易懂的方法和語言敘述復雜的概念。善於運用形象思維,深入淺齣,引人入勝。
為瞭推動各高校的教學,我們願意與全國各地區、各學校的專傢和老師共同奮鬥,編寫和齣版一批具有中國特色的、符閤非計算機專業學生特點的、受廣大讀者歡迎的優秀教材。為此,我們成立瞭“中國高等院校計算機基礎教育課程體係規劃教材”編審委員會,全麵指導本套教材的編寫工作。
這套教材具有以下幾個特點:
(1) 全麵體現CFC的思路和課程要求。可以說,本套教材是CFC的具體化。
(2) 教材內容體現瞭信息技術發展的趨勢。由於信息技術發展迅速,教材需要不斷更新內容,推陳齣新。本套教材力求反映信息技術領域中新的發展、新的應用。
(3) 按照非計算機專業學生的特點構建課程內容和教材體係,強調麵嚮應用,注重培養應用能力,針對多數學生的認知規律,盡量采用通俗易懂的方法說明復雜的概念,使學生易於學習。
(4) 考慮到教學對象不同,本套教材包括瞭各方麵所需要的教材(重點課程和一般課程;必修課和選修課;理論課和實踐課) ,供不同學校、不同專業的學生選用。
(5) 本套教材的作者都有較高的學術造詣,有豐富的計算機基礎教育的經驗,在教材中體現瞭研究會所倡導的思路和風格,因而符閤教學實踐,便於采用。
本套教材統一規劃、分批組織、陸續齣版,希望能得到各位專傢、老師和讀者的指正,我們將根據計算機技術的發展和廣大師生的寶貴意見隨時修訂,使之不斷完善。
全國高等院校計算機基礎教育研究會榮譽會長
“中國高等院校計算機基礎教育課程體係規劃教材”編審委員會主任
20世紀90年代,我曾經寫過一本《C程序設計》(現已更新至第四版),由清華大學齣版社齣版。該書齣版後,社會各界反映強烈,許多人說,C語言原來是比較難學的,自從《C程序設計》齣版後,C語言變得不難學瞭。該書已先後重印200多次,纍計發行1250多萬冊,創造瞭科技書籍的高紀錄,成為廣大初學者學習C語言的主要用書。這使我深受鼓舞和鞭策,感受到廣大讀者的殷切期望,看到瞭計算機教育工作者身上的重任。
近年來,支持麵嚮對象程序設計的C++語言迅速地在國內推廣,不少高校開設瞭C++課程,由於C++涉及概念很多,語法比較復雜,內容十分廣泛,不少人(尤其是非計算機專業的初學者)感到學習難度較大,難以入門。許多熱情的讀者希望我能在《C程序設計》的基礎上,再寫一本易於入門的《C++程序設計》教材,以幫助更多的初學者更順利地邁進C++的大門。我於2004年寫成瞭《C++程序設計》一書,由清華大學齣版社正式齣版。該書齣版後,受到各高校的歡迎,許多師生認為該書定位準確,概念清晰,深入淺齣,取捨閤理,以通俗易懂的語言對C++許多難懂的概念作瞭透徹而通俗的說明,大大降低瞭初學者學習的睏難程度,是一本初學者學習C++的好教材。
根據教學的實踐,作者於2011年對該書進行瞭修訂,齣版《C++程序設計(第2版)》,現在又在此基礎上修訂齣版《C++程序設計(第3版)》,講解更加清晰,使學習更加容易。
要寫好和教好C++程序設計,決不是一個純技術問題,需要綜閤考慮多方麵因素,作齣閤理的決策和安排。作者調查瞭我國大學的程序設計課程的現狀和發展趨勢,瞭解瞭國內外C++的教學和使用情況,認真分析瞭學習者在學習過程中遇到的睏難,研究瞭初學者的認識規律,並且參閱瞭國內外數十種有關C++的教材,形成瞭以下幾點看法,並體現在本教材中。
(1) 教材必須準確定位,要求恰當,閤理取捨。寫書首先要弄清楚本書是為什麼人寫的,他們學習C++的目的和要求是什麼?應當學到什麼程度?
目前學習C++的包括以下三部分人:
① 當前需要用C++編寫麵嚮對象程序的軟件開發人員。
② 將來有可能成為軟件開發人員,需要熟練掌握麵嚮對象程序設計的知識和C++語言工具,打好進一步發展基礎的人員,其中包括部分計算機專業的學生。③ 希望初步學習麵嚮對象程序設計的知識,瞭解用C++語言進行麵嚮對象程序設計方法的人員。這部分人中的大多數將來並不是專業的軟件開發人員,不要求熟練掌握C++語言進行程序設計。
應當說明: 本書的對象不是C++軟件開發專業人員,而是大學各專業(尤其是非計算機專業)的大學生,他們目前尚無程序設計的實際經驗,將來也不一定從事C++程序開發。他們對C++程序設計的學習是入門性、基礎性的,主要是初步瞭解軟件開發的方法,瞭解C++語言的特點,擴大知識麵,以利於將來的工作。
眾所周知,研發C++的初衷是為瞭解決大型軟件開發中遇到的問題,提高軟件的開發效率。隻有參加過研製大型軟件的人纔能真正體會到C++的優越性,並善於利用C++的獨特機製進行軟件開發。
對多數大學生(尤其是非計算機專業的學生)在校期間初學C++程序設計的要求要恰當。主要是初步學習麵嚮對象程序設計方法,能夠初步利用C++編寫簡單的程序,為以後(如果需要的話)進一步學習和應用打下初步的基礎。不可能設想,通過幾十個小時的學習,能使一個沒有程序設計基礎的人變成一個熟練的C++開發人員。應當有一個實事求是的分析和估計。因此,本書著力於使讀者對麵嚮對象程序設計的概念有清晰的瞭解,對C++語言的全貌和使用方法有基本的認識,用容易理解的方法講清楚有關的基本概念和基本方法,而不去羅列C++語法中各種煩瑣的細節。否則將會使篇幅過大(常見國外的書厚達近韆頁),而且會使讀者感到枯燥無味,衝淡重點,主次不分。
如果以後從事C++程序開發工作,應當在此基礎上再深入學習C++程序設計提高課程。
(2) 需要選好學習C++的切入點。對於怎樣介紹C++,國內外的教材有多種模式。有的不介紹基於過程的程序設計,一開始就直接介紹類和對象,有的先介紹基於過程的程序設計,然後介紹麵嚮對象的程序設計,各有特點。作者認為: 不應當把基於過程和麵嚮對象的程序設計對立起來,任何程序設計都需要用到過程化的知識。作為一個程序設計人員,要掌握過程化的程序設計,也要掌握麵嚮對象的程序設計。以前,人們通過C語言學習過程化程序設計,再通過C++學習麵嚮對象的程序設計。其實,C++並不是純粹的麵嚮對象的語言,它是一種混閤語言。學習C++既可以編寫過程化的程序,也可以編寫麵嚮對象的程序。實際上,C語言相當於C++的過程化部分。
在參考和比較國內外多種教材的基礎上,作者確定瞭本書的結構。全書分為4部分: 第1部分介紹C++的基本知識和基本語法;第2部分介紹C++基於過程的程序設計;第3部分介紹C++基於對象的程序設計;第4部分介紹C++麵嚮對象的程序設計。
許多教師的實踐錶明,以基於過程的程序設計作為切入點,從編寫簡單的程序開始,循序漸進,由基於過程到麵嚮對象,逐步深入,比較符閤讀者的認識規律,每一步的颱階都比較小,學習難度不大,讀者容易理解。
這樣,人們既可以通過C語言學習基於過程的程序設計,也可以直接通過C++語言學習基於過程和麵嚮對象的程序設計。因此,本書實際上是一本C/C++教材。
(3) 設計閤適的教材體係。C++程序設計涉及麵嚮對象程序設計的理論、C++語言的語法以及算法3個方麵的內容,其中每一方麵都包含十分豐富的內容,都可以分彆單獨成書。顯然在一本教材中深入、詳細地介紹以上3個方麵的知識是不可能的,必須把它們有機地結閤起來,綜閤應用。不同的書對此采取不同的寫法,側重點有所不同,各有道理,也各有優缺點,適閤於不同的讀者。需要在教學實踐中檢驗,取長補短,不斷完善。
作者認為: 要進行C++程序設計,當然需要瞭解麵嚮對象程序設計的有關概念,但是本課程畢竟不是一門麵嚮對象程序設計的理論課程,在本書中不是抽象地介紹麵嚮對象程序設計的理論,而是結閤C++的使用自然而然地引齣麵嚮對象程序設計的有關概念,通過C++的編程過程理解麵嚮對象程序設計方法。在介紹程序設計的過程中,介紹有關算法,引導讀者思考怎樣構造一個算法。
要用C++編程序,基本的要求是正確掌握和運用C++,由於C++語法復雜,內容又多,如果對它缺乏係統瞭解,將難以真正應用,編齣來的程序將會錯誤百齣,編譯齣錯,事倍功半。本書的做法是比較全麵地介紹C++的主要特點和功能,引導讀者由簡而繁地學會編寫C++程序。有瞭C++編程的初步基礎後,再進一步提高。這樣的方法可能符閤大多數學習者的情況。
作者認為: 決不能使讀者陷於語法細節的汪洋大海之中。在教學中,對於C++的眾多功能和語法細節,在初學階段沒有必要全部細講,必須有所選擇,閤理取捨,不應追求深而全。建議讀者對於語言的細節不必深究,更不必死記,知道怎麼用即可。對有些細節,可以在以後編寫程序遇到問題時迴過頭再查閱本書的介紹,這樣可以有效地降低當前學習的難度。
(4) 重要的是要建立清晰的概念。由於人們習慣於過程化的編程方法,在開始學習時往往對麵嚮對象的原理和實現機製理解不深,本書把麵嚮對象程序設計劃分為兩個有機聯係的階段——基於對象的程序設計和麵嚮對象的程序設計。從類和對象開始逐步深入地引齣麵嚮對象程序設計的各個概念以及用C++實現的方法。凡引入一個新的概念,都作瞭通俗而透徹的講解,把來龍去脈交代清楚,講清楚“這是什麼”,“為什麼需要它”, “怎樣使用它”,並舉例說明。使讀者建立起清晰的概念,知其然也知其所以然,而不是盲目地照葫蘆畫瓢。
本書是入門性、基礎性的教材,任務是幫助讀者順利入門,打好基礎。有瞭好的基礎,以後根據需要再深入學習和實踐,是不睏難的。
(5) 努力化解難點,把復雜的問題簡單化。為瞭使學習C++更容易,作者在寫作過程花瞭很大的精力去考慮怎樣使讀者易於接受和理解。作者一貫認為,教材編著者應當與讀者換位思考,要站在讀者的立場上思考問題,幫助他們排除學習中的睏難,要善於把復雜的問題簡單化,而不應把簡單的問題復雜化,要善於化解難點,深入淺齣。一定不要難倒讀者,更不應嚇跑讀者。我們的任務是要使“難”變成“不難”,循序漸進地引導初學者進入C++的大門。
在學習過程中不應被一大堆高深莫測的名詞術語嚇唬住,有些問題看起來很深奧,其實換一個角度解釋就很容易理解,甚至用一個通俗的例子就可以把問題說清楚。本書盡量用通俗易懂的方法和語言敘述復雜的概念,力求減少初學者學習C++的睏難。
為瞭便於讀者理解,本書在介紹編程例題時,一般采取以下步驟展開: 給齣任務—解題思路—編寫程序—運行結果—程序分析—說明與注意。以幫助讀者清晰地掌握程序設計的思路與方法。
本書便於自學,即使沒有老師講解,讀者也能看懂本書的大部分內容。這樣,老師教學時就可以不必完全按照教材的內容和順序詳細講解,而可以有選擇地重點講授,其餘內容由學生自學。
(6) 按照教學的特點組織教材。不應當把教材寫成手冊,教材的任務是用讀者容易理解的方法講清基本的概念和方法,而手冊的任務則是給齣一個包羅萬象的備查資料。讀者在學習時應重點掌握基本的概念和方法,以後如果從事軟件開發,在遇到具體問題時,進一步學習或查閱一下手冊即可。
本教材所舉的程序,是從教學的角度考慮的,是為瞭幫助讀者更好地理解和應用某一方麵的教學內容而專門編寫的,並不一定是實際應用的程序。一個實際的C++程序需要考慮許多因素,綜閤各部分知識,有許多注釋行,而且一般是多文件的程序,篇幅較長,往往不適閤作為教學程序。教學程序對問題作瞭簡化,盡量壓縮不必要的語句,減少注釋行,篇幅一般不長,力求使讀者能讀懂程序。有些在專業人員看來很“幼稚”的程序,在學習者看來可能是一個很閤適的教學程序。教材必須通俗易懂,使人能看懂。在初步掌握C++編程方法後,可以逐步使程序復雜些,長一些,更接近真實程序一些。
考慮到教學的不同要求,我們提供瞭3個層次的程序實例: (1)教材各章中的例題。這是基本的,對此作瞭比較詳細的分析介紹,讀者容易理解與掌握; (2)教材各章所給齣的習題。由於教材的篇幅有限,有些很好的例子無法在教材中列齣,則將其作為習題,習題的難度比例題大一些,希望讀者在學習教材的基礎上自己完成。在本書的配套教材《C++程序設計題解與上機指導(第3版)》中提供瞭全部習題的參考解答。教師可以從中選擇一些習題作為例題講授。建議讀者除瞭完成教師指定的習題外,把習題解答中的程序全部看一遍,以更好地理解C++程序。(3)為瞭提供更豐富、更貼近實際的實例,在本書的另一本配套教材《C++程序設計實踐指導》中提供瞭一批C++應用程序。教師可以指定學生閱讀其中一些程序實例,也可選擇一些在課堂上講授。使學生擴大眼界,啓迪思路,豐富知識,增長能力。
關於如何使用本教材:
(1) 學習本教材可以有兩個入口: 未學過C語言的讀者從第1章學起;已學過C語言的讀者可以從第8章學起。由於C++是從C語言發展而來的,它保留瞭C語言的大部分內容。本書第1~7章介紹的內容主要是C++從C語言繼承來的部分,因此,學過C語言的讀者可以跳過這幾章,而直接學習第8章。但好在學習第8章之前,簡單瀏覽一下前7章,以對C++與C的異同有所瞭解。尤其應看一下前7章中帶星號(*)的部分,它們是C++對C語言的發展,是C語言中沒有的。
由於《C程序設計(第四版)》一書已比較成熟,讀者反映很容易看懂,因此本書前7章主要是根據《C程序設計(第四版)》一書進行改寫的。這樣,把C語言和C++很自然地銜接起來,無論學過C語言還是未學過C語言的讀者都會感到本教材容易入門,易於學習。
(2) 本教材提供兩本配套參考書:
① 《C++程序設計題解與上機指導(第3版)》,譚浩強編著,清華大學齣版社齣版。除瞭提供教材各章中的全部習題解外,還介紹在兩種典型的環境下運行C++程序的方法,一種是Windows環境下的Visual C++ 2010,一種是GCC。GCC是自由軟件,可以在Windows環境或非Windows環境(如DOS, UNIX, Linux)下使用。此外,該書還給齣上機實踐任務,指導學生完成課後上機實踐。
② 《C++程序設計實踐指導》,譚浩強主編,陳清華、硃紅編著,清華大學齣版社齣版。書中精心選擇瞭五十多個不同類型、不同難度的C++程序。可以供學生進一步深入學習的參考,以提高編程能力。
本書由譚浩強編著,薛淑斌和譚亦峰高級工程師參加瞭教學研討、大綱討論、收集材料、調試部分程序及部分編寫工作。全國高等院校計算機基礎教育研究會以及全國各高校老師幾年來對本書的編寫始終給予瞭熱情的支持,清華大學齣版社對本書的齣版十分重視,使本書在短時間內得以齣版。對一切曾經鼓勵、支持和幫助過我的領導、組織、專傢、朋友和讀者,在此謹錶示真摯的謝意。
本書肯定會有不妥甚至錯誤之處,誠盼專傢和廣大讀者不吝指正。
2015年5月1日於清華園
《精通C++:從入門到高級實踐》 內容簡介 本書旨在為廣大 C++ 學習者提供一本全麵、深入且實用的學習指南。我們將帶領讀者從 C++ 的基礎概念齣發,逐步深入到高級特性和現代 C++ 標準的應用,最終掌握 C++ 的精髓,並能獨立解決復雜的編程問題。本書的編寫風格力求清晰易懂,結閤豐富的代碼示例和實踐練習,幫助讀者將理論知識轉化為實際的編程能力。 第一部分:C++ 編程基礎 本部分將為讀者打下堅實的 C++ 編程基礎,確保讀者能夠理解並運用 C++ 的核心語法和編程範式。 第一章:C++ 語言概述與開發環境搭建 C++ 語言的起源、發展及其在現代軟件開發中的地位。 C++ 相較於 C 語言的優勢和特性。 選擇閤適的 C++ 集成開發環境(IDE),如 Visual Studio, VS Code, CLion 等,並指導讀者完成環境的安裝和配置。 編寫並運行第一個 C++ 程序("Hello, World!"),理解程序的編譯、鏈接和運行過程。 瞭解基本的 C++ 源文件結構、函數以及 `main` 函數的作用。 第二章:基本數據類型、變量與運算符 C++ 中的基本數據類型:`int`, `float`, `double`, `char`, `bool` 等,及其取值範圍和存儲方式。 變量的聲明、初始化和賦值。 常量的概念與使用,包括 `const` 關鍵字。 各種運算符的詳解:算術運算符、關係運算符、邏輯運算符、位運算符、賦值運算符、條件運算符、sizeof 運算符。 運算符的優先級和結閤性,以及錶達式的求值規則。 類型轉換:隱式類型轉換和顯式類型轉換(強製類型轉換)。 第三章:控製流語句 順序結構:代碼的默認執行流程。 選擇結構: `if` 語句、`if-else` 語句、`if-else if-else` 語句。 嵌套 `if` 語句。 `switch` 語句及其用法,break 和 default 關鍵字的作用。 循環結構: `for` 循環:計數循環,以及其各種變體。 `while` 循環:條件循環。 `do-while` 循環:先執行後判斷的循環。 嵌套循環。 `break` 和 `continue` 語句在循環中的應用。 `goto` 語句的介紹與謹慎使用。 第四章:函數與代碼組織 函數的定義與調用:函數的聲明(原型)、定義和參數傳遞。 函數參數的傳遞方式:傳值、傳引用、傳指針。 函數返迴值:函數返迴值的類型、`void` 函數。 遞歸函數:概念、應用場景和注意事項。 函數的重載(Overloading):同名函數不同參數列錶。 默認參數:為函數參數設置默認值。 內聯函數(Inline Functions):提高函數調用效率。 命名空間(Namespaces):組織代碼,避免命名衝突。 第五章:數組與字符串 一維數組:聲明、初始化、訪問元素。 多維數組:二維數組及其應用。 數組與指針:數組名作為指針的理解。 C 風格字符串:字符數組,`' '` 結束符。 常用的 C 風格字符串處理函數:`strcpy`, `strcat`, `strlen`, `strcmp` 等(介紹其用法和潛在風險)。 C++ 字符串類 (`std::string`):介紹其便利性、常用操作(拼接、查找、替換等)以及與 C 風格字符串的轉換。 第二部分:麵嚮對象編程(OOP) 本部分將深入講解 C++ 的核心——麵嚮對象編程,讓讀者理解如何通過對象、類、封裝、繼承和多態來構建更強大、更易於維護的軟件。 第六章:類與對象 麵嚮對象編程的基本概念:對象、類、封裝、繼承、多態。 類的定義:數據成員(屬性)和成員函數(方法)。 訪問控製符:`public`, `private`, `protected` 的作用。 對象的創建與使用:實例化對象,通過對象訪問成員。 構造函數(Constructor):對象初始化,默認構造函數、帶參數構造函數、拷貝構造函數。 析構函數(Destructor):對象生命周期結束時的清理工作。 `this` 指針:指嚮當前對象的指針。 靜態成員:靜態數據成員和靜態成員函數,生命周期與作用域。 第七章:封裝與數據隱藏 封裝的概念:將數據和操作數據的方法捆綁在一起。 數據隱藏的重要性:保護數據完整性,降低耦閤度。 通過訪問控製符實現封裝。 Getter 和 Setter 方法:訪問和修改私有成員的規範方式。 第八章:繼承與派生 繼承的概念:從已有類(基類)派生齣新類(派生類)。 繼承的類型:公有繼承、保護繼承、私有繼承。 派生類的訪問控製:基類成員在派生類中的可見性。 構造函數與析構函數在繼承中的順序。 成員的重定義:派生類可以重新定義基類的成員。 多重繼承:一個派生類繼承自多個基類,及其可能帶來的問題(如菱形繼承)。 第九章:多態 多態的概念:允許不同對象對同一消息做齣不同響應。 靜態多態(編譯時多態):函數重載、運算符重載。 動態多態(運行時多態):虛函數(Virtual Functions)。 虛函數的工作原理:虛函數錶(vtable)。 純虛函數(Pure Virtual Functions)與抽象類(Abstract Classes):定義接口。 動態綁定與靜態綁定的區彆。 `virtual` 關鍵字的使用。 第十章:運算符重載 運算符重載的意義:增強 C++ 的錶達能力,使代碼更直觀。 重載的運算符類型:算術運算符、關係運算符、邏輯運算符、輸入/輸齣運算符等。 成員函數重載與友元函數重載。 友元(Friend)的概念:允許非成員函數或另一個類訪問類的私有和保護成員。 輸入/輸齣運算符 (`<<`, `>>`) 的重載,及其與 `std::ostream` 和 `std::istream` 的結閤。 第三部分:C++ 進階特性與現代 C++ 本部分將深入探討 C++ 的高級特性,並介紹現代 C++ 標準(C++11, C++14, C++17, C++20)帶來的強大新功能,幫助讀者寫齣更高效、更安全、更具錶達力的代碼。 第十一章:指針、引用與內存管理 指針的深入理解:指針的聲明、賦值、解引用、指針運算。 指針與數組的復雜關係。 指嚮指針的指針,指嚮數組的指針。 動態內存分配:`new` 和 `delete` 操作符,理解堆(heap)和棧(stack)的區彆。 內存泄漏(Memory Leak)的概念與避免。 智能指針(Smart Pointers):`std::unique_ptr`, `std::shared_ptr`, `std::weak_ptr`,自動管理內存,防止內存泄漏。 引用(References):彆名,與指針的比較。 左值和右值引用(C++11):move 語義的基礎。 第十二章:模闆(Templates) 模闆的概念:參數化類型,實現代碼的通用性。 函數模闆:編寫可以處理多種數據類型的函數。 類模闆:編寫可以處理多種數據類型的類。 模闆的實例化。 模闆的特化(Template Specialization):為特定類型提供定製的模闆實現。 `typename` 和 `class` 關鍵字在模闆中的用法。 第十三章:異常處理(Exception Handling) 異常的概念:程序運行時齣現的錯誤或異常情況。 `try`, `catch`, `throw` 關鍵字的使用。 異常的傳播與處理。 標準異常類 (`std::exception` 及其派生類)。 如何設計健壯的異常處理機製。 第十四章:STL(Standard Template Library)概覽 STL 的構成:容器、算法、迭代器。 常用容器: 序列容器:`std::vector`, `std::list`, `std::deque`, `std::forward_list`。 關聯容器:`std::set`, `std::multiset`, `std::map`, `std::multimap`。 無序關聯容器(C++11):`std::unordered_set`, `std::unordered_map`。 常用算法:排序、查找、遍曆、修改等。 迭代器(Iterators):訪問容器元素的統一接口。 STL 的高效性與通用性。 第十五章:現代 C++ 特性(C++11及以後) C++11: `auto` 關鍵字:自動類型推導。 範圍 `for` 循環(Range-based for loop)。 Lambda 錶達式:匿名函數,強大的函數對象。 智能指針 (`unique_ptr`, `shared_ptr`, `weak_ptr`)。 移動語義(Move Semantics)與右值引用(Rvalue References):提高資源管理效率。 `nullptr`。 `constexpr`:編譯期計算。 C++14: 泛型 lambda 錶達式。 變量模闆。 C++17: 結構化綁定(Structured Bindings)。 `if constexpr`。 `std::optional`, `std::variant`, `std::any`。 C++20: Concepts (概念):模闆的類型約束。 Ranges (範圍):更優雅的算法組閤。 Modules (模塊):代碼組織的新方式。 Coroutines (協程):異步編程的新模型。 (簡要介紹,根據實際篇幅可選擇性深入)。 第四部分:實踐應用與軟件工程 本部分將引導讀者將所學知識應用於實際項目,並介紹一些軟件工程中的最佳實踐。 第十六章:文件 I/O 操作 文件流:`std::ifstream`, `std::ofstream`, `std::fstream`。 文件的打開、讀取、寫入與關閉。 文本文件與二進製文件的讀寫。 錯誤處理與文件狀態檢查。 第十七章:多綫程編程基礎 (可選,根據讀者定位) 綫程的概念與創建:`std::thread`。 綫程同步:互斥量(`std::mutex`)、條件變量(`std::condition_variable`)。 並發與並行。 (此章節可根據目標讀者水平和本書篇幅酌情深淺)。 第十八章:常見設計模式與最佳實踐 介紹幾種經典的設計模式(如單例模式、工廠模式、觀察者模式等),並通過 C++ 代碼示例說明其應用。 代碼風格指南:提高代碼的可讀性和可維護性。 調試技巧:利用調試器(GDB, Visual Studio Debugger)進行代碼調試。 單元測試的重要性與實踐(簡要介紹)。 版本控製係統(如 Git)的基本使用。 本書特色 循序漸進,內容全麵:從 C++ 的基礎知識到高級特性,層層遞進,力求覆蓋 C++ 學習的各個方麵。 注重實踐,代碼驅動:大量精煉的代碼示例,直觀演示概念;豐富的練習題,幫助讀者鞏固所學。 理論與實踐相結閤:不僅講解“是什麼”,更注重“為什麼”和“如何做”,幫助讀者建立深入的理解。 現代 C++ 標準的融閤:緊跟 C++ 標準的最新發展,介紹 C++11 及之後引入的強大新特性,使讀者能掌握最前沿的 C++ 編程技術。 易於理解的語言風格:采用清晰、簡潔的語言,避免晦澀難懂的專業術語,使讀者能夠輕鬆入門並深入學習。 麵嚮問題解決:通過實際案例分析,引導讀者學習如何運用 C++ 解決現實世界中的編程挑戰。 目標讀者 初學者:希望係統學習 C++ 編程語言的編程新手。 有 C 語言基礎的開發者:希望轉型或擴展到 C++ 領域的程序員。 希望深入理解 C++ 語言特性,提升編程技能的在校學生和在職開發者。 對麵嚮對象編程、泛型編程以及現代 C++ 技術感興趣的讀者。 結語 掌握 C++ 是一段充滿挑戰但也極具迴報的旅程。《精通C++:從入門到高級實踐》將是您在這段旅程中最可靠的夥伴。我們相信,通過本書的學習,您將能夠自信地運用 C++ 進行各類軟件開發,並為您的職業生涯打下堅實的基礎。