版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
C++Primer中文版(第4版)仲英對照)一PrefaceC++Primer,FourthEdition,providesacomprehensiveintroductiontotheC++language.Asaprimer,itprovidesacleartutorialapproachtothelanguage,enhancedbynumerousexamplesandotherlearningaids.Unlikemostprimers,italsoprovidesadetaileddescriptionofthelanguage,withparticularemphasisoncurrentandeffectiveprogrammingtechniques.本書全面介紹了C++語言。作為一本入門書(Primer),它以教程的形式對C++語言進(jìn)行清晰的講解,并輔以豐富的示例和各種學(xué)習(xí)輔助手段。與大多數(shù)入門教程不同,本書對C++語言本身進(jìn)行了詳盡的描述,并特別著重介紹了目前通行的、行之有效的程序設(shè)計技巧。CountlessprogrammershaveusedpreviouseditionsofC++PrimertolearnC++.InthattimeC++hasmaturedgreatly.Overtheyears,thefocusofthelanguageandofC++programmershasgrownbeyondaconcentrationonrun-timeefficiencytofocusonwaysofmakingprogrammersmoreefficient.Withthewidespreadavailabilityofthestandardlibrary,itispossibletouseandlearnC++moreeffectivelythaninthepast.ThisrevisionoftheC++Primerreflectsthesenewpossiblities.無數(shù)程序員曾使用本書的前幾個版本學(xué)習(xí)C++,在此期間C++也逐漸發(fā)展成熟。這些年來,C++語言的發(fā)展方向以及C++程序員的關(guān)注點(diǎn),已經(jīng)從以往注重運(yùn)行時的效率,轉(zhuǎn)到千方百計地提高程序員的編程效率上。隨著標(biāo)準(zhǔn)庫的廣泛可用,我們現(xiàn)在能夠比以往任何時候更高效地學(xué)習(xí)和使用C++0本書這ー版本充分體現(xiàn)了這一點(diǎn)。ChangestotheFourthEdition第四版的改動Inthisedition,wehavecompletelyreorganizedandrewrittentheC++PrimertohighlightmodernstylesofC++programming.Thiseditiongivescenterstagetousingthestandardlibrarywhiledeemphasizingtechniquesforlow-levelprogramming.Weintroducethestandardlibrarymuchearlierinthetextandhavereformulatedtheexamplestotakeadvantageoflibraryfacilities.Wehavealsostreamlinedandreorderedthepresentationoflanguagetopics.為了體現(xiàn)現(xiàn)代C++編程風(fēng)格,我們重新組織并重寫了本書。書中不再強(qiáng)調(diào)低層編程技術(shù),而把中心轉(zhuǎn)向標(biāo)準(zhǔn)庫的使用。書中很早就開始介紹標(biāo)準(zhǔn)庫,示例也已經(jīng)重新改寫,充分利用了標(biāo)準(zhǔn)庫設(shè)施。我們也對語言主題敘述的先后次序進(jìn)行了重新編排,使講解更加流暢。Inadditiontorestructuringthetext,wehaveincorporatedseveralnewelementstoenhancethereader'sunderstanding.EachchapterconcludeswithaChapterSummaryandglossaryofDefinedTerms,whichrecapthechapter'smostimportantpoints.Readersshouldusethesesectionsasapersonalchecklist:Ifyoudonotunderstandaterm,restudythecorrespondingpartofthechapter.除重新組織內(nèi)容外,為了便于讀者理解,我們還增加了幾個新的環(huán)節(jié)。每一章都新增了‘‘小結(jié)’‘和"術(shù)語”,概括本章要點(diǎn)。讀者可以利用這些部分進(jìn)行自我檢查;如果發(fā)現(xiàn)還有不理解的概念,可以重新學(xué)習(xí)該章中的相關(guān)部分。We'vealsoincorporatedanumberofotherlearningaidsinthebodyofthetext:書中還加入了下述幾種學(xué)習(xí)輔助手段:Importanttermsareindicatedinbold;importanttermsthatweassumearealreadyfamiliartothereaderareindicatedinbolditalics.Eachtermappearsinthechapter'sDefinedTermssection.重要術(shù)語用黑體表示,我們認(rèn)為讀者已經(jīng)熟悉的重要術(shù)語則用楷體表示。這些術(shù)語都會出現(xiàn)在的''術(shù)語”部分。Throughoutthebook,wehighlightpartsofthetexttocallattentiontoimportantaspectsofthelanguage,warnaboutcommonpitfalls,suggestgoodprogrammingpractices,andprovidegeneralusagetips.Wehopethatthesenoteswillhelpreadersmorequicklydigestimportantconceptsandavoidcommonpitfalls.書中用特殊版式突出標(biāo)注的文字,是為了向讀者提醒語言的重要特征,警示常見的錯誤,標(biāo)明良好的編程實(shí)踐,列出通用的使用技巧。希望這些標(biāo)注可以幫助讀者更快地消化重要概念,避免犯常見錯誤。Tomakeiteasiertofollowtherelationshipsamongfeaturesandconcepts,weprovideextensiveforwardandbackwardcross-references.為了更易于理解各種特征或概念間的關(guān)系,書中大量使用了前后交叉引用。WehaveprovidedsidebardiscussionsthatfocusonimportantconceptsandsupplyadditionalexplanationsfortopicsthatprogrammersnewtoC++oftenfindmostdifficult.對于某些重要概念和C++新手最頭疼的問題,我們進(jìn)行了額外的討論和解釋。這部分也以特殊版式標(biāo)出。Learninganyprogramminglanguagerequireswritingprograms.Tothatend,theprimerprovidesextensiveexamplesthroughoutthetext.SourcecodefortheextendedexamplesisavailableontheWebatthefollowingURL:學(xué)習(xí)任何程序設(shè)計語言都需要編寫程序。因此,本提供了大量的示例。所有示例的源代碼可以從下列網(wǎng)址獲得:http:〃/cDDprimerWhathasn'tchangedfromearlierversionsisthatthebookremainsacomprehensivetutorialintroductiontoC++.Ourintentistoprovideaclear,completeandcorrectguidetothelanguage.Weteachthelanguagebypresentingaseriesofexamples,which,inadditiontoexplaininglanguagefeatures,showhowtomakethebestuseofC++.AlthoughknowledgeofC(thelanguageonwhichC++wasoriginallybased)isnotassumed,wedoassumethereaderhasprogrammedinamodemblock-structuredlanguage.萬變不離其宗,本書保持了前幾版的特色,仍然是一部全面介紹C++的教程。我們的目標(biāo)是提供一本清晰、全面、準(zhǔn)確的指南性讀物。我們通過講解一系列示例來教授C++語言,示例除了解釋語言特征外,還展示了如何善用這門語言。雖然讀者不需要事先學(xué)過C語言(C++最初的基礎(chǔ))的知識,但我們假定讀者已經(jīng)掌握了一種現(xiàn)代結(jié)構(gòu)化語言。StructureofThisBook本書結(jié)構(gòu)C++PrimerprovidesanintroductiontotheInternationalStandardonC++,coveringboththelanguageproperandtheextensivelibrarythatispartofthatstandard.MuchofthepowerofC++comesfromitssupportfbrprogrammingwithabstractions.LearningtoprogrameffectivelyinC++requiresmorethanlearningnewsyntaxandsemantics.OurfocusisonhowtousethefeaturesofC++towriteprogramsthataresafe,thatcanbebuiltquickly,andyetofferperformancecomparabletothesortsoflow-levelprogramsoftenwritteninC.本介紹了C++國際標(biāo)準(zhǔn),既涵蓋語言的特征,又講述了也是標(biāo)準(zhǔn)組成部分的豐富標(biāo)準(zhǔn)庫。C++的強(qiáng)大很大程度上來自它支持抽象程序設(shè)計。要學(xué)會用C++高效地編程,只是掌握句法和語義是遠(yuǎn)遠(yuǎn)不夠的。我們的重點(diǎn)在于,教會讀者怎樣利用C++的特性,快速地寫出安全的而且性能可與C語言低層程序相媲美的程序。C++isalargelanguageandcanbedauntingtonewusers.ModernC++canbethoughtofascomprisingthreeparts:C++是ー種大型的編程語言,這可能會嚇倒ー些新手?,F(xiàn)代C++可以看成由以下三部分組成:Thelow-levellanguage,largelyinheritedfromC低級語言,多半繼承自CoMoreadvancedlanguagefeaturesthatallowustodefineourowndatatypesandtoorganizelarge-scaleprogramsandsystems更髙級的語言特征,用戶可以借此定義自己的數(shù)據(jù)類型,組織大規(guī)模的程序和系統(tǒng)。Thestandardlibrary,whichusestheseadvancedfeaturestoprovideasetofusefuldatastructuresandalgorithms標(biāo)準(zhǔn)庫,使用上述髙級特征提供一整套有用的數(shù)據(jù)結(jié)構(gòu)和算法。MosttextspresentC++inthissameorder:Theystartbycoveringthelow-leveldetailsandthenintroducethethemoreadvancedlanguagefeatures.Theyexplainthestandardlibraryonlyafterhavingcoveredtheentirelanguage.Theresult,alltoooften,isthatreadersgetboggeddowninissuesoflow-levelprogrammingorthecomplexitiesofwritingtypedefinitionsandneverreallyunderstandthepowerofprogramminginamoreabstractway.Needlesstosay,readersalsooftendonotlearnenoughtobuildtheirownabstractions.多數(shù)C++教材按照下面的順序展開:先講低級細(xì)節(jié),再介紹更髙級的語言特征;在講完整個語言后才開始解釋標(biāo)準(zhǔn)庫。結(jié)果往往使讀者糾纏于低級的程序設(shè)計問題和復(fù)雜類型定義的編寫等細(xì)節(jié),而不能真正領(lǐng)會抽象編程的強(qiáng)大,更不用說學(xué)到足夠的知識去創(chuàng)建自己的抽象了。Inthiseditionwetakeacompletelydifferenttack.Westartbycoveringthebasicsofthelanguageandthelibrarytogether.Doingsoallowsyou,thereader,towritesignificantprograms.OnlyafterathoroughgroundinginusingthelibraryandwritingthekindsofabstractprogramsthatthelibaryailowsdowemoveontothosefeaturesofC++thatwillenableyoutowriteyourownabstractions.本版中我們獨(dú)辟蹊徑。ー開始就講述語言的基礎(chǔ)知識和標(biāo)準(zhǔn)庫,這樣讀者就可以寫出比較大的有實(shí)際意義的程序來。透徹闡釋了使用標(biāo)準(zhǔn)庫(并且用標(biāo)準(zhǔn)庫編寫了各種抽象程序)的基礎(chǔ)知識之后,我們オ進(jìn)入下ー步,學(xué)習(xí)用C++的其他高級特征來編寫自己的抽象。PartsIandIIcoverthebasiclanguageandlibraryfacilities.ThefocusofthesepartsistolearnhowtowriteC++programsandhowtousetheabstractionsfromthelibrary.MostC++programmersneedtoknowessentiallyeverythingcoveredinthisportionofthebook.第一和第二部分討論語言的基礎(chǔ)知識和標(biāo)準(zhǔn)庫設(shè)施。其重點(diǎn)在于學(xué)會如何編寫C++程序,如何使用標(biāo)準(zhǔn)庫提供的抽象設(shè)施。大部分C++程序員需要了解本書這兩部分的內(nèi)容。InadditiontoteachingthebasicsofC++,thematerialinPartsIandIIservesanotherimportantpurpose.ThelibraryfacilitiesarethemselvesabstractdatatypeswritteninC++.Thelibrarycanbedefinedusingthesameclass-constructionfeaturesthatareavailabletoanyC++programmer.OurexperienceinteachingC++isthatbyfirstusingwell-designedabstracttypes,readersfinditeasiertounderstandhowtobuildtheirowntypes.除了講解基礎(chǔ)知識以外,這兩部分還有另外一個重要的意圖。標(biāo)準(zhǔn)庫設(shè)施本身是用C++編寫的抽象數(shù)據(jù)類型,定義標(biāo)準(zhǔn)庫使用的是任何C++程序員都能使用的構(gòu)造類的語言特征。我們教授C++的經(jīng)驗(yàn)說明,ー開始就使用設(shè)計良好的抽象類型,讀者會更容易理解如何建立自己的類型。PartsIIIthroughVfocusonhowwecanwriteourowntypes.PartIIIintroducestheheartofC++:itssupportfbrclasses.Theclassmechanismprovidesthebasisforwritingourownabstractions.Classesarealsothefoundationforobject-orientedandgenericprogramming,whichwecoverinPartIV.ThePrimerconcludeswithPartV,whichcoversadvancedfeaturesthatareofmostuseinstructuringlarge,complexsystems.第三到第五部會著重討論如何編寫自己的類型。第三部分介紹C++的核心,即對類的支持。類機(jī)制提供了編寫自定義抽象的基礎(chǔ)。類也是第四部分中討論的面向?qū)ο缶幊毯头盒途幊痰幕A(chǔ)。全書正文的最后是第五部分,這一部分討論了一些高級特征,它們在構(gòu)建大型復(fù)雜系統(tǒng)時最為常用。Acknowledgments致謝AsinpreviouseditionsofthisPrimer,we*dliketoextendourthankstoBjarneStroustrupforhistirelessworkonC++andforhisfriendshiptotheseauthorsthroughoutmostofthattime.We'dalsoliketothankAlexStepanovforhisoriginalinsightsthatledtothecontainersandalgorithmsthatformthecoreofthestandardlibrary.Finally,ourthanksgototheC++Standardscommitteemembersfortheirhardworkinclarifying,refining,andimprovingC++overmanyyears.與前幾版一新,我們要感謝BjarneStroustrup,他不知疲倦地從事著C++方面的工作,他與我們的深厚友情由來已久。我們還要感謝AlexStepanov,正是他最初憑借敏銳的洞察力創(chuàng)造了容器和算法的概念,這些概念最終形成了標(biāo)準(zhǔn)庫的核心。此外,我們要感謝C++標(biāo)準(zhǔn)委員會的所有成員,他們多年來為C++澄清概念、細(xì)化標(biāo)準(zhǔn)和改進(jìn)功能付出了艱苦的努力。Wealsoextendourdeep-feltthankstoourreviewers,whosehelpfulcommentsonmultipledraftsledustomakeimprovementsgreatandsmallthroughoutthebook:PaulAbrahams,MichaelBall,MaryDageforde,PaulDuBois,MattGreenwood,MatthewP.Johnson,AndrewKoenig,NevinLiber,BillLocke,RobertMurray,PhilRomanik,JustinShaw,VictorShtern,ClovisTondo,DaveedVandevoorde,andSteveVinoski.我們要衷心地感謝本書審稿人,他們審閱了我們的多份書稿,幫助我們對本書進(jìn)行了無數(shù)大大小小的修改。他們是PaulAbrahams,MichaelBall,MaryDageforde,PaulDuBois,MattGreenwood,MatthewP.Johnson,AndrewKoenig,NevinLiber,BillLocke,RobertMurray,PhilRomanik,JustinShaw,VictorShtem,ClovisTondo,DaveedVandevoorde和SteveVinoski〇ThisbookwastypesetusingLATEXandthemanypackagesthataccompanytheLATEXdistribution.Ourwell-justifiedthanksgotothemembersoftheLATEXcommunity,whohavemadeavailablesuchpowerfultypesettingtools.TheexamplesinthisbookhavebeencompiledontheGNUandMicrosoftcompilers.Ourthankstotheirdevelopers,andtothosewhohavedevelopedalltheotherC++compilers,therebymakingC++areality.書中所有示例都已通過GNU和微軟編譯器的編譯。感謝他們的開發(fā)者和所有開發(fā)其他C++編譯器的人,是他們使C++變成現(xiàn)實(shí)。Finally,wethankthefinefolksatAddison-Wesleywhohaveshepherdedthiseditionthroughthepublishingprocess:DebbieLafferty,ouroriginaleditor,whoinitiatedthiseditionandwhohadbeenwiththePrimerfromitsveryfirstedition;PeterGordon,ourneweditor,whoseinsistenceonupdatingandstreamliningthetexthave,wehope,greatlyimprovedthepresentation;KimBoedigheimer,whokeepsusallonschedule;andTyrrellAlbaugh,JimMarkham,ElizabethRyan,andJohnFuller,whosawusthroughthedesignandproductionprocess.最后,感謝的工作人員,他們引領(lǐng)了這一版的整個出版過程:——我們最初的編輯,是他提出出版本書的新版,他從本書最初版本起就一直致力于本書:ー我們的新編輯,他堅持更新和精簡本書內(nèi)容,極大地改進(jìn)了這ー版本:——他保證了我們所有人能按進(jìn)度工作;還有、、和,他們和我們ー起經(jīng)歷了整個設(shè)計和制作過程。Chapter1.GettingStarted第一章快速入門CONTENTSWritingaSimpleC++Program2TOC\o"1-5"\h\zAFirstLookatInput/Output 5AWordAboutComments 10ControlStructures _11IntroducingClasses 20TheC++Program 25ChapterSummary 28DefinedTerms 28ThischapterintroducesmostofthebasicelementsofC++:built-in,library,andclasstypes;variables;expressions;statements;andfunctions.Alongtheway,we'llbrieflyexplainhowtocompileandexecuteaprogram.本章介紹C++的大部分基本要素:內(nèi)置類型、庫類型、類類型、變量、表達(dá)式、語句和函數(shù)。在這ー過程中還會簡要說明如何編譯和運(yùn)行程序。Havingreadthischapterandworkedthroughtheexercises,thereadershouldbeabletowrite,compile,andexecutesimpleprograms.Subsequentchapterswillexplaininmoredetailthetopicsintroducedhere.讀者讀完本章內(nèi)容并做完練習(xí),就應(yīng)該可以編寫、編譯和執(zhí)行簡單的程序。后面的章節(jié)會進(jìn)ー步闡明本章所介紹的主題。Learninganewprogramminglanguagerequireswritingprograms.Inthischapter,wellwriteaprogramtosolveasimpleproblemthatrepresentsacommondata-processingtask:Abookstorekeepsafileoftransactions,eachofwhichrecordsthesaleofagivenbook.EachtransactioncontainsanISBN(InternationalStandardBookNumber,auniqueidentifierassignedtomostbookspublishedthroughouttheworld),thenumberofcopiessold,andthepriceatwhicheachcopywassold.Eachtransactionlookslike要學(xué)會ー門新的程序語言,必須實(shí)際動手編寫程序。在這一章,我們將縮寫程序解決一個簡單的數(shù)據(jù)處理問題:某書店以文件形式保存其每ー筆交易。每ー筆交易記錄某本書的銷售情況,含有!SBN(國際標(biāo)準(zhǔn)書號,世界上每種圖書的唯一標(biāo)識符)、銷售冊數(shù)和銷售單價。每ー筆交易形如:0-201-70353-X424.99wherethefirstelementistheISBN,thesecondisthenumberofbookssold,andthelastisthesalesprice.Periodicallythebookstoreownerreadsthisfileandcomputesthenumberofcopiesofeachtitlesold,thetotalrevenuefromthatbook,andtheaveragesalesprice.Wewanttosupplyaprogramdothesecomputations.第一個元素是!SBN,第二個元素是銷售的冊數(shù),最后是銷售單價。店主定期地查看這個文件,統(tǒng)計每本書的銷售冊數(shù)、總銷售收入以及平均售價。我們要編寫程序來進(jìn)行這些計算。BeforewecanwritethisprogramweneedtoknowsomebasicfeaturesofC++.Ataminimumwe'llneedtoknowhowtowrite,compile,andexecuteasimpleprogram.Whatmustthisprogramdo?Althoughwehavenotyetdesignedoursolution,weknowthattheprogrammust在編寫這個程序之前,必須知道C++的ー些基本特征。至少我們要知道怎么樣編寫、編譯和執(zhí)行簡單的程序。這個程序要做什么呢?雖然還沒有設(shè)計解決方案,但是我們知道程序必須:Definevariables定義變量。Doinputandoutput實(shí)現(xiàn)輸入和輸出。Defineadatastructuretoholdthedatawe'remanaging定義數(shù)據(jù)結(jié)構(gòu)來保存要處理的數(shù)據(jù)。TestwhethertworecordshavethesameISBN測試是否兩條記錄具有相同的ISBNoWritealoopthatwillprocesseveryrecordinthetransactionfile編寫循環(huán)。處理交易文件中的每一條記錄。We'llstartbyreviewingthesepartsofC++andthenwriteasolutiontoourbookstoreproblem.我們將首先考察C++的這些部分,然后編寫書店問題的解決方案。WritingaSimpleC++Program程序EveryC++programcontainsoneormorefunctions,oneofwhichmustbenamedmain.Afunctionconsistsofasequenceofstatementsthatperformtheworkofthefunction.Theoperatingsystemexecutesaprogrambycallingthefunctionnamedmain.Thatfunctionexecutesitsconstituentstatementsandreturnsavaluetotheoperatingsystem.每個C++程序都包含一個或多個函數(shù),而且必須有一個命名為maino函數(shù)由執(zhí)行函數(shù)功能的造包序列組成。操作系統(tǒng)通過調(diào)用main函數(shù)來執(zhí)行程序,main函數(shù)則執(zhí)行組成自己的語句并返回一個值給操作系統(tǒng)。Hereisasimpleversionofmaindoesnothingbutreturnavalue:下面是ー個簡單的main函數(shù),它不執(zhí)行任何功能,只是返回一個值:intmain()(return0;)Theoperatingsystemusesthevaluereturnedbymaintodeterminewhethertheprogramsucceededorfailed.Areturnvalueof0indicatessuccess.操作系統(tǒng)通過main函數(shù)返回的值來確定程序是否成功執(zhí)行完畢。返回〇值表明程序程序成功執(zhí)行完畢。Themainfunctionisspecialinvariousways,themostimportantofwhicharethatthefunctionmustexistineveryC++programanditisthe(only)functionthattheoperatingsystemexplicitlycalls.main函數(shù)在很多方面都比較特別,其中最重要的是每個C++程序必須含有main函數(shù),且main函數(shù)是(唯一)被操作系統(tǒng)顯式調(diào)用的函數(shù)。Wedefinemainthesamewaywedefineotherfunctions.Afunctiondefinitionspecifiesfourelements:thereturnlype,thefunctionname,a(possiblyempty)parameterlistenclosedinparentheses,andthefunctionbody.Themainfunctionmayhaveonlyarestrictedsetofparameters.Asdefinedhere,theparameterlistisempty;Section7.2.6(p.243)willcovertheotherparametersthatcanbedefinedformain.定義main函數(shù)和定義其他函數(shù)一樣。定義函數(shù)必須指定4個元素:返回類型、函數(shù)名、圓括號內(nèi)的形參表(可能為空)和函數(shù)體。main函數(shù)的形參個數(shù)是有限的。本例中定義的main函數(shù)形參表為空。第7.2.6節(jié)將介紹main函數(shù)中可以定義的其他形參。Themainfunctionisrequiredtohaveareturntypeofint,whichisthetypethatrepresentsintegers.Theinttypeisabuilt-mtype,whichmeansthatthetypeisdefinedbythelanguage.main函數(shù)的返回值必須是int型,該類型表示整數(shù)。int類型是內(nèi)置類型,即該類型是由C++語言定義的。Thefinalpartofafunctiondefinition,thefunctionbody,isablockofstatementsstartingwithanopencurlybraceandendingwithaclosecurly:函數(shù)體函數(shù)定義的最后部分,是以花括號開始并以花括號結(jié)束的語句塊:(return0;)Theonlystatementinourprogramisareturn,whichisastatementthatterminatesafunction.例中唯一的語句就是return,該語句終止函數(shù)。Notethesemicolonattheendofthereturnstatement.SemicolonsmarktheendofmoststatementsinC++.Theyareeasytooverlook,butwhenforgottencanleadtomysteriouscompilererrormessages.注意return語句后面的分號。在C++中多數(shù)語句以分號作為結(jié)束標(biāo)記。分號很容易被忽略,而漏寫分號將會導(dǎo)致莫名其妙的編譯錯誤信息。Whenthereturnincludesavaluesuchas0,thatvalueisthereturnvalueofthefunction.Thevaluereturnedmusthavethesametypeasthereturntypeofthefunctionorbeatypethatcanbeconvertedtothattype.Inthecaseofmainthereturntypemustbeint,andthevalue0isanint.當(dāng)return帶上一個值(如0)時,這個值就是函數(shù)的返回值。返回值類型必須和函數(shù)的返回類型相同,或者可以轉(zhuǎn)換成函數(shù)的返回類型。對于main函數(shù),返回類型必須是int型,〇是int型的。Onmostsystems,thereturnvaluefrommainisastatusindicator.Areturnvalueof0indicatesthesuccessfulcompletionofmain.Anyotherreturnvaluehasameaningthatisdefinedbytheoperatingsystem.Usuallyanonzeroreturnindicatesthatanerroroccurred.Eachoperatingsystemhasitsownwayoftellingtheuserwhatmainreturned.在大多數(shù)系統(tǒng)中,main函數(shù)的返回值是ー個狀態(tài)指示器。返回值〇往往表示main函數(shù)成功執(zhí)行完畢。任何其他非零的返回值都有操作系統(tǒng)定義的含義。通常非零返回值表明有錯誤出現(xiàn)。每ー種操作系統(tǒng)都有自己的方式告訴用戶main函數(shù)返回什么內(nèi)容。CompilingandExecutingOurProgram1.1.1.編譯與執(zhí)行程序Havingwrittentheprogram,weneedtocompileit.Howyoucompileaprogramdependsonyouroperatingsystemandcompiler.Fordetailsonhowyourparticularcompilerworks,you'llneedtocheckthereferencemanualoraskaknowledgeablecolleague.程序編寫完后需要進(jìn)行編譯。如何進(jìn)行編譯,與具體操作系統(tǒng)和編譯器有關(guān)。你需要查看有關(guān)參考手冊或者詢問有經(jīng)驗(yàn)的同事,以了解所用的編譯器的工作細(xì)節(jié)。ManyPC-basedcompilersarerunfromanintegrateddevelopmentenvironment(IDE)thatbundlesthecompilerwithassociatedbuildandanalysistools.Theseenvironmentscanbeagreatassetindevelopingcomplexprogramsbutrequireafairbitoftimetolearnhowtouseeffectively.Mostoftheseenvironmentsincludeapoint-and-clickinterfacethatallowstheprogrammertowriteaprogramandusevariousmenustocompileandexecutetheprogram.Learninghowtousesuchenvironmentsiswellbeyondthescopeofthisbook.許多基于PC的編譯器都在集成開發(fā)環(huán)境(IDE)中運(yùn)行,IDE將編譯器與相關(guān)的構(gòu)建和分析工具綁定在ー起。這些環(huán)境在開發(fā)復(fù)雜程序時非常有用,但掌握起來需要花費(fèi)ー點(diǎn)時間。通常這些環(huán)境包含點(diǎn)擊式界面,程序員在此界面下可以編寫程序,并使用各種菜單來編譯與執(zhí)行程序本書不介紹怎樣使用這些環(huán)境。Mostcompilers,includingthosethatcomewithanIDE,provideacommand-lineinterface.Unlessyouarealreadyfamiliarwithusingyourcompiler'sIDE,itcanbeeasiertostartbyusingthesimpler,command-lineinterface.Usingthecommand-lineinterfaceletsyouavoidtheoverheadoflearningtheIDEbeforelearningthelanguage.大多數(shù)編譯器,包括那些來自!DE的,都提供了命令行界面。除非你已經(jīng)很熟悉你的IDE,否則從使用簡單的命令行界面開始可能更容易些。這樣可以避免在學(xué)習(xí)語言之前得先去學(xué)習(xí)IDE。ProgramSourceFileNamingConvention程序源文件命名規(guī)范Whetherweareusingacommand-lineinterfaceoranIDE,mostcompilersexpectthattheprogramwewanttocompilewillbestoredinafile.Programfilesarereferredtoassourcefiles.Onmostsystems,asourcefilehasanamethatconsistsoftwoparts:afilenameforexample,prog1andafilesuffix.Byconvention,thesuffixindicatesthatthefileisaprogram.Thesuffixoftenalsoindicateswhatlanguagetheprogramiswritteninandselectswhichcompilertorun.Thesystemthatweusedtocompiletheexamplesinthisbooktreatsafilewithasuffixof.ccasaC++programandsowestoredthisprogramas不管我們使用命令行界面還是IDE,大多數(shù)編譯器希望待編譯的程序保存在文件中。程序文件稱作源文件。大多數(shù)系統(tǒng)中,源文件的名字由文件名(如progl)和文件后綴兩部分組成。依據(jù)慣例,文件后綴表明該文件是程序。文件后綴通常也表明程序是用什么語言編寫的,以及選擇哪ー種編譯器運(yùn)行。我們用來編譯本書實(shí)例的系統(tǒng)將帶有后綴.cc的文件視為C++程序,因此我們將該程序保存為:progl.ccThesuffixforC++programfilesdependsonwhichcompileryou'rerunning.OtherconventionsincludeC++程序文件的后綴與運(yùn)行的具體編譯器有關(guān)。其他的形式還包括。progl.cxxprogl.cppprogl.cpprogl.CInvokingtheGNUorMicrosoftCompilers調(diào)用GNU或微軟編譯器ThecommandusedtoinvoketheC++compilervariesacrosscompilersandoperatingsystems.ThemostcommoncompilersaretheGNUcompilerandtheMicrosoftVisualStudiocompilers.BydefaultthecommandtoinvoketheGNUcompilerisg++:調(diào)用C++編譯器的命令因編譯器和操作系統(tǒng)的不同而不同,常用的編譯器是GNU編譯器和微軟VisualStudio編譯器。調(diào)用GNU編譯器的默認(rèn)命令是g++:$g++progl.cc-oprog1where$isthesystemprompt.Thiscommandgeneratesanexecutablefilenamedproglorprog1.exe,dependingontheoperatingsystem.OnUNIX,executablefileshavenosuffix;onWindows,thesuffixis.exe.The-oproglisanargumenttothecompilerandnamesthefileinwhichtoputtheexecutablefile.Ifthe-oproglisomitted,thenthecompilergeneratesanexecutablenameda.outonUNIXsystemsanda.exeonWindows.這里的$是系統(tǒng)提示符。這個命令產(chǎn)生一個為prog!或progl.exe的可執(zhí)行文件。在UNIX系統(tǒng)下,可執(zhí)行文件沒有后綴;而在Windows下,后綴為.exe〇-oprogl是編譯器參數(shù)以及用來存放可執(zhí)行文件的文件名。如果省略-〇progl,那么編譯器在UNIX系統(tǒng)下產(chǎn)生名為a.out而在Windows下產(chǎn)生名為a.exe的可執(zhí)行文件。TheMicrosoftcompilersareinvokedusingthecommandcl:微軟編譯器采用命令cl來調(diào)用:C:\directory>cl-GXprogl.cppwhereC:directory>isthesystempromptanddirectoryisthenameofthecurrentdirectory.Thecommandtoinvokethecompileriscl,and-GXisanoptionthatisrequiredforprogramscompiledusingthecommand-lineinterface.TheMicrosoftcompilerautomaticallygeneratesanexecutablewithanamethatcorrespondstothesourcefilename.Theexecutablehasthesuffix.exeandthesamenameasthesourcefilename.Inthiscase,theexecutableisnamedprogl.exe.這里的C:directory>是系統(tǒng)提示符,directory是當(dāng)前目錄名。cl是調(diào)用編譯器的命令。-GX是ー個選項,該選項在使用命令行界面編譯器程序時是必需的。微軟編譯器自動產(chǎn)生與源文件同名的可執(zhí)行文件,這個可執(zhí)行文件具有.exe后綴且與源文件同名。本例中,可執(zhí)行文件命名為progl.exe〇Forfurtherinformationconsultyourcompiler'suser'sguide.更多的信息請參考你的編譯器用戶指南。RunningtheCompilerfromtheCommandLine從命令行編譯器Ifweareusingacommand-lineinterface,wewilltypicallycompileaprograminaconsolewindow(suchasashellwindowonaUNIXsystemoraCommandPromptwindowonWindows).Assumingthatourmainprogramisinafilenamedprog1.cc,wemightcompileitbyusingacommandsuchas:如果使用命令行界面,一般在控制臺窗口(例如UNIX的shell窗ロ或Windows的命令提示窗口)編譯程序。假設(shè)main程序在名為progl.cc的文件中,可以使用如下命令來編譯:$CCprogl.ccwhereCCnamesthecompilerand$representsthesystemprompt.Theoutputofthecompilerisanexecutablefilethatweinvokebynamingit.Onoursystem,thecompilergeneratestheexecutableinafilenameda.exe.UNIXcompilerstendtoputtheirexecutablesinafilenameda.out.Torunanexecutablewesupplythatnameatthecommand-lineprompt:這里CC是編譯器命令名,$表示系統(tǒng)提示符。編譯器輸出ー個可執(zhí)行文件,我們可以按名調(diào)用這個可執(zhí)行文件。在我們的系統(tǒng)中,編譯器產(chǎn)生一個名為a.exe的可執(zhí)行文件。UNIX編譯器則會將可執(zhí)行文件放到ー個名為a.out的文件中。要運(yùn)行可執(zhí)行文件,可在命令提示符處給出該文件名:$a.exeexecutestheprogramwecompiled.OnUNIXsystemsyousometimesmustalsospecifywhichdirectorythefileisin,evenifitisinthecurrentdirectory.Insuchcases,wewouldwrite執(zhí)行編譯過的程序。在UNIX系統(tǒng)中,即使在當(dāng)前目錄,有時還必須指定文件所在的目錄。這種情況下,鍵入:$./a.exeThefollowedbyaslashindicatesthatthefileisinthecurrentdirectory.ヅ后面的斜杠表明文件處于當(dāng)前目錄下。Thevaluereturnedfrommainisaccessedinasystem-dependentmanner.OnbothUNIXandWindowssystems,afterexecutingtheprogram,youmustissueanappropriateechocommand.OnUNIXsystems,weobtainthestatusbywriting訪問main函數(shù)的返回值的方式和系統(tǒng)有關(guān)。不論UNIX還是Windows系統(tǒng),執(zhí)行程序后,必須發(fā)出一個適當(dāng)?shù)膃cho命令。UNIX系統(tǒng)中,通過鍵入如下命令獲取狀態(tài):$echo$?ToseethestatusonaWindowssystem,wewrite要在Windows系統(tǒng)下查看狀態(tài),鍵入C:\directory>echo%ERRORLEVEL%ExercisesSection1.1.1ExerciseReviewthedocumentationforyourcompileranddeterminewhatfilenamingconventionituses.1.1: Compileandrunthemainprogramfrompage2.查看所用的編譯器文檔,了解它所用的文件命名規(guī)范。編譯并運(yùn)行本節(jié)的main程序。ExerciseChangetheprogramtoreturn-1.Areturnvalueof-1isoftentreatedasanindicatorthattheprogram1.2: failed.However,systemsvaryastohow(orevenwhether)theyreportafailurefrommain.Recompileandrerunyourprogramtoseehowyoursystemtreatsafailureindicatorfrommain.修改程序使其返回ー1。返回值?1通常作為程序運(yùn)行失敗的指示器。然而,系統(tǒng)不同,如何(甚至是否)報告main函數(shù)運(yùn)行失敗也不同。重新編譯并再次運(yùn)行程序,看看你的系統(tǒng)如何處理main函數(shù)的運(yùn)行失敗指示器。1.2.AFirstLookatInput/Output初窺輸入/輸出C++doesnotdirectlydefineanystatementstodoinputoroutput(IO).Instead,IOisprovidedbythestandardlibrary.TheIOlibraryprovidesanextensivesetoffacilities.However,formanypurposes,includingtheexamplesinthisbook,oneneedstoknowonlyafewbasicconceptsandoperations.
C++并沒有直接定義進(jìn)行輸入或輸出(IO)的任何語句,這種功能是由標(biāo)準(zhǔn)庫提供的。IO庫提供了大量的設(shè)施。然而,對許多應(yīng)用,包括本書的例子而言,編程者只需要了解一些基本概念和操作。Mostoftheexamplesinthisbookusetheiostreamlibrary,whichhandlesformattedinputandoutput.Fundamentaltotheiostreamlibraryaretwotypesnamedistreamandostream,whichrepresentinputandoutputstreams,respectively.AstreamisasequenceofcharactersintendedtobereadfromorwrittentoanIOdeviceofsomekind.rrheterm"stream"isintendedtosuggestthatthecharactersaregenerated,orconsumed,sequentiallyovertime.本書的大多數(shù)例子都使用了處理格式化輸入和輸出的iostream庫。iostream庫的基礎(chǔ)是兩種命名為istream和ostream的類型,分別表示輸入流和輸出流。流是指要從某種IO設(shè)備上讀入或?qū)懗龅淖址蛄?。術(shù)語“流”試圖說明字符是隨著時間順序生成或消耗的。StandardInputandOutputObjects標(biāo)準(zhǔn)輸入與輸出對象ThelibrarydefinesfourIOobjects.Tohandleinput,weuseanobjectoftypeistreamnamedcin(pronounced“see-in").Thisobjectisalsoreferredtoasthestandardinput.Foroutput,weuseanostreamobjectnamedcout(pronounced"see-out").Itisoftenreferredtoasthestandardoutput.Thelibraryalsodefinestwootherostreamobjects,namedcorrandclog(pronounced"see-err"and"see-log,"respectively).Thecerrobject,referredtoasthestandarderror,istypicallyusedtogeneratewarninganderrormessagestousersofourprograms.Theclogobjectisusedforgeneralinformationabouttheexecutionoftheprogram.標(biāo)準(zhǔn)庫定義了4個IO對象。處理輸入時使用命名為cm(讀作see-in)的istream類型對象。這個對象也稱為標(biāo)進(jìn)輸△.處理輸出時使用命名為cout(讀作see-out)的ostream類型對象,這個對象也稱為標(biāo)準(zhǔn)輸出。標(biāo)準(zhǔn)庫還定義了另外兩個ostream對象,分別命名為cerr和clog(分別讀作“see-err”和“see-log'')。cerr對象又叫作標(biāo)準(zhǔn)錯誤,通常用來輸出警告和錯誤信息給程序的使用者。而clog對象用于產(chǎn)生程序執(zhí)行的一般信息。Ordinarily,thesystemassociateseachoftheseobjectswiththewindowinwhichtheprogramisexecuted.So,whenwereadfromcin,dataisreadfromthewindowinwhichtheprogramisexecuting,andwhenwewritetocout,cerr,orclog,theoutputiswrittentothesamewindow.Mostoperatingsystemsgiveusawayofredirectingtheinputoroutputstreamswhenwerunaprogram.Usingredirectionwecanassociatethesestreamswithfilesofourchoosing.一般情況下,系統(tǒng)將這些對象與執(zhí)行程序的窗口聯(lián)系起來。這樣,當(dāng)我們從cin讀入時,數(shù)據(jù)從執(zhí)行程序的窗口讀入,當(dāng)寫到cin、cerr或clog時,輸出寫至同一窗口。運(yùn)行程序時,大部分操作系統(tǒng)都提供了重定向輸入或輸出流的方法。利用重定向可以將這些流與所選擇的文件聯(lián)系起來。AProgramthatUsesthe10Libraryー個使用IO庫的程序Sofar,wehaveseenhowtocompileandexecuteasimpleprogram,althoughthatprogramdidnowork.Inouroverallproblem,we'llhaveseveralrecordsthatrefertothesameISBN.We'llneedtoconsolidatethoserecordsintoasingletotal,implyingthatwe'llneedtoknowhowtoaddthequantitiesofbookssold.到目前為止,我們已經(jīng)明白如何編譯與執(zhí)行簡單的程序,雖然那個程序什么也不做。在開篇的書店問題中,有一些記錄含有相同的ISBN,需要將這些記錄進(jìn)行匯總,也就是說需要弄清楚如何累加已售出書籍的數(shù)量。Toseehowtosolvepartofthatproblem,let'sstartbylookingathowwemightaddtwonumbers.UsingtheIOlibrary,wecanextendourmainprogramtoasktheusertogiveustwonumbersandthenprinttheirsum:為了弄清楚如何解決這個問題,我們先來看應(yīng)如何把兩數(shù)相加。我們可以使用IO庫來擴(kuò)充main程序,要求用戶給出兩個數(shù),然后輸出它們的和:#include<iostream>intmain()(std::cout?"Entertwonumbers:"?std::endl;intvl,v2;std::cin?vl?v2;std::cout?"Thesumof"?v1?"and"?v2?0is*'?vl+v2?std::endl;return0;)Thisprogramstartsbyprinting程序首先在用戶屏幕上顯示提示語:Entertwonumbers:ontheuser'sscreenandthenwaitsforinputfromtheuser.Iftheuserenters
然后程序等待用戶輸入。如果用戶輸入37followedbyanewline,thentheprogramproducesthefollowingoutput:跟著ー個換行符,則程序產(chǎn)生下面的輸出:Thesumof3and7is10Thefirstlineofourprogramisapreprocessordirective:程序的第一行是ー個預(yù)處理指示:#includ
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年設(shè)備供應(yīng)協(xié)議法律文本范例版
- 2024年網(wǎng)絡(luò)安全設(shè)備及服務(wù)租賃合同
- 2024年鋼材交易合同范本3篇
- 2024年零售行業(yè)數(shù)據(jù)挖掘與分析服務(wù)契約3篇
- 2024年項目復(fù)工補(bǔ)充協(xié)議3篇
- 2025年度特殊造型門窗定制與安裝合同范本3篇
- 通信工程割接監(jiān)理細(xì)則
- 五金供應(yīng)商評價語
- 2024液化天然氣國內(nèi)公路物流服務(wù)協(xié)議版B版
- 2025年度財務(wù)總監(jiān)崗位聘用合同樣本3篇
- 彈性模量自動生成記錄
- 老年癡呆患者安全護(hù)理
- 管理制度醫(yī)療器械質(zhì)量管理制度
- 顱腦損傷的高壓氧治療
- 公司章程模板五篇
- 汽車行走的藝術(shù)學(xué)習(xí)通超星期末考試答案章節(jié)答案2024年
- 2025屆山東省菏澤市部分重點(diǎn)學(xué)校高一上數(shù)學(xué)期末統(tǒng)考模擬試題含解析
- 2025屆云南省昆明市祿勸縣第一中學(xué)數(shù)學(xué)高二上期末復(fù)習(xí)檢測試題含解析
- 機(jī)械工程師招聘筆試題及解答
- 2023年基礎(chǔ)會計學(xué)課后習(xí)題及參考答案
- 2024年時事新聞及點(diǎn)評【六篇】
評論
0/150
提交評論