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