《C++程序設(shè)計(jì)語言》課件第1章_第1頁
《C++程序設(shè)計(jì)語言》課件第1章_第2頁
《C++程序設(shè)計(jì)語言》課件第1章_第3頁
《C++程序設(shè)計(jì)語言》課件第1章_第4頁
《C++程序設(shè)計(jì)語言》課件第1章_第5頁
已閱讀5頁,還剩25頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第1章緒論

1.1C++語言的發(fā)展歷史及特點(diǎn)1.2學(xué)習(xí)C++語言的注意事項(xiàng)1.3C++?語言中一些重要的程序設(shè)計(jì)理念小結(jié)練習(xí)題

1.1C++語言的發(fā)展歷史及特點(diǎn)

1.1.1C++?語言的發(fā)展歷史

C++?語言是當(dāng)今流行的、能支持多種程序設(shè)計(jì)范型(ProgrammingParadigm)的一種優(yōu)秀的程序設(shè)計(jì)語言。

20世紀(jì)70年代末,隨著計(jì)算機(jī)應(yīng)用的普及與深入,軟件的規(guī)模及復(fù)雜性以前所未有的趨勢(shì)大幅度地增長,但當(dāng)時(shí)缺乏一種能準(zhǔn)確地描述問題域與解、支持?jǐn)?shù)據(jù)抽象(AbstractDataType,ADT)、能快速開發(fā)并有效地組織與維護(hù)大型程序、支持面向?qū)ο蟪绦蛟O(shè)計(jì)(Object-OrientedProgramming,OOP)范型的通用程序設(shè)計(jì)語言。正是在這種應(yīng)用需求的強(qiáng)烈驅(qū)動(dòng)下,1979年10月,C++?語言的第一個(gè)版本——帶類的C應(yīng)運(yùn)而生。

C++?語言自誕生之日起到發(fā)展成熟并最終走向標(biāo)準(zhǔn)化經(jīng)歷了約20年的時(shí)間。C++?起源于1979年4月BjarneStroustrup博士在美國新澤西州MurrayHill貝爾實(shí)驗(yàn)室計(jì)算科學(xué)研究中心開始的如何將所分析的UNIX內(nèi)核分布到局域網(wǎng)上這一研究工作。為了解決描述復(fù)雜系統(tǒng)的模塊結(jié)構(gòu)及模塊間的通信模式問題,并試圖書寫事件驅(qū)動(dòng)的模擬仿真程序,BjarneStroustrup開始設(shè)計(jì)并實(shí)現(xiàn)一個(gè)帶類的C(Cwithclass)的工作。1979年10月,第一個(gè)帶類的C(稱為Cpre)的實(shí)現(xiàn)在MurrayHill貝爾實(shí)驗(yàn)室投入使用。1983年8月第一個(gè)C++實(shí)現(xiàn)走出實(shí)驗(yàn)室并正式投入使用,同年12月帶類的C正式改名為C++(發(fā)音為Cplusplus)。1985年10月,C++1.0版本(稱為CfrontRelease1.0)開始正式商業(yè)發(fā)布。同時(shí),BjarneStroustrup出版了其經(jīng)典著作《TheC++ProgrammingLanguage》(第1版)。之后,1987年2月、1989年6月及1991年10月,CfrontRelease1.2、CfrontRelease2.0和CfrontRelease3.0相繼問世。BjarneStroustrup博士的《TheC++ProgrammingLanguage》的第2版和第3版亦于1991年6月和1997年7月分別出版。

C++自誕生之日起便以其表達(dá)能力強(qiáng)、高效、支持多種程序設(shè)計(jì)范型等特點(diǎn)受到業(yè)界的廣泛認(rèn)可和歡迎。隨著C++?語言的普及及其應(yīng)用領(lǐng)域爆炸性地?cái)U(kuò)張,C++?標(biāo)準(zhǔn)化問題提到了議事日程上。1987年BjarneStroustrup開始了C++標(biāo)準(zhǔn)化的準(zhǔn)備工作,1989年12月,C++?美國國家標(biāo)準(zhǔn)委員會(huì)ANSIX3J16組織成立,1990年3月召開了第一次ANSIX3J16技術(shù)會(huì)議,在此會(huì)議上確立了C++?美國國家標(biāo)準(zhǔn),并于同年5月發(fā)布了ANSIC++?標(biāo)準(zhǔn)化工作的基礎(chǔ)文件《TheAnnotatedC++ReferenceManual》。1991年6月召開了第一次C++?國際化標(biāo)準(zhǔn)ISOWG21會(huì)議,1994年8月ANSI/ISO委員會(huì)C++?草案登記,1995年4月ISOC++標(biāo)準(zhǔn)草案提交公共審閱,1997年10月ISOC++?標(biāo)準(zhǔn)通過表決并被接受,至1998年11月,ISOC++?標(biāo)準(zhǔn)(ISO/IEC14882)被正式批準(zhǔn)。目前采用的C++?標(biāo)準(zhǔn)即此標(biāo)準(zhǔn)。1.1.2C++?語言的特點(diǎn)

C++?語言是以C語言為基礎(chǔ),并在此基礎(chǔ)上擴(kuò)充、發(fā)展而來的。C++?語言是C語言的進(jìn)化版本,其名稱正反映了這一點(diǎn)。BjarneStroustrup設(shè)計(jì)并實(shí)現(xiàn)C++?的初衷是使C++語言不僅具有像Simula語言管理與組織大型程序的機(jī)制,同時(shí)又兼有C語言的高效性與靈活性;更重要的是欲使當(dāng)時(shí)大量的C程序和C庫函數(shù)得以繼承使用,大批優(yōu)秀的C程序員不丟棄長期積累的C編程經(jīng)驗(yàn),只需要學(xué)習(xí)C++?加入的一些新特性就能快速、平滑地過渡到這種支持新的程序設(shè)計(jì)范型且表達(dá)力更強(qiáng)的語言。

C++?語言不僅繼承與發(fā)揚(yáng)了C語言的優(yōu)點(diǎn),而且吸納了其它眾多語言的優(yōu)良特性。例如,C++?語言中的一些新特性,單行//注釋來源于BCPL’s;類的概念,包括派生類及虛函數(shù)來源于Simula67;操作符重載及自由的變量聲明來源于Algol68語言;模板機(jī)制主要受Ada語言的啟發(fā);錯(cuò)誤處理主要來源于Ada、Clu和ML語言。C++?語言的一些其它機(jī)制,如多重繼承、純虛函數(shù)、名字空間等是在C++?語言的發(fā)展及應(yīng)用過程中逐步產(chǎn)生的。

C++?是支持多種程序設(shè)計(jì)范型的優(yōu)秀程序設(shè)計(jì)語言之一,其主要特點(diǎn)如下:

(1)以C作為其子集,兼取了C語言簡潔、相對(duì)低級(jí)的特性,但摒棄掉了C語言中若干不安全的特性,其語言表現(xiàn)力遠(yuǎn)遠(yuǎn)強(qiáng)于C語言;

(2)是一種強(qiáng)類型語言;

(3)具有較高的可移植性和可維護(hù)性;

(4)適合于大部分系統(tǒng)程序及應(yīng)用程序的開發(fā);

(5)是一種不限定應(yīng)用領(lǐng)域的通用程序設(shè)計(jì)語言;

(6)是一種能支持面向過程、面向模塊、面向?qū)ο蠛皖悓俪绦蛟O(shè)計(jì)范型的混合型程序設(shè)計(jì)語言。

1.2學(xué)習(xí)C++?語言的注意事項(xiàng)

1.2.1如何學(xué)習(xí)C++

C++?語言的發(fā)明及實(shí)現(xiàn)者BjarneStroustrup博士告誡我們:“在學(xué)習(xí)C++語言的時(shí)候,最重要的是應(yīng)把注意力集中在其概念方面,而不是陷入只關(guān)注語言技術(shù)細(xì)節(jié)的誤區(qū)。學(xué)習(xí)一種程序設(shè)計(jì)語言的目的是成為一個(gè)好的程序員,在設(shè)計(jì)與實(shí)現(xiàn)新的系統(tǒng)、維護(hù)已有系統(tǒng)的過程中具有更高的效率。因此,對(duì)于程序設(shè)計(jì)技術(shù)和軟件設(shè)計(jì)技術(shù)的鑒賞,要比理解語言的細(xì)節(jié)重要得多。隨著時(shí)間的延伸和實(shí)踐的增加,這些語言的細(xì)節(jié)將自然會(huì)被理解的?!?/p>

BjarneStroustrup博士上述名言為我們?nèi)绾螌W(xué)習(xí)及學(xué)好C++?語言指明了道路。在學(xué)習(xí)C++?語言的時(shí)候,應(yīng)注意如下幾點(diǎn):

(1)學(xué)習(xí)C++?語言的目的是要將它作為一種工具很好地應(yīng)用于軟件系統(tǒng)的開發(fā)與維護(hù),而不能僅限于了解C++?語言的很多語法細(xì)節(jié),卻不去關(guān)注如何正確地使用它。

(2)程序設(shè)計(jì)風(fēng)格或稱程序設(shè)計(jì)范型(ProgrammingStyles/Paradigm)通常由思維方式和語言的支持機(jī)制所決定,而不同的應(yīng)用領(lǐng)域要求的思維方式不同,因而程序設(shè)計(jì)風(fēng)格或范型不同,對(duì)語言的支持要求也不同。因此應(yīng)切記:C++?語言是支持多種程序設(shè)計(jì)風(fēng)格/范型的一種通用的、混合性程序設(shè)計(jì)語言。在學(xué)習(xí)及使用該語言時(shí)一定要注意其各種語言機(jī)制到底支持哪種程序設(shè)計(jì)風(fēng)格/范型,以避免對(duì)C++?語言機(jī)制的亂用與誤用。

(3)?C++?同時(shí)支持多種程序設(shè)計(jì)風(fēng)格/范型的能力,使其應(yīng)用領(lǐng)域很寬,但其支持的語言機(jī)制絕對(duì)不是“放之四海而皆準(zhǔn)”的。因此,在學(xué)習(xí)C++?時(shí),一定要注意各種語言機(jī)制適用及不適用的場(chǎng)合。

(4)學(xué)習(xí)C++?語言的途徑不是唯一的,學(xué)習(xí)方法及門坎的高低亦因人而異,這些都與學(xué)習(xí)者已有的基礎(chǔ)和預(yù)定的目標(biāo)有關(guān)。我們期望學(xué)習(xí)者是為了更好地進(jìn)行程序設(shè)計(jì)和軟件設(shè)計(jì)而學(xué)習(xí)C++?的。

(5)?C++是一個(gè)相對(duì)復(fù)雜的語言,但不需要在掌握了這種語言的所有語言特性和技術(shù)內(nèi)涵之后才開始真正使用它。C++?可以在多個(gè)不同的專業(yè)層次上使用,所以讀者可以通過實(shí)踐循序漸進(jìn)地學(xué)習(xí)與掌握C++。

(6)跳過C語言的學(xué)習(xí)而直接學(xué)習(xí)C++?語言是值得提倡的一種學(xué)習(xí)方法。C++?更安全,表現(xiàn)力更強(qiáng),又減少了對(duì)低層技術(shù)的關(guān)注要求,因此比C語言更容易使用與掌握。有了C語言的基礎(chǔ)再學(xué)C++?語言,雖然入門較快,但實(shí)踐證明最終很難擺脫C語言的思維方式,也很難從用C++?寫出C程序這一誤區(qū)中走出來。

(7)在學(xué)習(xí)過程中,讀者還可通過多種途徑學(xué)習(xí)與實(shí)踐C++,如利用一些可用的工具、程序庫和軟件開發(fā)環(huán)境,通過大量的教科書、手冊(cè)、雜志、BBS、郵件組、會(huì)議和課程等學(xué)習(xí)C++?并得到其語言的最新發(fā)展信息。

最后,至關(guān)重要的是在學(xué)習(xí)的過程中要大量地閱讀優(yōu)秀的C++?源代碼,從中吸取經(jīng)驗(yàn),獲取靈感。學(xué)習(xí)中一定要加大實(shí)踐力度,實(shí)踐出真知!只有通過閱讀—模仿—實(shí)踐—再實(shí)踐的途徑,才能深入學(xué)習(xí)和掌握C++。1.2.2如何使用本教材

本書的內(nèi)容共分為三大部分。第一部分共計(jì)8章,重點(diǎn)闡述C++?語言的基本機(jī)制。這一部分闡述了C++?語言的子集C語言的相關(guān)內(nèi)容及C++?為支持過程程序設(shè)計(jì)、模塊化程序設(shè)計(jì)范型而加入的一些語言新特性,如函數(shù)重載(亦稱函數(shù)過載)、異常處理、名字空間等。第二部分共計(jì)5章,重點(diǎn)闡述了C++?支持面向?qū)ο?、類?通用程序設(shè)計(jì)范型的各種語言機(jī)制,該部分為本書的重點(diǎn)。由于對(duì)一種語言的掌握與運(yùn)用很大程度上取決于學(xué)習(xí)者對(duì)其類庫的熟悉與掌握,因而本書在第三部分對(duì)C++?標(biāo)準(zhǔn)輸入/輸出流類庫、string類進(jìn)行了介紹,最后,對(duì)標(biāo)準(zhǔn)模板庫(StandardTemplateLibrary,STL)進(jìn)行了概述。本書力圖從基本概念出發(fā),進(jìn)而深入闡述C++?語言支持各種程序設(shè)計(jì)范型的各種語言機(jī)制。書中短小的程序用以闡明語言的語法,各章中的應(yīng)用示例用于展現(xiàn)C++?語言各種機(jī)制的應(yīng)用場(chǎng)合、應(yīng)用技巧及C++?程序的組織架構(gòu)方法。另外,在第一部分采用一個(gè)小型應(yīng)用程序“小型桌面計(jì)算器的設(shè)計(jì)與實(shí)現(xiàn)”向讀者分別展示如何利用C++?語言所提供的語言機(jī)制進(jìn)行面向過程與面向模塊的程序設(shè)計(jì)方法;在第二部分采用另外幾個(gè)小型應(yīng)用程序,如“單向鏈表的設(shè)計(jì)與實(shí)現(xiàn)”、“類模板SortedSet的設(shè)計(jì)與實(shí)現(xiàn)”及“函數(shù)模板sort的設(shè)計(jì)與實(shí)現(xiàn)”向讀者展示C++?的面向?qū)ο蠹邦悓俪绦蛟O(shè)計(jì)方法。希望讀者在學(xué)習(xí)過程中認(rèn)真研讀書中的范例,從中啟發(fā)思路,進(jìn)而設(shè)計(jì)出更加優(yōu)秀的實(shí)用程序。

1.3C++?語言中一些重要的程序設(shè)計(jì)理念

如前所述,C++?語言是從C語言演化而來的,但其程序設(shè)計(jì)理念較C語言而言,很多方面已發(fā)生了質(zhì)的飛躍。C++?語言仍像其它程序設(shè)計(jì)語言一樣內(nèi)置了一些基本的數(shù)據(jù)類型,如int、float、char等,這些基本類型對(duì)應(yīng)著現(xiàn)實(shí)世界中的整數(shù)、實(shí)數(shù)和字符等概念,但大多數(shù)應(yīng)用中還普遍存在著一些概念,它們既不容易被表示成某個(gè)基本類型(即語言提供的內(nèi)置類型(Build-in/PrimitiveType)),也不容易被表示成某個(gè)沒有相關(guān)數(shù)據(jù)的函數(shù),如現(xiàn)實(shí)中人、汽車等概念就無法用C++?的基本類型準(zhǔn)確地表示。因此,C++?中提供了類(Class)來表示應(yīng)用中這樣的概念。類是C++?語言的第一概念,它實(shí)現(xiàn)了信息隱藏(InformationHiding)與封裝(Encapsulation)。一個(gè)類是應(yīng)用領(lǐng)域中一個(gè)概念的具體表示與抽象?,F(xiàn)實(shí)中,任何概念都不可能存在于真空之中,總是存在著一些由相關(guān)概念組成的簇(Cluster)。因此,在程序中組織(表示不同概念的那些)類之間的關(guān)系,經(jīng)常比用單個(gè)的類來定義一個(gè)概念要困難得多。組織與管理這些復(fù)雜概念的最強(qiáng)有力的工具之一就是層次結(jié)構(gòu)(Hierarchy),即將相關(guān)的一組概念組織成一棵樹(Tree),使得最一般化的概念對(duì)應(yīng)于樹的根。在C++中,派生類(DerivedClass)就用于表示這樣的結(jié)構(gòu)。例如,應(yīng)用中有一組相關(guān)的概念:人、雇員、學(xué)生、經(jīng)理、本科生和研究生,這組相關(guān)的概念可用C++?提供的繼承和派生類機(jī)制將其組織起來,其共性抽象到樹的上層,下層對(duì)應(yīng)著特性。這種組織方式使得對(duì)上層的修改自動(dòng)波及到下層,而對(duì)下層的修改不會(huì)影響到上層。另外,這種程序概念的組織方式不僅大大提高了軟件的重用(Reuse),而且極大地增強(qiáng)了軟件的可擴(kuò)充性與可維護(hù)性。上述相關(guān)類的組織層次圖如圖1.1所示。圖1.1相關(guān)類層次圖有時(shí),在程序組織上,即使是用有向無環(huán)圖(DirectedAcyclicGraph)也不足以組織一個(gè)程序中的概念,因?yàn)橛行└拍羁瓷先ナ枪逃械叵嗷ヒ蕾囍_@種環(huán)形的依賴關(guān)系在現(xiàn)實(shí)生活中比比皆是,如母雞與雞蛋之間的關(guān)系即如此,如圖1.2所示。針對(duì)這種環(huán)形依賴,程序設(shè)計(jì)時(shí)應(yīng)當(dāng)試圖將這樣的環(huán)形依賴限制在程序的局部,以免它們影響到整個(gè)程序的結(jié)構(gòu)?;庖蕾噲D最好的方法之一,就是明確地分離接口(Interface)與實(shí)現(xiàn)(Implementation),C++的抽象類(AbstractClass)就是實(shí)現(xiàn)這一功能的工具。在C++?中,表現(xiàn)概念之間共性的另一種方式是模板(Template)。C++?中提供了類模板與函數(shù)模板機(jī)制。一個(gè)類/函數(shù)模板闡明了與一組類/函數(shù)有關(guān)的共同特征,模板允許將類型參數(shù)帶入這組類/函數(shù)模板中,使所生成的每個(gè)模板類/模板函數(shù)具有各自獨(dú)特的特性。例如,應(yīng)用中有一組類:一隊(duì)軍人、一隊(duì)大雁和一隊(duì)學(xué)生,它們有其共性及個(gè)性,利用C++?的類模板機(jī)制我們可自動(dòng)生成這些類。類模板及所生成的模板類如圖1.3~圖1.7所示。圖1.2母雞與雞蛋之間的環(huán)形依賴關(guān)系圖圖1.3一隊(duì)軍人、一隊(duì)大雁和一隊(duì)學(xué)生類的共性與個(gè)性圖圖1.4隊(duì)列型類模板圖1.5由隊(duì)列類模板生成的一隊(duì)軍人模板類圖1.6由隊(duì)列類模板生成的一隊(duì)大雁模板類圖1.7由隊(duì)列類模板生成的一隊(duì)學(xué)生模板類程序設(shè)計(jì)中,我們抽取一隊(duì)軍人、一隊(duì)大雁和一隊(duì)學(xué)生類的共性,將其表達(dá)成隊(duì)列型類模板,用其參數(shù):隊(duì)員類別、個(gè)體數(shù)和隊(duì)形來表達(dá)其特性。當(dāng)我們以相應(yīng)的實(shí)參代入此類模板時(shí),即可生成相應(yīng)的具體模板類。

C++?語言為支持面向過程、面向模塊,特別是面向?qū)ο蠹邦悓俪绦蛟O(shè)計(jì)提供了各種語言機(jī)制。當(dāng)今,面向?qū)ο?O

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論