![]() ![]() |
C++面向?qū)ο蟪绦蛟O(shè)計(jì)(第3版)(中國高等院校計(jì)算機(jī)基礎(chǔ)教育課程體系規(guī)劃教材) 本書內(nèi)容包括面向?qū)ο蟪绦蛟O(shè)計(jì)的基本理論概念和C++語言的基本內(nèi)容,并且把這兩方面有機(jī)地結(jié)合起來。第一章介紹面向過程程序設(shè)計(jì)領(lǐng)域中C++對(duì)C的擴(kuò)充,第二章簡要而通俗清晰地介紹了面向?qū)ο蟪绦蛟O(shè)計(jì)的基本知識(shí),在后續(xù)各章中由淺入深地介紹怎樣編寫C++程序,在這過程中自然地具體地介紹了面向?qū)ο蟪绦蛟O(shè)計(jì)方法的應(yīng)用。 ▲ 原全國政協(xié)副主席、國務(wù)委員、國家科委主任、 中國工程院院長宋健同志給譚浩強(qiáng)教授的題詞 ▲ 原全國人民代表大會(huì)常務(wù)委員會(huì)副委員長、中 國科學(xué)院院長盧嘉錫給譚浩強(qiáng)教授的題詞從20世紀(jì)70年代末、80年代初開始,我國的高等院校開始面向各個(gè)專業(yè)的全體大學(xué)生開展計(jì)算機(jī)教育。特別是面向非計(jì)算機(jī)專業(yè)學(xué)生的計(jì)算機(jī)基礎(chǔ)教育,牽涉的專業(yè)面廣、人數(shù)眾多,影響深遠(yuǎn)。高校開展計(jì)算機(jī)基礎(chǔ)教育的狀況將直接影響我國各行各業(yè)、各個(gè)領(lǐng)域中計(jì)算機(jī)應(yīng)用的發(fā)展水平。這是一項(xiàng)意義重大而且大有可為的工作,應(yīng)該引起各方面的充分重視。 30多年來,全國高等院校計(jì)算機(jī)基礎(chǔ)教育研究會(huì)和全國高校從事計(jì)算機(jī)基礎(chǔ)教育的老師始終不渝地辛勤工作,深入探索,努力開拓,積累了豐富的經(jīng)驗(yàn),初步形成了一套行之有效的課程體系和教學(xué)理念。30年來高等院校計(jì)算機(jī)基礎(chǔ)教育的發(fā)展經(jīng)歷了3個(gè)階段: 20世紀(jì)80年代是初創(chuàng)階段,帶有掃盲的性質(zhì),多數(shù)學(xué)校只開設(shè)一門入門課程;20世紀(jì)90年代是規(guī)范階段,在全國范圍內(nèi)形成了按3個(gè)層次進(jìn)行教學(xué)的課程體系,教學(xué)的廣度和深度都有所發(fā)展;進(jìn)入21世紀(jì),開始了深化提高的第3階段,需要在原有基礎(chǔ)上再上一個(gè)新臺(tái)階。 在計(jì)算機(jī)基礎(chǔ)教育的新階段,要充分認(rèn)識(shí)到計(jì)算機(jī)基礎(chǔ)教育面臨的挑戰(zhàn): (1) 在世界范圍內(nèi)信息技術(shù)以空前的速度迅猛發(fā)展,新的技術(shù)和新的方法層出不 窮,要求高等院校計(jì)算機(jī)基礎(chǔ)教育必須跟上信息技術(shù)發(fā)展的潮流,大力更新教學(xué)內(nèi)容,用信息技術(shù)的新成就武裝當(dāng)今的大學(xué)生。 (2) 我國國民經(jīng)濟(jì)現(xiàn)在處于持續(xù)快速穩(wěn)定發(fā)展階段,需要大力發(fā)展信息產(chǎn)業(yè),加快經(jīng)濟(jì)與社會(huì)信息化的進(jìn)程,這就迫切需要大批既熟悉本領(lǐng)域業(yè)務(wù),又能熟練使用計(jì)算機(jī),并能將信息技術(shù)應(yīng)用于本領(lǐng)域的新型專門人才。因此需要大力提高高校計(jì)算機(jī)基礎(chǔ)教育的水平,培養(yǎng)出數(shù)以千百萬計(jì)的計(jì)算機(jī)應(yīng)用人才。 (3) 從21世紀(jì)初開始,信息技術(shù)教育在我國中小學(xué)中全面開展,計(jì)算機(jī)教育的起點(diǎn)從大學(xué)下移到中小學(xué)。水漲船高,這樣也為提高大學(xué)的計(jì)算機(jī)教育水平創(chuàng)造了十分有利的條件。 迎接21世紀(jì)的挑戰(zhàn),大力提高我國高等學(xué)校計(jì)算機(jī)基礎(chǔ)教育的水平,培養(yǎng)出符合信息時(shí)代要求的人才,已成為廣大計(jì)算機(jī)教育工作者的神圣使命和光榮職責(zé)。全國高等院校計(jì)算機(jī)基礎(chǔ)教育研究會(huì)和清華大學(xué)出版社于2002年聯(lián)合成立了“中國高等院校計(jì)算機(jī)基礎(chǔ)教育改革課題研究組”,集中了一批長期在高校計(jì)算機(jī)基礎(chǔ)教育領(lǐng)域從事教學(xué)和研究的專家、教授,經(jīng)過深入調(diào)查研究,廣泛征求意見,反復(fù)討論修改,于2004年春提出了新的高校計(jì)算機(jī)基礎(chǔ)教育改革思路和課程方案,并編寫了《中國高等院校計(jì)算機(jī)基礎(chǔ)教育課程體系2004》(簡稱CFC 2004),由清華大學(xué)出版社出版。之后又陸續(xù)推出CFC 2006、CFC 2008和CFC 2014。該課題受到各方面的關(guān)注、支持和歡迎,大家一致認(rèn)為CFC 提出了一個(gè)既體現(xiàn)先進(jìn)又切合實(shí)際的思路和解決方案。 為了實(shí)現(xiàn)課題研究組提出的要求,必須有一批與之配套的教材。教材是實(shí)現(xiàn)教育思想和教學(xué)要求的重要保證,是教學(xué)改革中的一項(xiàng)重要的基本建設(shè)。如果沒有好的教材,提高教學(xué)質(zhì)量只是一句空話。要寫好一本教材是不容易的,不僅需要掌握有關(guān)的科學(xué)技術(shù)知識(shí),而且要熟悉自己工作的對(duì)象,研究讀者的認(rèn)識(shí)規(guī)律,善于組織教材內(nèi)容,具有較好的文字功底,還需要學(xué)習(xí)一點(diǎn)教育學(xué)和心理學(xué)的知識(shí)等。一本好的計(jì)算機(jī)基礎(chǔ)教材應(yīng)當(dāng)具備以下5個(gè)要素: (1) 定位準(zhǔn)確。要十分明確本教材是為哪一部分讀者寫的,要有的放矢,不要不問對(duì)象,提筆就寫。 (2) 內(nèi)容先進(jìn)。要能反映計(jì)算機(jī)科學(xué)技術(shù)的新成果、新趨勢。 (3) 取舍合理。要做到“該有的有,不該有的沒有”,不要包羅萬象、貪多求全,不應(yīng)把教材寫成手冊(cè)。 (4) 體系得當(dāng)。要針對(duì)非計(jì)算機(jī)專業(yè)學(xué)生的特點(diǎn),精心設(shè)計(jì)教材體系,不僅使教材體現(xiàn)科學(xué)性和先進(jìn)性,還要注意循序漸進(jìn)、降低臺(tái)階、分散難點(diǎn),使學(xué)生易于理解。 (5) 風(fēng)格鮮明。要用通俗易懂的方法和語言敘述復(fù)雜的概念。善于運(yùn)用形象思維,深入淺出,引人入勝。 為了推動(dòng)各高校的教學(xué),我們?cè)敢馀c全國各地區(qū)、各學(xué)校的專家和老師共同奮斗,編寫和出版一批具有中國特色的、符合非計(jì)算機(jī)專業(yè)學(xué)生特點(diǎn)的、受廣大讀者歡迎的優(yōu)秀教材。為此,我們成立了“中國高等院校計(jì)算機(jī)基礎(chǔ)教育課程體系規(guī)劃教材”編審委員會(huì),全面指導(dǎo)本套教材的編寫工作。 這套教材具有以下幾個(gè)特點(diǎn): (1) 全面體現(xiàn)CFC 的思路和課程要求。本套教材的作者多數(shù)是課題研究組的成員或參加過課題研討的專家,對(duì)計(jì)算機(jī)基礎(chǔ)教育改革的方向和思路有深切的體會(huì)和清醒的認(rèn)識(shí)。因而可以說,本套教材是CFC 的具體化。 (2) 教材內(nèi)容體現(xiàn)了信息技術(shù)發(fā)展的趨勢。由于信息技術(shù)發(fā)展迅速,教材需要不斷更新內(nèi)容,推陳出新。本套教材力求反映信息技術(shù)領(lǐng)域中新的發(fā)展、新的應(yīng)用。 (3) 按照非計(jì)算機(jī)專業(yè)學(xué)生的特點(diǎn)構(gòu)建課程內(nèi)容和教材體系,強(qiáng)調(diào)面向應(yīng)用,注重培養(yǎng)應(yīng)用能力,針對(duì)多數(shù)學(xué)生的認(rèn)知規(guī)律,盡量采用通俗易懂的方法說明復(fù)雜的概念,使學(xué)生易于學(xué)習(xí)。 (4) 考慮到教學(xué)對(duì)象不同,本套教材包括了各方面所需要的教材(重點(diǎn)課程和一般課程;必修課和選修課;理論課和實(shí)踐課),供不同學(xué)校、不同專業(yè)的學(xué)生選用。 (5) 本套教材的作者都有較高的學(xué)術(shù)造詣,有豐富的計(jì)算機(jī)基礎(chǔ)教育的經(jīng)驗(yàn),在教材中體現(xiàn)了研究會(huì)所倡導(dǎo)的思路和風(fēng)格,因而符合教學(xué)實(shí)踐,便于采用。 本套教材統(tǒng)一規(guī)劃,分批組織,陸續(xù)出版。希望能得到各位專家、老師和讀者的指正,我們將根據(jù)計(jì)算機(jī)技術(shù)的發(fā)展和廣大師生的寶貴意見隨時(shí)修訂,使之不斷完善。 全國高等院校計(jì)算機(jī)基礎(chǔ)教育研究會(huì)榮譽(yù)會(huì)長 “中國高等院校計(jì)算機(jī)基礎(chǔ)教育課程體系規(guī)劃教材”編審委員會(huì)主任 本書是一本介紹C++面向?qū)ο蟪绦蛟O(shè)計(jì)的入門基礎(chǔ)教材。 目前的主流計(jì)算機(jī)的指令執(zhí)行是過程導(dǎo)向的,每一個(gè)步驟(計(jì)算機(jī)指令)是依次執(zhí)行的。因此早期的編程語言也是面向過程的,設(shè)計(jì)者必須充分地考慮程序的每一個(gè)細(xì)節(jié),要指定程序在每一環(huán)節(jié)應(yīng)執(zhí)行的動(dòng)作。 C語言是面向過程的結(jié)構(gòu)化和模塊化的語言,C語言是編寫UNIX操作系統(tǒng)的語言,功能強(qiáng)大,使用靈活。它在處理小型問題上得心應(yīng)手,但在處理大型復(fù)雜問題時(shí)就顯得力不從心了,F(xiàn)代計(jì)算機(jī)應(yīng)用已經(jīng)遠(yuǎn)遠(yuǎn)超出了科學(xué)計(jì)算和控制計(jì)算機(jī)操作的層面,而是更多地去解決各種各樣現(xiàn)實(shí)生活工作中的復(fù)雜問題,比如模擬氣象現(xiàn)象,制作文字、圖形、視頻作品等。為了處理復(fù)雜應(yīng)用程序,計(jì)算機(jī)科學(xué)家提出了面向?qū)ο蟪绦蛟O(shè)計(jì)的理論,并于20世紀(jì)末期在C語言的基礎(chǔ)上推出支持面向?qū)ο蟮腃++語言,為處理復(fù)雜應(yīng)用程序提供了有力的工具。 近年來,國內(nèi)許多大學(xué)的計(jì)算機(jī)類專業(yè)都開設(shè)了C++程序設(shè)計(jì)課程,一些大學(xué)的非計(jì)算機(jī)專業(yè)也開設(shè)了C++面向?qū)ο蟪绦蛟O(shè)計(jì)課程,許多學(xué)過C語言程序設(shè)計(jì)的人也想了解和學(xué)習(xí)C++和面向?qū)ο蟪绦蛟O(shè)計(jì)的有關(guān)知識(shí)。但是,由于C++涉及概念很多,語法比較復(fù)雜,內(nèi)容十分廣泛,使不少人感到學(xué)習(xí)難度較大,難以入門。 應(yīng)讀者的要求,作者在十多年前編著了《C++程序設(shè)計(jì)》一書,由清華大學(xué)出版社出版并向全國發(fā)行。該書以未學(xué)過C語言的讀者為對(duì)象,從面向過程入手介紹程序設(shè)計(jì)的基本知識(shí)和方法,然后介紹用C++進(jìn)行面向?qū)ο蟪绦蛟O(shè)計(jì)的方法。由于內(nèi)容全面,概念清晰,通俗易懂,該書出版后,受到各校師生的歡迎和好評(píng),幾年內(nèi)發(fā)行了70多萬冊(cè)。 目前在大學(xué)理工類專業(yè),普遍開設(shè)了C語言程序設(shè)計(jì)的課程,許多學(xué)生在學(xué)習(xí)C語言后希望對(duì)C++面向?qū)ο蟪绦蛟O(shè)計(jì)有所了解,以便日后在需要時(shí)能較快地進(jìn)入該領(lǐng)域。很多師生希望我能出版一本以C語言為起點(diǎn)的C++教材。 為此,幾年前我在清華大學(xué)出版社出版了《C++面向?qū)ο蟪绦蛟O(shè)計(jì)》一書。該書是在《C++程序設(shè)計(jì)》一書的基礎(chǔ)上編寫而成的,對(duì)于已學(xué)習(xí)過C語言程序設(shè)計(jì)的讀者,不必再重新學(xué)習(xí)面向過程程序設(shè)計(jì)的部分,而可以直接從面向?qū)ο蟪绦蛟O(shè)計(jì)入手。作者將《C++程序設(shè)計(jì)》一書中介紹面向?qū)ο蟪绦蛟O(shè)計(jì)的內(nèi)容抽出來改寫后單獨(dú)成書,并且重新寫了第1章“從C到C++”,介紹C++面向?qū)ο蟪绦蛟O(shè)計(jì)的初步知識(shí)以及C++對(duì)C在面向過程程序設(shè)計(jì)方面的擴(kuò)展,為以后各章的學(xué)習(xí)打下基礎(chǔ)。這樣的安排使本書內(nèi)容更集中,篇幅更緊湊。該書仍然保持了通俗易懂、貼近讀者、容易入門的特點(diǎn)。希望有助于大學(xué)生學(xué)習(xí)C++課程,初步掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的方法。 幾年前,作者曾對(duì)此書進(jìn)行過修訂,出版了《C++面向?qū)ο蟪绦蛟O(shè)計(jì)(第2版)》,最近根據(jù)教學(xué)實(shí)踐的情況,又進(jìn)行一次全面的修訂。這次修訂,在保留原書內(nèi)容全面、概念清晰的優(yōu)點(diǎn)的基礎(chǔ)上,從章節(jié)標(biāo)題到正文都作了不少修改和補(bǔ)充,使之更加通俗易懂,容易學(xué)習(xí),F(xiàn)在出版《C++面向?qū)ο蟪绦蛟O(shè)計(jì)(第3版)》,即本書。 在此,對(duì)本書的指導(dǎo)思想作以下的說明。 1. 教材要準(zhǔn)確定位 首先要明確教材是為什么人寫的,他們學(xué)習(xí)C++的目的是什么,要學(xué)到什么程度,不能無的放矢。推出C++的初衷是為了解決大型復(fù)雜應(yīng)用軟件開發(fā)中遇到的問題,提高軟件的開發(fā)效率。只有參加過研制相對(duì)大型軟件的人才會(huì)真正體驗(yàn)到C++的優(yōu)越性。應(yīng)當(dāng)說明,本書的主要對(duì)象不是C++的專業(yè)開發(fā)人員,而是高校各專業(yè)的大學(xué)生和自學(xué)現(xiàn)代編程語言的讀者,本書不是程序員培訓(xùn)班教材。本書的讀者一般并無實(shí)際程序開發(fā)的經(jīng)驗(yàn),將來多數(shù)人也不一定成為專業(yè)的編程人員。 不可奢望,通過幾十小時(shí)的學(xué)習(xí),就能使一個(gè)沒有C++程序設(shè)計(jì)基礎(chǔ)的初學(xué)者變成一個(gè)熟練的C++開發(fā)人員。應(yīng)當(dāng)有實(shí)事求是的分析和估計(jì)。 本書的定位是“入門”與“基礎(chǔ)”。用有效的方法使讀者順利入門,通過學(xué)習(xí),打好基礎(chǔ)。通過學(xué)習(xí)本書,多數(shù)讀者會(huì)有以下收獲:①清晰地了解面向?qū)ο蟪绦蛟O(shè)計(jì)的方法以及C++的主要功能與特點(diǎn);②能夠用C++編寫簡單的面向?qū)ο蟮某绦;③能看懂別人編寫的規(guī)模比較小的C++程序; ④奠定進(jìn)一步學(xué)習(xí)和應(yīng)用的良好基礎(chǔ)。也就是從“不知”到“初知”,從“不會(huì)”到“初會(huì)”。入了門,有了良好的基礎(chǔ),以后提高和應(yīng)用就不困難了。 2. 要設(shè)計(jì)合適的教材體系,合理取舍內(nèi)容 學(xué)習(xí)C++面向?qū)ο蟪绦蛟O(shè)計(jì),應(yīng)當(dāng)對(duì)面向?qū)ο蟮姆椒ê虲++的基本特點(diǎn)有基本的了解。 C++面向?qū)ο蟪绦蛟O(shè)計(jì)牽涉面向?qū)ο蟪绦蛟O(shè)計(jì)的理論和C++語言的語法兩個(gè)方面,都很重要。本書主要介紹C++處理問題的面向?qū)ο蟮乃季S方式和C++語言的基本內(nèi)容。我們不是抽象地介紹面向?qū)ο蟪绦蛟O(shè)計(jì)的理論,也不是枯燥地介紹C++的語法,而是以程序設(shè)計(jì)為中心把這兩個(gè)方面有機(jī)地結(jié)合起來。在介紹用C++語言編程的過程中,自然而然地引出面向?qū)ο蟪绦蛟O(shè)計(jì)的有關(guān)概念,通過C++編程過程理解面向?qū)ο蟪绦蛟O(shè)計(jì)方法,二者緊密結(jié)合,相得益彰。 本書內(nèi)容系統(tǒng)而全面。面向?qū)ο蟪绦蛟O(shè)計(jì)有4個(gè)主要特點(diǎn):抽象、封裝、繼承和多態(tài)性,在C++語言中都有相應(yīng)的機(jī)制來實(shí)現(xiàn)它們。作為教材,不能忽略C++的主要內(nèi)容,本教材的內(nèi)容全面涵蓋了以上4個(gè)方面,提供了詳細(xì)而通俗的介紹和編程舉例。 我們努力使讀者通過較短時(shí)間的學(xué)習(xí),能對(duì)面向?qū)ο蠓椒ê虲++有基本和全面的了解,而不是陷于煩瑣的細(xì)節(jié)之中。教材不同于使用手冊(cè)。手冊(cè)的任務(wù)是提供無所不包的使用細(xì)節(jié)以備查詢,而教材的任務(wù)是用容易理解的方法講清楚有關(guān)的基本概念和基本方法。不能把教材寫成包羅萬象的手冊(cè),否則將會(huì)使篇幅過大,而且會(huì)沖淡重點(diǎn),主次不分,使讀者感到枯燥無味。 本書的做法是:從應(yīng)用出發(fā),對(duì)編程所用到的最基本內(nèi)容和注意的問題都作了詳細(xì)的說明,但是并不羅列C++語法中過多的細(xì)節(jié),需要時(shí)把一些細(xì)節(jié)列出成表,供用時(shí)查閱。希望讀者在學(xué)習(xí)時(shí),要“多理解,勿死記”,以把主要精力放在基本概念和基本方法上。 要深入了解和掌握面向?qū)ο蟪绦蛟O(shè)計(jì)的概念和方法,是一個(gè)學(xué)習(xí)——實(shí)踐——再學(xué)習(xí)——再實(shí)踐的過程,不可能一蹴而就。在初學(xué)階段,要引導(dǎo)讀者初步理解面向?qū)ο蟮母拍睿⒂珊喌椒钡貙W(xué)會(huì)編寫C++程序。奠定了C++編程的初步基礎(chǔ),以后再進(jìn)一步提高。這樣的方法可能符合大多數(shù)學(xué)習(xí)者的情況,降低了學(xué)習(xí)難度。 3. 概念清晰,深入淺出,化難難點(diǎn),容易學(xué)習(xí) C++不容易學(xué),也不容易教。作者在寫作過程中花了很大的精力考慮怎樣使讀者接受和理解。作者一貫認(rèn)為:教材編著者應(yīng)當(dāng)與讀者將心比心,換位思考,要站在讀者的角度思考和提出問題,幫助他們解除學(xué)習(xí)中的困難。要善于把復(fù)雜的問題簡單化,而不應(yīng)當(dāng)把簡單的問題復(fù)雜化,要善于化解難點(diǎn),深入淺出。 作者著力使讀者對(duì)于面向?qū)ο蟮姆椒ê虲++的特點(diǎn)有清晰、準(zhǔn)確和全面的認(rèn)識(shí)。有一些面向?qū)ο蟮母拍,名詞很抽象,理論很難懂,有的初學(xué)者會(huì)被唬住,感到高深莫測。作者用通俗易懂的方法和語言敘述清楚復(fù)雜的概念,化解學(xué)習(xí)中的困難。讀者可以看到,在本書中,幾乎對(duì)每一個(gè)新出現(xiàn)的概念,都會(huì)用日常生活中的例子加以通俗地說明,一看就懂,很容易理解和入門。 希望讀者不要被一大堆高深莫測的名詞術(shù)語嚇住,有些問題看起來很深?yuàn)W,其實(shí)換一個(gè)角度去解釋就很容易理解,一個(gè)通俗的例子就把問題說清楚了。 C++的名詞術(shù)語很多,一般C++的教材的章節(jié)標(biāo)題都是一些陌生的、深?yuàn)W莫測的專業(yè)詞匯,往往使人摸不著頭腦,不知道要學(xué)的是什么,難以引發(fā)學(xué)習(xí)的興趣和欲望。作者經(jīng)過反復(fù)思考,改變了標(biāo)題的寫法,不是簡單地列出一個(gè)名詞術(shù)語,而是著重說明它是解決什么問題的。例如,原來有一節(jié)的標(biāo)題是“帶參的構(gòu)造函數(shù)”,這次作者把它改為“用帶參的構(gòu)造函數(shù)對(duì)不同對(duì)象進(jìn)行初始化”,讀者從標(biāo)題就可以知道帶參的構(gòu)造函數(shù)是為了對(duì)象初始化的,從前一節(jié)到下一節(jié),前后連貫,承上啟下,讀者就會(huì)想看看究竟是怎樣處理的。又如,有一節(jié)的標(biāo)題是“友元”,讀者第一次聽到這個(gè)術(shù)語,往往不知所云,這次作者把標(biāo)題改為“可以訪問私有數(shù)據(jù)的‘朋友’”,通俗易懂,具有目的性和啟發(fā)性,使讀者想去了解和學(xué)習(xí)。學(xué)習(xí)的過程不應(yīng)該是“教師講什么,學(xué)生學(xué)什么”的被動(dòng)式學(xué)習(xí),應(yīng)當(dāng)形成學(xué)生主動(dòng)思考問題、主動(dòng)學(xué)習(xí)的局面。 在各章的敘述中,本書不是先給出一個(gè)新概念或新術(shù)語,再去解釋它,而是先提出需要解決的問題,然后討論用什么方法去處理它,從而引出新的概念和新的方法。傳統(tǒng)的教學(xué)三部曲是:“提出概念—解釋概念—舉例說明”,作者在多年的計(jì)算機(jī)教學(xué)實(shí)踐中,采用了新的教學(xué)三部曲:“提出問題—分析和解決問題—?dú)w納分析”。 在引入每一個(gè)程序時(shí),都按照以下幾個(gè)步驟展開:提出問題—編寫程序—運(yùn)行結(jié)果—程序分析。由淺入深,逐步展開。不是先理論后實(shí)際,先抽象后具體,先一般后個(gè)別,而是從具體到抽象,從實(shí)際到理論,從個(gè)別到一般,從零散到系統(tǒng)。這樣做,符合初學(xué)者的認(rèn)知規(guī)律。 4. 教學(xué)過程要采取“容易入門,逐步提高”的方法 (1) 精心選擇例子。教材中的例題是基礎(chǔ)性質(zhì)的,是為了幫助讀者更好地理解某一方面的教學(xué)內(nèi)容而專門編寫的,相對(duì)簡單,容易理解。 作者認(rèn)為,在初學(xué)階段的例題不宜太復(fù)雜,更不宜把一些比較復(fù)雜的實(shí)際應(yīng)用的程序直接搬到課堂當(dāng)作例題。一個(gè)實(shí)用的C++程序需要考慮許多因素,綜合各部分知識(shí),有許多注釋行,而且一般是多文件的程序包,讀懂這類大型程序往往需要一定的經(jīng)驗(yàn)。作為教學(xué)程序要對(duì)問題進(jìn)行簡化,盡量壓縮不必要的語句。 本書中的例題的選擇原則是:①通過例題能更深入地理解有關(guān)的概念和編程方法。②篇幅一般不太長,絕大多數(shù)讀者能獨(dú)立讀懂程序。③通過程序舉例使讀者掌握編程的方法和技巧。 (2) 在初步掌握C++編程方法后,后續(xù)階段學(xué)習(xí)的例題程序會(huì)逐漸復(fù)雜一些。各章例題的難度是循序漸進(jìn)的,每一個(gè)臺(tái)階都不大,讀者能在原來的基礎(chǔ)上逐步提高。 (3) C++面向?qū)ο蟪绦蛟O(shè)計(jì)的概念較多,語法復(fù)雜。有的讀者往往把精力放在弄清楚一個(gè)個(gè)具體問題上,而在學(xué)完一章后對(duì)全章的內(nèi)容缺乏整體的概念。建議讀者對(duì)于教材每一章的內(nèi)容一定至少認(rèn)真讀兩遍,第一遍弄清楚各個(gè)部分的內(nèi)容,不留死角。然后在學(xué)完全章后再從頭到尾認(rèn)真看一遍,把各個(gè)知識(shí)點(diǎn)串成一條線,建立一個(gè)整體的概念,知道本章講了什么,重點(diǎn)在哪里,難點(diǎn)在哪里,在編程中怎樣使用它們。在開始學(xué)習(xí)時(shí)是化整為零,各個(gè)擊破,然后再化零為整,形成整體的認(rèn)識(shí)。凡是這樣做的讀者都覺得有很大收獲。 (4) 不要滿足于能看懂例題程序,而應(yīng)當(dāng)在學(xué)完每一章后自己獨(dú)立編寫比例題難度大一點(diǎn)的程序。在各章最后的習(xí)題中,有些題的難度比教材中的例題稍大一些,希望教師能從中選擇一些指定學(xué)生完成,并通過上機(jī)實(shí)踐,進(jìn)一步掌握C++的調(diào)試與運(yùn)行的方法。 (5) 在學(xué)完本教材各章后,最好學(xué)習(xí)一些綜合的程序?qū)嵗,以鞏固收獲,提高編程能力。本書的參考用書《C++程序設(shè)計(jì)實(shí)踐指導(dǎo)》,提供了約50個(gè)實(shí)用或接近實(shí)用的程序,教師可以從中選擇一些在課堂講授,或者指定學(xué)生自己閱讀參考。 (6) 本書便于自學(xué),即使沒有老師講解,讀者也能看懂本書的大部分內(nèi)容。老師可以要求學(xué)生先自學(xué),然后在課堂上選擇重點(diǎn)內(nèi)容講授。有些語法中的具體的規(guī)定可以不必講授,由學(xué)生自學(xué)。 5. C++教材應(yīng)當(dāng)體現(xiàn)C++標(biāo)準(zhǔn) C++是從C語言發(fā)展而來的。多數(shù)編譯器同時(shí)兼容C與C++。C++中有很多語法是繼承了C的(當(dāng)然也有不少改進(jìn))。熟悉C編程的人往往會(huì)沿用某些C的傳統(tǒng)用法,例如,頭文件帶后綴.h;使用系統(tǒng)庫時(shí)不使用命名空間;早期的C允許主函數(shù)為void類型、主函數(shù)可以無返回值等。但是,ANSI C++標(biāo)準(zhǔn)在一些方面有新的規(guī)定,例如,要求主函數(shù)為int類型,如果程序正常執(zhí)行則返回0值;系統(tǒng)頭文件不帶后綴.h;使用系統(tǒng)庫時(shí)使用命名空間std;增加了字符串類型string等。 雖然C++編譯器仍然允許使用從C繼承來的一些傳統(tǒng)用法,但作者認(rèn)為,作為教材,應(yīng)當(dāng)提倡C++的標(biāo)準(zhǔn)用法。引導(dǎo)讀者從一開始就按照C++標(biāo)準(zhǔn)編寫程序,養(yǎng)成C++的編程習(xí)慣和風(fēng)格。本書各章都是依據(jù)C++標(biāo)準(zhǔn)介紹的,同時(shí)也說明允許使用的C的傳統(tǒng)用法。在本書中,程序的形式大致如下:#include #include using namespace std;//使用系統(tǒng)庫時(shí)使用命名空間std int main() //主函數(shù)為int類型 {string str; //可以定義字符串變量str … return 0; //程序正常執(zhí)行則返回0 }6. 提供配套的教學(xué)資源,滿足教學(xué)需要 考慮到不同學(xué)校、不同專業(yè)、不同讀者對(duì)學(xué)習(xí)C++有不同的要求,因此我們提供了配套的教學(xué)資源,供選用。 除了主教材外,推薦使用以下兩本教學(xué)參考書: (1) 《C++面向?qū)ο蟪绦蛟O(shè)計(jì)(第3版)學(xué)習(xí)輔導(dǎo)》,譚浩強(qiáng)編著,清華大學(xué)出版社出版。該書提供主教材各章中的全部習(xí)題的解答。由于教材篇幅有限,有些很好的例子無法在教材中列出,因此把它們作為習(xí)題,希望讀者自己完成,教師也可以從中選擇一些習(xí)題作為例題講授。學(xué)生除了完成教師指定的習(xí)題外,最好把習(xí)題解答中的程序看一遍,以更好地理解C++程序,擴(kuò)大眼界,啟迪思路,豐富知識(shí),增長能力。 程序設(shè)計(jì)是一門實(shí)踐性很強(qiáng)的課程,只靠聽課和看書是學(xué)不好的。衡量學(xué)習(xí)好壞的標(biāo)準(zhǔn)不是“懂不懂”,而是“會(huì)不會(huì)干”。因此必須強(qiáng)調(diào)多編程,多上機(jī)實(shí)踐。在《C++面向?qū)ο蟪绦蛟O(shè)計(jì)(第3版)學(xué)習(xí)輔導(dǎo)》中,還介紹了運(yùn)行C++程序的方法。此外,書中還給出上機(jī)實(shí)踐任務(wù),要求學(xué)生完成若干次上機(jī)實(shí)踐。 (2) 《C++程序設(shè)計(jì)實(shí)踐指導(dǎo)》,陳清華、朱紅編著,清華大學(xué)出版社出版。該書提供了50多個(gè)具有實(shí)用價(jià)值的C++應(yīng)用程序。這是為學(xué)習(xí)教材后進(jìn)一步深入學(xué)習(xí)的讀者準(zhǔn)備的,目的是提高編程能力。該書內(nèi)容包括: 怎樣編寫C++應(yīng)用程序;提供若干不同規(guī)模的實(shí)際的C++應(yīng)用程序供分析閱讀;安排并指導(dǎo)學(xué)生完成1~2個(gè)C++應(yīng)用程序。經(jīng)過這樣的訓(xùn)練,學(xué)生的實(shí)際能力將會(huì)有較大的提高。 此外,本書還提供教材中全部例題的源程序,以便于教師上機(jī)和講授,也便于學(xué)生在此基礎(chǔ)上調(diào)試和修改程序,需要者可在清華大學(xué)出版社官網(wǎng)下載。同時(shí),還向使用本書的教師免費(fèi)提供講課的電子演示文稿(PPT的素材),以節(jié)省教師的備課時(shí)間。 本書由譚浩強(qiáng)教授編寫,譚亦峰也參加了部分編寫工作。全國高等院校計(jì)算機(jī)基礎(chǔ)教育研究會(huì)和浩強(qiáng)工作室的各位專家以及全國各高校老師多年來對(duì)作者始終給予了熱情的支持和鼓勵(lì)。清華大學(xué)出版社對(duì)本書的出版十分重視并作了周到的安排,使本書得以在短時(shí)間內(nèi)出版。對(duì)于曾經(jīng)鼓勵(lì)、支持和幫助過我的朋友,謹(jǐn)表示真摯的謝意。 本書肯定會(huì)有不妥之處,誠盼專家和廣大讀者不吝指正。 謹(jǐn)識(shí)2020年5月于清華園 譚浩強(qiáng),我國著名計(jì)算機(jī)教育專家,全國高等學(xué)校計(jì)算機(jī)基礎(chǔ)教育研究會(huì)名譽(yù)理事長。著有《C程序設(shè)計(jì)》等經(jīng)典教材多部。 第1章C++的初步知識(shí)1 1.1從C到C++1 1.2最簡單的C++程序2 1.3C++對(duì)C的擴(kuò)充8 1.3.1C++的輸入輸出8 1.3.2用const定義常變量11 1.3.3函數(shù)原型聲明11 1.3.4函數(shù)的重載12 1.3.5函數(shù)模板14 1.3.6有默認(rèn)參數(shù)的函數(shù)16 1.3.7變量的引用17 1.3.8內(nèi)置函數(shù)24 1.3.9作用域運(yùn)算符25 1.3.10字符串變量26 1.3.11動(dòng)態(tài)分配/撤銷內(nèi)存的運(yùn)算符new和delete29 1.3.12C++對(duì)C功能擴(kuò)展的小結(jié)31 1.4C++程序的編寫和實(shí)現(xiàn)32 1.5關(guān)于C++上機(jī)實(shí)踐33 習(xí)題34 第2章類和對(duì)象的特性37 2.1面向?qū)ο蟪绦蛟O(shè)計(jì)方法概述37 2.1.1什么是面向?qū)ο蟮某绦蛟O(shè)計(jì)37 2.1.2面向?qū)ο蟪绦蛟O(shè)計(jì)的特點(diǎn)41 2.1.3類和對(duì)象的作用42 2.1.4面向?qū)ο蟮能浖_發(fā)43 2.2類的聲明和對(duì)象的定義44 2.2.1類和對(duì)象的關(guān)系44 2.2.2聲明類的類型45 2.2.3定義對(duì)象的方法47 2.2.4類和結(jié)構(gòu)體類型的異同48 2.3類的成員函數(shù)49 2.3.1成員函數(shù)的性質(zhì)49 2.3.2在類外定義成員函數(shù)50 2.3.3內(nèi)置成員函數(shù)(inline成員函數(shù))51 2.3.4成員函數(shù)的存儲(chǔ)方式52 2.4怎樣訪問對(duì)象的成員54 2.4.1通過對(duì)象名和成員運(yùn)算符訪問對(duì)象中的成員54 2.4.2通過指向?qū)ο蟮闹羔樤L問對(duì)象中的成員55 2.4.3通過對(duì)象的引用來訪問對(duì)象中的成員55 2.5類和對(duì)象的簡單應(yīng)用舉例55 2.6類的封裝性和信息隱蔽64 2.6.1公用接口與私有實(shí)現(xiàn)的分離64 2.6.2類聲明和成員函數(shù)定義的分離65 2.6.3面向?qū)ο蟪绦蛟O(shè)計(jì)中的幾個(gè)名詞68 習(xí)題68 第3章怎樣使用類和對(duì)象71 3.1類對(duì)象的初始化71 3.1.1需要對(duì)類對(duì)象進(jìn)行初始化71 3.1.2用構(gòu)造函數(shù)實(shí)現(xiàn)數(shù)據(jù)成員的初始化72 3.1.3用帶參數(shù)的構(gòu)造函數(shù)對(duì)不同對(duì)象初始化74 3.1.4在構(gòu)造函數(shù)中用參數(shù)初始化表對(duì)數(shù)據(jù)成員初始化76 3.1.5可以對(duì)構(gòu)造函數(shù)進(jìn)行重載77 3.1.6構(gòu)造函數(shù)可以使用默認(rèn)參數(shù)79 3.1.7用構(gòu)造函數(shù)實(shí)現(xiàn)初始化方法的歸納82 3.1.8利用析構(gòu)函數(shù)進(jìn)行清理工作83 3.1.9調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù)的順序85 3.2對(duì)象數(shù)組87 3.3對(duì)象指針89 3.3.1指向?qū)ο蟮闹羔?9 3.3.2指向?qū)ο蟪蓡T的指針90 3.3.3指向當(dāng)前對(duì)象的this指針93 3.4共用數(shù)據(jù)的保護(hù)94 3.4.1定義常對(duì)象95 3.4.2定義常對(duì)象成員96 3.4.3指向?qū)ο蟮某V羔?7 3.4.4指向常對(duì)象的指針變量98 3.4.5對(duì)象的常引用101 3.4.6const型數(shù)據(jù)的小結(jié)102 3.5對(duì)象的動(dòng)態(tài)建立和釋放102 3.6對(duì)象的賦值和復(fù)制104 3.6.1對(duì)象的賦值104 3.6.2對(duì)象的復(fù)制105 3.7不同對(duì)象間實(shí)現(xiàn)數(shù)據(jù)共享108 3.7.1把數(shù)據(jù)成員定義為靜態(tài)108 3.7.2用靜態(tài)成員函數(shù)訪問靜態(tài)數(shù)據(jù)成員110 3.8允許訪問私有數(shù)據(jù)的“朋友”113 3.8.1可以訪問私有數(shù)據(jù)的友元函數(shù)113 3.8.2可以訪問私有數(shù)據(jù)的友元類117 3.9類模板118 習(xí)題122 第4章對(duì)運(yùn)算符進(jìn)行重載126 4.1為什么要對(duì)運(yùn)算符重載126 4.2對(duì)運(yùn)算符重載的方法128 4.3重載運(yùn)算符的規(guī)則131 4.4運(yùn)算符重載函數(shù)作為類成員函數(shù)和友元函數(shù)133 4.5重載雙目運(yùn)算符136 4.6重載單目運(yùn)算符141 4.7重載流插入運(yùn)算符和流提取運(yùn)算符143 4.7.1重載流插入運(yùn)算符“<<”144 4.7.2重載流提取運(yùn)算符“>>”146 4.8有關(guān)運(yùn)算符重載的歸納148 4.9不同類型數(shù)據(jù)間的轉(zhuǎn)換149 4.9.1標(biāo)準(zhǔn)類型數(shù)據(jù)間的轉(zhuǎn)換149 4.9.2把其他類型數(shù)據(jù)轉(zhuǎn)換為類對(duì)象——用轉(zhuǎn)換構(gòu)造函數(shù)150 4.9.3將類對(duì)象轉(zhuǎn)換為其他類型數(shù)據(jù)——用類型轉(zhuǎn)換函數(shù)151 習(xí)題157 第5章類的繼承158 5.1繼承與派生158 5.2派生類的聲明方式161 5.3派生類的構(gòu)成161 5.4派生類成員的訪問屬性163 5.4.1公用繼承164 *5.4.2私有繼承166 5.4.3保護(hù)成員和保護(hù)繼承169 5.4.4多級(jí)派生時(shí)的訪問屬性173 5.5派生類的構(gòu)造函數(shù)和析構(gòu)函數(shù)174 5.5.1簡單的派生類的構(gòu)造函數(shù)175 5.5.2有子對(duì)象的派生類的構(gòu)造函數(shù)178 5.5.3多層派生時(shí)的構(gòu)造函數(shù)181 5.5.4派生類構(gòu)造函數(shù)的特殊形式183 5.5.5派生類的析構(gòu)函數(shù)184 5.6多重繼承185 5.6.1聲明多重繼承的方法185 5.6.2多重繼承派生類的構(gòu)造函數(shù)185 5.6.3多重繼承引起的二義性問題188 5.6.4在繼承間接共同基類時(shí)減少數(shù)據(jù)冗余——用虛基類191 5.7基類與派生類的轉(zhuǎn)換196 5.8繼承與組合200 5.9繼承在軟件開發(fā)中的重要意義201 習(xí)題202 第6章C++的多態(tài)性207 6.1什么是多態(tài)性207 6.2一個(gè)典型的例子208 6.3利用虛函數(shù)實(shí)現(xiàn)動(dòng)態(tài)多態(tài)性214 6.3.1虛函數(shù)的作用214 6.3.2靜態(tài)關(guān)聯(lián)與動(dòng)態(tài)關(guān)聯(lián)218 6.3.3在什么情況下應(yīng)當(dāng)聲明虛函數(shù)219 6.3.4虛析構(gòu)函數(shù)220 6.4純虛函數(shù)與抽象類221 6.4.1沒有函數(shù)體的純虛函數(shù)221 6.4.2不能用來定義對(duì)象的類——抽象類222 6.4.3應(yīng)用實(shí)例223 習(xí)題229 第7章輸入輸出流230 7.1C++的輸入和輸出230 7.1.1輸入輸出的含義230 7.1.2C++的I/O對(duì)C的發(fā)展——類型安全和可擴(kuò)展性230 7.1.3C++的輸入輸出流231 7.2標(biāo)準(zhǔn)輸出流236 7.2.1cout,cerr和clog流236 7.2.2標(biāo)準(zhǔn)類型數(shù)據(jù)的格式輸出238 7.2.3用流成員函數(shù)put輸出字符243 7.3標(biāo)準(zhǔn)輸入流244 7.3.1cin流244 7.3.2用于字符輸入的流成員函數(shù)246 7.3.3istream類的其他成員函數(shù)250 7.4對(duì)數(shù)據(jù)文件的操作與文件流253 7.4.1文件的概念253 7.4.2文件流類與文件流對(duì)象255 7.4.3文件的打開與關(guān)閉256 7.4.4對(duì)ASCII文件的操作258 7.4.5對(duì)二進(jìn)制文件的操作263 7.5字符串流269 習(xí)題273 第8章善于使用C++工具275 8.1對(duì)出現(xiàn)異常情況的處理275 8.1.1異常處理的任務(wù)275 8.1.2異常處理的方法276 8.1.3在函數(shù)聲明中進(jìn)行異常情況指定283 8.1.4在異常處理中處理析構(gòu)函數(shù)284 8.2用命名空間避免同名沖突286 8.2.1同名沖突286 8.2.2什么是命名空間289 8.2.3使用命名空間解決名字沖突291 8.2.4使用命名空間中的成員的方法293 8.2.5使用無名的命名空間295 8.2.6使用標(biāo)準(zhǔn)命名空間std296 8.3使用早期的函數(shù)庫297 習(xí)題298 附錄A常用字符與ASCII碼對(duì)照表300 附錄B運(yùn)算符與結(jié)合性301 參考文獻(xiàn)303
你還可能感興趣
我要評(píng)論
|