cours c++ 1.pdf

468
Cours de C/C++ Christian Casteyde

Transcript of cours c++ 1.pdf

  • CoursdeC/C++

    ChristianCasteyde

  • CoursdeC/C++parChristianCasteyde

    Copyright2003ChristianCasteyde

    Permissionisgrantedtocopy,distributeand/ormodifythisdocumentunderthetermsoftheGNUFreeDocumentationLicense,Version1.1

    oranylaterversionpublishedbytheFreeSoftwareFoundation;withnoInvariantSections,withnoFrontCoverTexts,andwithno

    BackCoverTexts.

    Acopyofthelicenseisincludedinthesectionentitled"GNUFreeDocumentationLicense".

    Permissionvousestdonnedecopier,distribueretmodifiercedocumentselonlestermesdelalicenceGNUpourlesdocumentationslibres,

    version1.1outouteautreversionultrieurepublieparlaFreeSoftwareFoundation.

    Unecopiedecettelicenceestinclusedanslannexeintitule"GNUFreeDocumentationLicense".Voustrouverezgalementunetraduction

    nonofficielledecettelicencedanslannexeintitule"LicencededocumentationlibreGNU".

    Historiquedesversions

    Version1.40.5 14/06/2002 Revupar:CCCorrectiondelallocationdynamiquedetableauxplusdunedimension.Version1.40.4 21/09/2002 Revupar:CCCorrectiondelexemplederecherchesurleschanesdecaractres.AjoutdesinitialiseursC99.Prcisionssurlaportabilitdestypesdedonnes.Prcisionssurlagestiondutampondentresurlesfluxdentre.Ajoutdunexempledutilisationdefoncteurdfiniparlutilisateurpourlesrecherchesdanslesconteneursassociatifs.Ajoutdesfigures.Correctionsorthographiques.Version1.40.3 12/05/2002 Revupar:CCNombreusescorrectionsorthographiques.Quelquescorrectionsetprcisions.Clarificationdequelquesexemples.Version1.40.2 26/01/2001 Revupar:CCCorrectionsorthographiques.AjoutdunliensurlesspcificationsSingleUnixdelOpenGroup.Version1.40.1 09/09/2001 Revupar:CCCorrectionsorthographiques.Prcisionssurlesoptimisationsdesoprateursdincrmentationetdedcrmentationpostfixsetprfixs.Prcisionssurloptimisationdescopiesdevariablestemporaires.Changementdelexempledumotclexplicit.Clarificationdesnotionsdesurchargeetderedfinitiondesfonctions.Version1.40.0 30/07/2001 Revupar:CCVersionfinale.Rorganisationpartielledelapremirepartie.Scissionduchapitrecontenantlesstructuresdecontrleetlesdfinitionsdetypescomplexesendeuxchapitres.Clarificationduchapitretraitantdesstructuresdecontrle.Dplacementduchapitresurlalisibilitetprcisionsdiverses.Clarificationdelanotiondinstruction.Correctionsdiversesdanslechapitretraitantdelacoucheobjet.Prcisionssurlalocalecodecvtdanslapartiedelabibliothquestandard.Correctionsorthographiquesdelapartietraitantdelabibliothquestandard.Version1.39.99 24/06/2001 Revupar:CCDescriptiondeslocalesstandards.Prcisionsurlinitialisationdesvariableslorsdeleursdclarations.Prcisionsurlesdroitsdaccsauxmembresdesclasseshtesdanslecasdesclasseschanes.Correctionsorthographiques.Version1.39.4 27/05/2001 Revupar:CCDescriptiondesfluxdentre/sortiedelabibliothquestandard.ModificationdelaprsentationsommairedesfluxdanslechapitresurlesfonctionnalitsobjetduC++.Prsentationsommairedeslocales.Version1.39.3 03/05/2001 Revupar:CCDescriptiondesalgorithmesdelabibliothquestandard.Version1.39.2 22/04/2001 Revupar:CCDescriptiondesconteneursdelabibliothquestandard.AjoutdunetraductiondelalicenceFDL.Suppressiondessymboles:,,etquinepassaientnienHTML,nienRTF(lessymboles:etnesontplusformatscorrectementdansleformatAdobeAcrobat,maislesautresformatssontprsentcorrects).Version1.39.1 05/03/2001 Revupar:CCDescriptiondestypesdedonnescomplmentairesdelabibliothquestandardC++.Correctionducomportementdubloccatchdesconstructeurstry.Rorganisationdudocumentendeuxparties,lunepourlelangage,lautrepourlabibliothquestandard.Ajoutdessourcesdesprogrammesdexempledansladistribution.Correctiondequelqueserreurssurlesoprateursnewetdeleteavecplacementetclarificationdesexplications.CorrectionduneerreurdanslexempledelaclasseBag.Version1.39.0 04/02/2001 Revupar:CCMiseenconformitdesenttesC++desexemplesaveclanorme.Correctiondesexemplesutilisantdesnomsrservsparlabibliothquestandard.Complmentsurlesexceptions.Correctionssurlinstanciationdestemplateetprcisionssurleurditiondeliens.PremirebauchededescriptiondelabibliothquestandardC++.Version1.38.1 14/10/2000 Revupar:CCPrcisionssurlesclassesdebasevirtuelles.Correctionsorthographiques.Version1.38.0 01/10/2000 Revupar:CCCorrectionstypographiques.Prcisionssurlesoprateurs&et*.Version1.37 23/08/2000 Revupar:CCPassageauformatdefichierSGML.Ajoutdeslienshypertextes.Correctionsmineures.Version1.36 27/07/2000 Revupar:CCComplmentsurlesparenthsesdanslesdfinitionsdemacros.Correctionssurlanumrotationdesparagraphes.Version1.35 10/07/2000 Revupar:CCCorrectionssurlesdclarationsusing.Version1.34 09/07/2000 Revupar:CCPassageenlicenceFDL.Ajoutdelatabledesmatires.Version1.33 22/60/2000 Revupar:CCCorrectionduneerreurdansleparagraphesurlesparamtrestemplatetemplate.Correctionsorthographiquesdiverses.

  • Version1.32 17/06/2000/ Revupar:CCCorrectionduneerreurdansleprogrammedexempledupremierchapitre.Correctionduneerreurdansunexemplesurladrivation.Prcisionssurlecomportementdumotclefconst.Correctionsorthographiquesdiverses.Version1.31 12/02/2000 Revupar:CCCorrectionsmineurs.Ajoutduparagraphesurlaspcialisationdunefonctionmembreduneclassetemplate.Version1.30 05/12/1999 Revupar:CCAjoutdelalicence.Modificationsmineuresduformatage.Version
  • TabledesmatiresAvantpropos........................................................................................................................................iI.LelangageC++.................................................................................................................................i

    1.PremireapprocheduC/C++..................................................................................................11.1.LescommentairesenC++..........................................................................................21.2.LestypesprdfinisduC/C++...................................................................................21.3.Notationdesvaleurs...................................................................................................51.4.Ladfinitiondesvariables..........................................................................................71.5.Instructionsetoprations............................................................................................91.6.Lesfonctions............................................................................................................12

    1.6.1.Dfinitiondesfonctions...............................................................................121.6.2.Appeldesfonctions......................................................................................131.6.3.Dclarationdesfonctions.............................................................................131.6.4.Surchargedesfonctions...............................................................................141.6.5.Fonctionsinline............................................................................................151.6.6.Fonctionsstatiques.......................................................................................161.6.7.Fonctionsprenantunnombrevariabledeparamtres.................................16

    1.7.Lafonctionmain.......................................................................................................181.8.Lesfonctionsdentre/sortiedebase.....................................................................19

    1.8.1.Gnralitssurlesfluxdentre/sortieenC..............................................191.8.2.Lafonctionprintf.........................................................................................211.8.3.Lafonctionscanf..........................................................................................23

    1.9.Exempledeprogrammecomplet..............................................................................242.Lesstructuresdecontrle.....................................................................................................25

    2.1.Lastructureconditionnelleif....................................................................................252.2.Labouclefor.............................................................................................................262.3.Lewhile....................................................................................................................272.4.Ledo.........................................................................................................................272.5.Lebranchementconditionnel...................................................................................282.6.Lesaut......................................................................................................................292.7.Lescommandesderupturedesquence..................................................................29

    3.Typesavancsetclassesdestockage....................................................................................313.1.Structuresdedonnesettypescomplexes................................................................31

    3.1.1.Lesstructures...............................................................................................313.1.2.Lesunions....................................................................................................333.1.3.Lesnumrations.........................................................................................343.1.4.Leschampsdebits.......................................................................................353.1.5.Initialisationdesstructuresetdestableaux..................................................363.1.6.Lesaliasdetypes.........................................................................................373.1.7.Transtypages................................................................................................38

    3.2.Lesclassesdestockage............................................................................................384.Lespointeursetrfrences....................................................................................................43

    4.1.Notiondadresse.......................................................................................................434.2.Notiondepointeur....................................................................................................434.3.Drfrencement,indirection...................................................................................444.4.Notionderfrence..................................................................................................464.5.Lienentrelespointeursetlesrfrences..................................................................464.6.Passagedeparamtresparvariableouparvaleur....................................................47

    4.6.1.Passageparvaleur........................................................................................474.6.2.Passageparvariable.....................................................................................48

    v

  • 4.6.3.Avantagesetinconvnientsdesdeuxmthodes...........................................484.6.4.CommentpasserlesparamtresparvariableenC?....................................494.6.5.Passagedeparamtresparrfrence............................................................49

    4.7.Rfrencesetpointeursconstantsetvolatiles..........................................................514.8.Arithmtiquedespointeurs.......................................................................................544.9.Utilisationdespointeursaveclestableaux...............................................................55

    4.9.1.Conversionsdestableauxenpointeurs........................................................554.9.2.Paramtresdefonctiondetypetableau.......................................................56

    4.10.Leschanesdecaractres:pointeursettableauxlafois!...................................574.11.Allocationdynamiquedemmoire........................................................................58

    4.11.1.AllocationdynamiquedemmoireenC...................................................584.11.2.AllocationdynamiqueenC++...................................................................63

    4.12.Pointeursetrfrencesdefonctions.......................................................................654.12.1.Pointeursdefonctions................................................................................654.12.2.Rfrencesdefonctions.............................................................................67

    4.13.Paramtresdelafonctionmainlignedecommande............................................684.14.DANGER................................................................................................................69

    5.LeprprocesseurC................................................................................................................715.1.Dfinition..................................................................................................................715.2.Lescommandesduprprocesseur............................................................................71

    5.2.1.Inclusiondefichier.......................................................................................715.2.2.Constantesdecompilationetremplacementdetexte..................................725.2.3.Compilationconditionnelle..........................................................................735.2.4.Autrescommandes.......................................................................................74

    5.3.Lesmacros................................................................................................................745.4.Manipulationdechanesdecaractresdanslesmacros...........................................765.5.Lestrigraphes...........................................................................................................77

    6.Modularitdesprogrammesetgnrationdesbinaires........................................................796.1.Pourquoifaireuneprogrammationmodulaire?.......................................................796.2.Lesdiffrentesphasesduprocessusdegnrationdesexcutables.........................796.3.CompilationspareenC/C++................................................................................826.4.Syntaxedesoutilsdecompilation............................................................................83

    6.4.1.Syntaxedescompilateurs.............................................................................836.4.2.Syntaxedemake..........................................................................................84

    6.5.Problmessyntaxiquesrelatifslacompilationspare.........................................856.5.1.Dclarationdestypes...................................................................................856.5.2.Dclarationdesvariables.............................................................................866.5.3.Dclarationdesfonctions.............................................................................866.5.4.Directivesdditiondeliens........................................................................86

    7.Commentfaireducodeillisible?.........................................................................................898.C++:lacoucheobjet............................................................................................................91

    8.1.Gnralits................................................................................................................918.2.ExtensiondelanotiondetypeduC.........................................................................928.3.DclarationdeclassesenC++..................................................................................928.4.Encapsulationdesdonnes.......................................................................................968.5.Hritage....................................................................................................................988.6.Classesvirtuelles....................................................................................................1008.7.Fonctionsetclassesamies......................................................................................102

    8.7.1.Fonctionsamies.........................................................................................1028.7.2.Classesamies.............................................................................................103

    8.8.Constructeursetdestructeurs..................................................................................1048.8.1.Dfinitiondesconstructeursetdesdestructeurs........................................104

    vi

  • 8.8.2.Constructeursdecopie...............................................................................1098.8.3.Utilisationdesconstructeursdanslestranstypages...................................110

    8.9.Pointeurthis............................................................................................................1118.10.Donnesetfonctionsmembresstatiques..............................................................112

    8.10.1.Donnesmembresstatiques.....................................................................1128.10.2.Fonctionsmembresstatiques...................................................................113

    8.11.Surchargedesoprateurs......................................................................................1158.11.1.Surchargedesoprateursinternes............................................................1158.11.2.Surchargedesoprateursexternes...........................................................1188.11.3.Oprateursdaffectation...........................................................................1208.11.4.Oprateursdetranstypage........................................................................1228.11.5.Oprateursdecomparaison......................................................................1228.11.6.Oprateursdincrmentationetdedcrmentation.................................1238.11.7.Oprateurfonctionnel..............................................................................1238.11.8.Oprateursdindirectionetdedrfrencement......................................1268.11.9.Oprateursdallocationdynamiquedemmoire.....................................127

    8.12.Desentressortiessimplifies...........................................................................1338.13.Mthodesvirtuelles..............................................................................................1358.14.Drivation.............................................................................................................1378.15.MthodesvirtuellespuresClassesabstraites.....................................................1408.16.Pointeurssurlesmembresduneclasse...............................................................145

    9.LesexceptionsenC++........................................................................................................1499.1.Lancementetrcuprationduneexception...........................................................1509.2.Remontedesexceptions........................................................................................1529.3.Listedesexceptionsautorisespourunefonction.................................................1549.4.Hirarchiedesexceptions.......................................................................................1559.5.Exceptionsdanslesconstructeurs..........................................................................157

    10.Identificationdynamiquedestypes...................................................................................16110.1.Identificationdynamiquedestypes......................................................................161

    10.1.1.Loprateurtypeid....................................................................................16110.1.2.Laclassetype_info..................................................................................163

    10.2.TranstypagesC++.................................................................................................16310.2.1.Transtypagedynamique...........................................................................16410.2.2.Transtypagestatique................................................................................16610.2.3.Transtypagedeconstanceetdevolatilit.................................................16710.2.4.Rinterprtationdesdonnes...................................................................167

    11.Lesespacesdenommage..................................................................................................16911.1.Dfinitiondesespacesdenommage.....................................................................169

    11.1.1.Espacesdenommagenommes...............................................................16911.1.2.Espacesdenommageanonymes..............................................................17111.1.3.Aliasdespacesdenommage...................................................................172

    11.2.Dclarationusing..................................................................................................17211.2.1.Syntaxedesdclarationsusing................................................................17211.2.2.Utilisationdesdclarationsusingdanslesclasses..................................174

    11.3.Directiveusing......................................................................................................17512.Lestemplate......................................................................................................................179

    12.1.Gnralits............................................................................................................17912.2.Dclarationdesparamtrestemplate....................................................................179

    12.2.1.Dclarationdestypestemplate................................................................17912.2.2.Dclarationdesconstantestemplate........................................................180

    12.3.Fonctionsetclassestemplate................................................................................18112.3.1.Fonctionstemplate...................................................................................181

    vii

  • 12.3.2.Lesclassestemplate.................................................................................18212.3.3.Fonctionsmembrestemplate...................................................................185

    12.4.Instanciationdestemplate....................................................................................18812.4.1.Instanciationimplicite..............................................................................18812.4.2.Instanciationexplicite..............................................................................18912.4.3.Problmessoulevsparlinstanciationdestemplate...............................190

    12.5.Spcialisationdestemplate...................................................................................19112.5.1.Spcialisationtotale.................................................................................19112.5.2.Spcialisationpartielle.............................................................................19212.5.3.Spcialisationdunemthodeduneclassetemplate...............................194

    12.6.Motcltypename.................................................................................................19512.7.Fonctionsexportes..............................................................................................196

    II.LabibliothquestandardC++.................................................................................................19713.Servicesetnotionsdebasedelabibliothquestandard...................................................199

    13.1.EncapsulationdelabibliothqueCstandard........................................................19913.2.Dfinitiondesexceptionsstandards.....................................................................20113.3.Abstractiondestypesdedonnes:lestraits........................................................20413.4.Abstractiondespointeurs:lesitrateurs..............................................................206

    13.4.1.Notionsdebaseetdfinition....................................................................20613.4.2.Classificationdesitrateurs......................................................................20713.4.3.Itrateursadaptateurs...............................................................................209

    13.4.3.1.Adaptateurspourlesfluxdentre/sortiestandards..................21013.4.3.2.Adaptateurspourlinsertiondlmentsdanslesconteneurs.....21213.4.3.3.Itrateurinversepourlesitrateursbidirectionnels.....................215

    13.5.Abstractiondesfonctions:lesfoncteurs..............................................................21713.5.1.Foncteursprdfinis.................................................................................21713.5.2.Prdicatsetfoncteursdoprateurslogiques............................................22213.5.3.Foncteursrducteurs................................................................................223

    13.6.Gestionpersonnalisedelammoire:lesallocateurs.........................................22513.7.Notiondecomplexitalgorithmique....................................................................229

    13.7.1.Gnralits...............................................................................................22913.7.2.Notionsmathmatiquesdebaseetdfinition...........................................23013.7.3.Interprtationpratiquedelacomplexit..................................................231

    14.Lestypescomplmentaires...............................................................................................23314.1.Leschanesdecaractres......................................................................................233

    14.1.1.Constructionetinitialisationdunechane..............................................23714.1.2.Accsauxpropritsdunechane..........................................................23814.1.3.Modificationdelatailledeschanes........................................................23914.1.4.Accsauxdonnesdelachanedecaractres.........................................24014.1.5.Oprationssurleschanes........................................................................242

    14.1.5.1.Affectationetconcatnationdechanesdecaractres................24214.1.5.2.Extractiondedonnesdunechanedecaractres......................24414.1.5.3.Insertionetsuppressiondecaractresdansunechane...............24514.1.5.4.Remplacementsdecaractresdunechane................................246

    14.1.6.Comparaisondechanesdecaractres.....................................................24814.1.7.Recherchedansleschanes......................................................................24914.1.8.Fonctionsdentre/sortiedeschanesdecaractres...............................251

    14.2.Lestypesutilitaires...............................................................................................25214.2.1.Lespointeursauto....................................................................................25214.2.2.Lespaires.................................................................................................255

    14.3.Lestypesnumriques...........................................................................................256

    viii

  • 14.3.1.Lescomplexes..........................................................................................25714.3.1.1.Dfinitionetprincipalespropritsdesnombrescomplexes......25714.3.1.2.Laclassecomplex.......................................................................259

    14.3.2.Lestableauxdevaleurs............................................................................26214.3.2.1.Fonctionnalitsdebasedesvalarray...........................................26314.3.2.2.Slectionmultipledeslmentsdunvalarray............................267

    14.3.2.2.1.Slectionparunmasque.................................................26714.3.2.2.2.Slectionparindexationexplicite...................................26814.3.2.2.3.Slectionparindexationimplicite..................................26914.3.2.2.4.Oprationsralisablessurlesslectionsmultiples.........271

    14.3.3.Leschampsdebits...................................................................................27215.Lesfluxdentre/sortie....................................................................................................277

    15.1.Notionsdebaseetprsentationgnrale..............................................................27715.2.Lestampons..........................................................................................................279

    15.2.1.Gnralitssurlestampons.....................................................................27915.2.2.Laclassebasic_streambuf........................................................................28015.2.3.Lesclassesdetamponsbasic_streambufetbasic_filebuf........................285

    15.2.3.1.Laclassebasic_stringbuf.............................................................28615.2.3.2.Laclassebasic_filebuf.................................................................288

    15.3.Lesclassesdebasedesflux:ios_baseetbasic_ios.............................................28915.3.1.Laclasseios_base....................................................................................29015.3.2.Laclassebasic_ios...................................................................................296

    15.4.Lesfluxdentre/sortie.......................................................................................29915.4.1.Laclassedebasebasic_ostream..............................................................29915.4.2.Laclassedebasebasic_istream...............................................................30515.4.3.Laclassebasic_iostream..........................................................................311

    15.5.Lesfluxdentre/sortiesurchanesdecaractres..............................................31215.6.Lesfluxdentre/sortiesurfichiers....................................................................313

    16.Leslocales.........................................................................................................................31716.1.Notionsdebaseetprincipedefonctionnementdesfacettes................................31816.2.Lesfacettesstandards...........................................................................................323

    16.2.1.Gnralits...............................................................................................32316.2.2.Lesfacettesdemanipulationdescaractres............................................324

    16.2.2.1.Lafacettectype...........................................................................32416.2.2.2.Lafacettecodecvt........................................................................328

    16.2.3.Lesfacettesdecomparaisondechanes...................................................33216.2.4.Lesfacettesdegestiondesnombres........................................................335

    16.2.4.1.Lafacettenum_punct..................................................................33516.2.4.2.Lafacettedcrituredesnombres...............................................33716.2.4.3.Lafacettedelecturedesnombres...............................................338

    16.2.5.Lesfacettesdegestiondesmonnaies.......................................................33916.2.5.1.Lafacettemoney_punct..............................................................34016.2.5.2.Lesfacettesdelectureetdcrituredesmontants.......................342

    16.2.6.Lesfacettesdegestiondutemps..............................................................34316.2.6.1.Lafacettedcrituredesdates.....................................................34516.2.6.2.Lafacettedelecturedesdates.....................................................345

    16.2.7.Lesfacettesdegestiondesmessages.......................................................34716.3.Personnalisationdesmcanismesdelocalisation.................................................349

    16.3.1.Crationetintgrationdunenouvellefacette.........................................34916.3.2.Remplacementdunefacetteexistante.....................................................353

    17.Lesconteneurs...................................................................................................................35717.1.Fonctionnalitsgnralesdesconteneurs.............................................................357

    ix

  • 17.1.1.Dfinitiondesitrateurs...........................................................................35817.1.2.Dfinitiondestypesdedonnesrelatifsauxobjetscontenus..................35917.1.3.Spcificationdelallocateurmmoireutiliser.......................................35917.1.4.Oprateursdecomparaisondesconteneurs.............................................36017.1.5.Mthodesdintrtgnral......................................................................361

    17.2.Lessquences.......................................................................................................36117.2.1.Fonctionnalitscommunes.......................................................................361

    17.2.1.1.Constructionetinitialisation.......................................................36117.2.1.2.Ajoutetsuppressiondlments.................................................363

    17.2.2.Lesdiffrentstypesdesquences............................................................36417.2.2.1.Leslistes......................................................................................36517.2.2.2.Lesvecteurs.................................................................................36817.2.2.3.Lesdeques...................................................................................37017.2.2.4.Lesadaptateursdesquences......................................................371

    17.2.2.4.1.Lespiles..........................................................................37117.2.2.4.2.Lesfiles...........................................................................37217.2.2.4.3.Lesfilesdepriorits........................................................372

    17.3.Lesconteneursassociatifs....................................................................................37417.3.1.Gnralitsetpropritsdebasedesclefs...............................................37517.3.2.Constructionetinitialisation....................................................................37617.3.3.Ajoutetsuppressiondlments..............................................................37717.3.4.Fonctionsderecherche............................................................................379

    18.Lesalgorithmes.................................................................................................................38518.1.Oprationsgnralesdemanipulationdesdonnes.............................................385

    18.1.1.Oprationsdinitialisationetderemplissage...........................................38618.1.2.Oprationsdecopie..................................................................................38718.1.3.Oprationsdchangedlments............................................................38818.1.4.Oprationsdesuppressiondlments.....................................................38918.1.5.Oprationsderemplacement....................................................................39118.1.6.Rorganisationdesquences...................................................................392

    18.1.6.1.Oprationsderotationetdepermutation....................................39318.1.6.2.Oprationsdinversion................................................................39418.1.6.3.Oprationsdemlange................................................................395

    18.1.7.Algorithmesditrationetdetransformation...........................................39618.2.Oprationsderecherche.......................................................................................401

    18.2.1.Oprationderecherchedlments..........................................................40118.2.2.Oprationsderecherchedemotifs...........................................................403

    18.3.Oprationsdordonnancement..............................................................................40518.3.1.Oprationsdegestiondestas...................................................................40618.3.2.Oprationsdetri.......................................................................................40818.3.3.Oprationsderecherchebinaire...............................................................412

    18.4.Oprationsdecomparaison..................................................................................41518.5.Oprationsensemblistes.......................................................................................417

    18.5.1.Oprationsdinclusion.............................................................................41718.5.2.Oprationsdintersection.........................................................................41818.5.3.Oprationsdunionetdefusion...............................................................42018.5.4.Oprationsdediffrence..........................................................................42218.5.5.Oprationsdepartitionnement.................................................................424

    x

  • 19.Conclusion.................................................................................................................................427A.Prioritsdesoprateurs.............................................................................................................429B.DraftPapers................................................................................................................................431C.GNUFreeDocumentationLicense...........................................................................................433D.LicencededocumentationlibreGNU......................................................................................439BIBLIOGRAPHIE.........................................................................................................................445

    xi

  • xii

  • Listedestableaux11.Typespourleschanesdeformatdeprintf..............................................................................2112.Optionspourlestypesdeschanesdeformat.............................................................................2221.Oprateursdecomparaison.........................................................................................................2522.Oprateurslogiques.....................................................................................................................2551.Trigraphes....................................................................................................................................7781.Droitsdaccssurlesmembreshrits.......................................................................................98141.Fonctionsderecherchedansleschanesdecaractres...........................................................249142.Fonctionsspcifiquesauxcomplexes......................................................................................261151.Optionsdeformatagedesflux.................................................................................................292152.Modesdouverturedesfichiers...............................................................................................293153.Directionsdedplacementdansunfichier..............................................................................293154.tatsdesfluxdentre/sortie.................................................................................................294155.Manipulateursdesfluxdesortie..............................................................................................303156.Manipulateursutilisantdesparamtres...................................................................................304157.Manipulateursdesfluxdentre..............................................................................................311161.FonctionsCdegestiondesdates.............................................................................................344171.Mthodesspcifiquesauxlistes..............................................................................................366A1.Oprateursdulangage..............................................................................................................429

    Listedesillustrations41.Notiondepointeuretdadresse...................................................................................................4361.Processusdegnrationdesbinaires...........................................................................................80

    Listedesexemples11.CommentaireC..............................................................................................................................212.CommentaireC++.........................................................................................................................213.Typessignsetnonsigns.............................................................................................................414.Notationdesentiersenbase10.....................................................................................................515.Notationdesentiersenbase16.....................................................................................................516.Notationdesentiersenbase8.......................................................................................................617.Notationdesrels..........................................................................................................................618.Dfinitiondevariables...................................................................................................................719.Dfinitionduntableau..................................................................................................................8110.Instructionvide............................................................................................................................9111.Affectationcompose................................................................................................................10112.Instructioncompose.................................................................................................................12113.Dfinitiondefonction................................................................................................................13114.Dfinitiondeprocdure.............................................................................................................13115.Appeldefonction......................................................................................................................13116.Dclarationdefonction.............................................................................................................14117.Surchargedefonctions..............................................................................................................15118.Fonctioninline...........................................................................................................................16119.Fonctionstatique.......................................................................................................................16120.Fonctionnombredeparamtresvariable................................................................................18121.Programmeminimal..................................................................................................................19

    xiii

  • 122.Utilisationdeprintfetfprintf....................................................................................................22123.Programmecompletsimple.......................................................................................................2421.Testconditionnelif......................................................................................................................2622.Bouclefor....................................................................................................................................2623.Bouclewhile................................................................................................................................2724.Boucledo.....................................................................................................................................2825.Branchementconditionnelswitch...............................................................................................2826.Rupturedesquenceparcontinue...............................................................................................3031.Dclarationdevariabledetypestructure....................................................................................3132.Dclarationdestructure...............................................................................................................3233.Dclarationduneunion..............................................................................................................3334.Unionavecdiscriminant..............................................................................................................3435.Dclarationdunenumration...................................................................................................3536.Dclarationdunchampsdebits.................................................................................................3537.Initialisationdunestructure........................................................................................................3638.InitialisationdestructureC99.....................................................................................................3639.Dfinitiondetypesimple............................................................................................................37310.Dfinitiondetypetableau..........................................................................................................37311.Dfinitiondetypestructure.......................................................................................................37312.TranstypageenC.......................................................................................................................38313.Dclarationdunevariablelocalestatique................................................................................40314.Dclarationdunevariableconstante........................................................................................40315.Dclarationdeconstanteexternes.............................................................................................40316.Utilisationdumotclmutable..................................................................................................4141.Dclarationdepointeurs..............................................................................................................4542.Utilisationdepointeursdestructures..........................................................................................4543.Dclarationderfrences............................................................................................................4644.Passagedeparamtreparvaleur..................................................................................................4745.PassagedeparamtreparvariableenPascal...............................................................................4846.PassagedeparamtreparvariableenC......................................................................................4947.PassagedeparamtreparrfrenceenC++................................................................................5048.Passagedeparamtresconstantparrfrence.............................................................................5049.Crationdunobjettemporairelorsdunpassageparrfrence.................................................50410.Arithmtiquedespointeurs.......................................................................................................54411.Accsauxlmentsduntableauparpointeurs........................................................................56412.Passagedetableauenparamtre...............................................................................................57413.AllocationdynamiquedemmoireenC...................................................................................59414.Dclarationdepointeurdefonction..........................................................................................65415.Drfrencementdepointeurdefonction.................................................................................66416.Applicationdespointeursdefonctions.....................................................................................66417.Rcuprationdelalignedecommande.....................................................................................6851.Dfinitiondeconstantesdecompilation.....................................................................................7252.MacrosMINetMAX..................................................................................................................7461.Compilationdunfichieretditiondeliens................................................................................8462.Fichiermakefilesansdpendances..............................................................................................8563.Fichiermakefileavecdpendances.............................................................................................8564.DclarationsutilisablesenCetenC++......................................................................................8771.Programmeparfaitementillisible................................................................................................8981.Dclarationdemthodesdeclasse..............................................................................................9382.Oprateurdersolutiondeporte...............................................................................................9383.Utilisationdeschampsduneclassedansunedesesmthodes..................................................9484.Utilisationdumotclclass.........................................................................................................97

    xiv

  • 85.Hritagepublic,privetprotg.................................................................................................9986.Oprateurdersolutiondeporteetmembredeclassesdebase..............................................10087.Classesvirtuelles.......................................................................................................................10188.Fonctionsamies.........................................................................................................................10289.Classeamie................................................................................................................................103810.Constructeursetdestructeurs...................................................................................................105811.Appelduconstructeurdesclassesdebase..............................................................................106812.Initialisationdedonnesmembresconstantes.........................................................................108813.Donnemembrestatique.........................................................................................................112814.Fonctionmembrestatique.......................................................................................................113815.Appeldefonctionmembrestatique.........................................................................................114816.Surchargedesoprateursinternes...........................................................................................116817.Surchargedoprateursexternes..............................................................................................118818.Oprateursdincrmentationetdedcrmentation.................................................................123819.Implmentationduneclassematrice......................................................................................124820.Oprateurdedrfrencementetdindirection.......................................................................126821.Dterminationdelatailledelenttedestableaux................................................................127822.Oprateursnewavecplacement..............................................................................................129823.Utilisationdenewsansexception...........................................................................................133824.Fluxdentre/sortiecinetcout..............................................................................................134825.Redfinitiondemthodedeclassedebase.............................................................................136826.Conteneurdobjetspolymorphiques.......................................................................................141827.Pointeurssurmembresstatiques.............................................................................................14691.Utilisationdesexceptions..........................................................................................................15192.Installationdungestionnairedexceptionavecset_terminate..................................................15393.Gestiondelalistedesexceptionsautorises.............................................................................15594.Classificationdesexceptions.....................................................................................................15695.Exceptionsdanslesconstructeurs.............................................................................................158101.Oprateurtypeid......................................................................................................................161102.Oprateurdynamic_cast..........................................................................................................165111.Extensiondenamespace..........................................................................................................169112.Accsauxmembresdunnamespace......................................................................................170113.Dfinitionexternedunefonctiondenamespace....................................................................170114.Dfinitiondenamespacedansunnamespace..........................................................................170115.Dfinitiondenamespaceanonyme..........................................................................................171116.Ambigutsentrenamespaces.................................................................................................171117.Dclarationusing.....................................................................................................................172118.Dclarationsusingmultiples...................................................................................................173119.Extensiondenamespaceaprsunedclarationusing.............................................................1731110.Conflitentredclarationsusingetidentificateurslocaux......................................................1741111.Dclarationusingdansuneclasse.........................................................................................1741112.Rtablissementdedroitsdaccslaidedunedirectiveusing...........................................1751113.Directiveusing.......................................................................................................................1761114.Extensiondenamespaceaprsunedirectiveusing...............................................................1761115.Conflitentredirectiveusingetidentificateurslocaux...........................................................177121.Dclarationdeparamtrestemplate........................................................................................179122.Dclarationdeparamtretemplatetemplate...........................................................................180123.Dclarationdeparamtrestemplatedetypeconstante...........................................................181124.Dfinitiondefonctiontemplate...............................................................................................182125.Dfinitiondunepiletemplate.................................................................................................183126.Fonctionmembretemplate......................................................................................................185127.Fonctionmembretemplateduneclassetemplate..................................................................186

    xv

  • 128.Fonctionmembretemplateetfonctionmembrevirtuelle.......................................................187129.Surchargedefonctionmembreparunefonctionmembretemplate........................................1871210.Instanciationimplicitedefonctiontemplate.........................................................................1881211.Instanciationexplicitedeclassetemplate.............................................................................1901212.Spcialisationtotale...............................................................................................................1921213.Spcialisationpartielle..........................................................................................................1921214.Spcialisationdefonctionmembredeclassetemplate.........................................................1941215.Motcltypename..................................................................................................................1951216.Motclexport.......................................................................................................................196131.Dterminationdeslimitesduntype.......................................................................................201132.Itrateursdefluxdentre........................................................................................................210133.Itrateurdefluxdesortie.........................................................................................................211134.Itrateurdinsertion.................................................................................................................214135.Utilisationdunitrateurinverse.............................................................................................216136.Utilisationdesfoncteursprdfinis.........................................................................................219137.Adaptateursdefonctions.........................................................................................................220138.Rductiondefoncteursbinaires..............................................................................................224139.Utilisationdelallocateurstandard..........................................................................................227141.Redimensionnementdunechane...........................................................................................239142.Rservationdemmoiredansunechane...............................................................................240143.Accsdirectauxdonnesdunechane...................................................................................242144.Affectationdechanedecaractres.........................................................................................243145.Concatnationdechanesdecarctres....................................................................................243146.Copiedetravaildesdonnesdunebasic_string.....................................................................244147.Extractiondesouschane........................................................................................................245148.Insertiondecaractresdansunechane..................................................................................245149.Suppressiondecaractresdansunechane.............................................................................2461410.Remplacementdunesouschanedansunechane..............................................................2471411.changeducontenudedeuxchanesdecaractres..............................................................2471412.Comparaisonsdechanesdecaractres.................................................................................2481413.Recherchesdansleschanesdecaractres............................................................................2501414.Lecturedelignessurlefluxdentre....................................................................................2511415.Utilisationdespointeursautomatiques..................................................................................2531416.Sortiedunpointeurdunauto_ptr........................................................................................2541417.Utilisationdespaires.............................................................................................................2561418.Manipulationdesnombrescomplexes..................................................................................2611419.Modificationdelatailledunvalarray..................................................................................2651420.Oprationssurlesvalarray....................................................................................................2661421.Dcalagesetrotationsdevaleurs..........................................................................................2661422.Slectiondeslmentsdunvalarrayparunmasque............................................................2681423.Slectiondeslmentsdunvalarrayparindexation............................................................2691424.Slectionparindexationimplicite.........................................................................................2701425.Utilisationdunbitset............................................................................................................2741426.Manipulationdesbitsdunchampdebits.............................................................................275151.Lectureetcrituredansuntampondechanedecaractres...................................................287152.Lectureetcrituredansuntampondefichier.........................................................................289153.Modificationdesoptionsdeformatagedesflux......................................................................295154.Dfinitiondunnouveloprateurdinsertionpourunfluxdesortie.......................................301155.criturededonnesbrutessurunfluxdesortie......................................................................302156.Utilisationdesmanipulateurssurunfluxdesortie.................................................................305157.crituredunnouveloprateurdextractionpourunfluxdentre.........................................307158.Lecturesdelignessurlefluxdentrestandard......................................................................310

    xvi

  • 159.Utilisationdefluxdentre/sortiesurchanesdecaractres.................................................3131510.Utilisationdefluxdentre/sortiesurunfichier..................................................................3141511.Repositionnementdupointeurdefichierdansunfluxdentre/sortie................................315161.ProgrammeC++prenantencomptelalocaledelenvironnement.........................................322162.Conversiondunewstringenstring.........................................................................................326163.Conversiondunechanedecaractreslargesenchaneencodagevariable........................330164.Dterminationdelalongueurdunechanedecaractresencodagevariable......................331165.Comparaisondechanesdecaractreslocalises....................................................................334166.Dfinitiondenouvellesfacettes...............................................................................................349167.Spcialisationdunefacetteexistante......................................................................................353171.Constructionetinitialisationduneliste..................................................................................362172.Insertiondlmentsdansuneliste.........................................................................................363173.Accslatteetlaqueueduneliste...................................................................................365174.Manipulationdelistes.............................................................................................................367175.Accsauxlmentsdunvecteur............................................................................................369176.Utilisationdunepile...............................................................................................................371177.Utilisationdunefile................................................................................................................372178.Utilisationdunefiledepriorit..............................................................................................373179.Constructionetinitialisationduneassociationsimple...........................................................3761710.Insertionetsuppressiondlmentsduneassociation..........................................................3781711.Recherchedansuneassociation............................................................................................3801712.Utilisationdunfoncteurdecomparaisonpersonnalis........................................................3811713.Dfinitiondirectedufoncteurdecomparaisonpourlesrecherches.....................................382181.Algorithmedegnrationdobjetsetderemplissagedunconteneur....................................386182.Algorithmedecopieinverse....................................................................................................387183.Algorithmedchange.............................................................................................................388184.Algorithmedesuppression......................................................................................................390185.Algorithmedesuppressiondesdoublons................................................................................391186.Algorithmederechercheetderemplacement.........................................................................392187.Algorithmederotation............................................................................................................393188.Algorithmedepermutation.....................................................................................................394189.Algorithmedinversion............................................................................................................3951810.Algorithmedemlange.........................................................................................................3961811.Algorithmesditration.........................................................................................................3971812.Algorithmededcomptedlments.....................................................................................3981813.Algorithmedaccumulation...................................................................................................3991814.Algorithmedeproduitscalaire..............................................................................................4001815.Algorithmesdesommespartiellesetdediffrencesadjacentes...........................................4011816.Algorithmederecherchedlments.....................................................................................4021817.Algorithmesderecherchedemotif.......................................................................................4041818.Algorithmederecherchededoublons...................................................................................4051819.Algorithmesdemanipulationdestas....................................................................................4071820.Algorithmedetri...................................................................................................................4091821.Algorithmedetripartiel........................................................................................................4101822.Algorithmedepositionnementdunimelment.................................................................4111823.Algorithmesdedterminationdumaximumetduminimum...............................................4111824.Algorithmesdedterminationdesbornesinfrieuresetsuprieures....................................4131825.Algorithmederecherchebinaire...........................................................................................4141826.Algorithmedecomparaisondeconteneurs...........................................................................4161827.Algorithmedecomparaisonlexicographique........................................................................4171828.Algorithmededterminationdinclusion..............................................................................4181829.Algorithmedintersectiondensembles.................................................................................419

    xvii

  • 1830.Algorithmesdunionetdefusiondensembles.....................................................................4201831.Algorithmederunificationdedeuxsousensembles...........................................................4211832.Algorithmesdediffrencedensembles................................................................................4231833.Algorithmedepartitionnement.............................................................................................424

    xviii

  • AvantproposCelivreestuncoursdeCetdeC++. Ilsadresseauxpersonnesquiontdjquelquesnotionsdeprogrammationdansunlangagequelconque. Lesconnaissancesrequisesnesont pastrslevescependant:ilnestpasncessairedavoirfaitdegrandsprogrammespourlirecedocument.Ilsuffitdavoirvucequestunprogrammeetcomprislesgrandsprincipesdelaprogrammation.

    Celivreeststructurendeuxgrandesparties,traitantchacuneundesaspectsduC++.Lapremirepartie,contenantleschapitres112,traitedulangageC++luimme,desasyntaxeetdesesprincipalesfonctionnalits.LadeuximepartiequantelleseconcentresurlabibliothquestandardC++,quifournitunensembledefonctionnalitscohrentesetrutilisablespartouslesprogrammeurs.LabibliothquestandardC++agalementlavantagedutiliserlesconstructionslesplusavancesdulangage,etillustredoncparfaitementlesnotionsquiauronttabordesdanslapremirepartie.Ladescriptiondelabibliothquestandardstendduchapitre13auchapitre18.

    SilabibliothquestandardC++estdcriteendtail,ilnenvapasdemmepourlesfonctionsdelabibliothqueC. VousnetrouverezdoncpasdanscelivreladescriptiondesfonctionsclassiquesduC, ni celledesfonctionslespluscourantesdelanormePOSIX. Eneffet, bienqueprsentessurquasimenttouslessystmesdexploitation,cesfonctionssontspcifiqueslanormePOSIXetnappartiennentpasaulangageensoi.SeuleslesfonctionsincontournablesdelabibliothqueCserontdoncprsentesici. Si vousdsirezplusderenseignements, reportezvousauxspcificationsdesappelssystmesPOSIXdelOpenGroup(http://www.unixsystems.org/single_unix_specification/),ouladocumentationdesenvironnementsdedveloppementetlaidedeskitsdedveloppementdessystmesdexploitation(SDK).

    Celivreapour but deprsenter lelangageC++tel quil est dcrit par lanormeISO14882dulangageC++. Cependant, bienquecettenormeait tpublieen1999, letexteofficielnest paslibrement disponible. Commejeneveuxpascautionner lefait quuntextedenormeinternational nesoit pas accessibletous, jemesuis rabattusur ledocument duprojet denormalisationdulangage, datant du2dcembre1996et intitulWorkingPaper for DraftProposed International Standard for Information Systems Programming Language C++(http://casteyde.christian.free.fr/cpp/cours/drafts/index.html).

    Notezquelescompilateursquirespectentcettenormesecomptentencoresurlesdoigtsdunemain,etquelesinformationsetexemplesdonnsicipeuventnepassavrerexactsaveccertainsproduits.Enparticulier,certainsexemplesnecompilerontpasaveclescompilateurslesplusmauvais.Notezgalementquecertainesconstructionsdulangagenontpaslammesignificationavectouslescompilateurs,parcequellesonttimplmentesavantquelanormenelesspcifiecompltement.Cesdiffrencespeuventconduireducodenonportable,etonttsignaleschaquefoisdansunenote.Lefaitquelesexemplesdecelivrenefonctionnentpasavecdetelscompilateursnepeutdoncpastreconsidrcommeuneerreur,maispluttcommeunenonconformitdesoutilsutiliss,quiserasansdoutelevedanslesversionsultrieuresdecesproduits.

    Aprsavoirtentdefaireuneprsentationrigoureusedusujet,jaidciddarrangerleplandecelivredansunordrepluspdagogique.Ilestmonavisimpossibledeparlerdunsujetuntantsoitpeuvastedansunordrepurementmathmatique,cestdireunordreolesnotionssontintroduitesuneune,partirdesnotionsdjconnues(chaquefonction,oprateur,etc.napparatpasavantsadfinition). Untelplanncessiteraitdecouperletexteenmorceauxquinesontplusthmatiques.Jai doncprisladcisiondeprsenterleschosesparordrelogique, et nonparordredencessitsyntaxique.

    Lesconsquencesdecechoixsontlessuivantes:

    ilfautadmettrecertaineschoses,quittelescomprendreplustard;

    i

  • Avantpropos

    ilfautliredeuxfoiscelivre.Lorsdelapremirelecture,onvoitlessentiel,etlorsdeladeuximelecture,oncomprendlesdtails(detoutesmanires,jefliciteceluiquicomprendtouteslessubtilitsduC++dupremiercoup).

    Enfin, ce livre est undocument vivant. Il est librement tlchargeable sur mon site web(http://casteyde.christian.free.fr),oladernireversionpeuttrercupre.Touteremarqueestdonclabienvenue.Jetcheraidecorrigerleserreursquelonmesignaleradanslamesuredupossible,etdapporterlesmodificationsncessairessiunpointestobscur.Sivousprenezletempsdemenvoyerlesremarquesetleserreursquevousavezpudtecter, jevoussauraisgrdevrifieraupralablequellessonttoujoursdactualitdansladernireversiondecedocument.cettefin,unhistoriquedesrvisionsatinclusenpremirepagepourpermettrelidentificationdesdiffrentesditionsdecedocument.

    ii

  • I.LelangageC++LeC++estlundeslangagesdeprogrammationlesplusutilissactuellement.Ilestlafoisfacileutiliseret trsefficace. Il souffrecependant delarputationdtrecompliquet illisible. Cetterputationestenpartiejustifie.Lacomplexitdulangageestinvitablelorsquonchercheavoirbeaucoupdefonctionnalits.Enrevanche,encequiconcernelalisibilitdesprogrammes,toutdpenddelabonnevolontduprogrammeur.

    LescaractristiquesduC++enfontunlangageidalpourcertainstypesdeprojets.Ilestincontournabledanslaralisationdesgrandsprogrammes.Lesoptimisationsdescompilateursactuelsenfontgalementunlangagedeprdilectionpourceuxquirecherchentlesperformances.Enfin,celangageest,avecleC,idalpourceuxquidoiventassurerlaportabilitdeleursprogrammesauniveaudesfichierssources(pasdesexcutables).

    LesprincipauxavantagesduC++sontlessuivants:

    grandnombredefonctionnalits;

    performancesduC;

    facilitdutilisationdeslangagesobjets;

    portabilitdesfichierssources;

    facilitdeconversiondesprogrammesCenC++,et,enparticulier,possibilitdutilisertouteslesfonctionnalitsdulangageC;

    contrlederreursaccru.

    Ondisposedoncdequasimenttout:puissance, fonctionnalit, portabilitetsret. Larichesseducontrlederreursdulangage, bassuruntypagetrsfort, permet designalerungrandnombrederreurslacompilation. Toutesceserreurssontautantderreursqueleprogrammenefaitpaslexcution.LeC++peutdonctreconsidrcommeunsuperC.LereversdelamdailleestquelesprogrammesCnesecompilentpasdirectementenC++:ilestcourantquedesimplesavertissementsenCsoientdeserreursblocantesenC++.Quelquesadaptationssontdoncsouventncessaires,cependant,cellescisontminimes,puisquelasyntaxeduC++estbasesurcelleduC.OnremarqueraquetouslesprogrammesCpeuventtrecorrigspourcompilerlafoisenCetenC++.

    Toutledbutdecettepartie(chapitres18)traitedesfonctionnalitscommunesauCetauC++,eninsistantbiensurlesdiffrencesentrecesdeuxlangages.CeschapitresprsententessentiellementlasyntaxedesconstructionsdebaseduCetduC++.LedbutdecettepartiepeutdoncgalementtreconsidrcommeuncoursallgsurlelangageC. Cependant, lesconstructionssyntaxiquesutilisessontcritesdetellesortequellessontcompilablesenC++.CelasignifiequellesnutilisentpascertainesfonctionnalitsdouteusesduC.CeuxquidsirentutiliserlapremirepartiecommeuncoursdeCdoiventdoncsavoirquilsagitduneversionpuredecelangage. Enparticulier, lesappelsdefonctionsnondclaresoulesappelsdefonctionsavectropdeparamtresnesont pasconsidrscommedespratiquesdeprogrammationvalables.

    Leschapitressuivants(chapitres812)netraitentqueduC++.LeChapitre8traitedelaprogrammationorienteobjetetdetouteslesextensionsquionttapportesaulangageCpourgrerlesobjets.LeChapitre9prsentelemcanismedesexceptionsdulangage,quipermetdegrerleserreursplusfacilement.LidentificationdynamiquedestypesseradcritedansleChapitre10.LeChapitre11prsentelanotiondespacedenommage,quelonutiliseafindviterlesconflitsdenomsentrelesdiffrentespartiesdungrandprojet.Enfin,leChapitre12dcritlemcanismedestemplate,quipermetdcriredesportionsdecodeparamtrespardestypesdedonnesoupardesvaleursconstantes.

  • CesderniresnotionssontutilisesintensivementdanslabibliothquestandardC++,aussilalecturecompltedelapremirepartieestelleindispensableavantdesattaquerladeuxime.

    Danstoutecettepremirepartie,lasyntaxeseradonne,saufexception,aveclaconventionsuivante:cequiestentrecrochets([et ])estfacultatif.Deplus,quandplusieurslmentsdesyntaxesontsparsparunebarreverticale( |), lundeceslments, etunseulement, doittreprsent(cestunouexclusif). Enfin, lespointsdesuspensiondsigneront uneitrationventuelledumotifprcdent.

    Parexemple,silasyntaxedunecommandeestlasuivante:

    [fac|rty|sss]zer[(kfl[,kfl[...]])];

    lescombinaisonssuivantesserontsyntaxiquementcorrectes:

    zer;faczer;rtyzer;zer(kfl);ssszer(kfl,kfl,kfl,kfl);

    maislacombinaisonsuivanteseraincorrecte:

    facssszer()

    pourlesraisonssuivantes:

    facetssssontmutuellementexclusifs,bienquefacultatifstouslesdeux;

    aumoinsunkflestncessairesilesparenthsessontmises;

    ilmanquelepointvirgulefinal.

    Rassurezvous, il nyaurapratiquement jamaisdesyntaxeaussi complique. Jesuissincrementdsoldelacomplexitdecetexemple.

  • Chapitre1.PremireapprocheduC/C++LeC/C++estunlangageprocdural,dummetypequelePascalparexemple.Celasignifiequelesinstructionssontexcuteslinairementetregroupesenblocs:lesfonctionsetlesprocdures(lesprocduresnexistentpasenC/C++,cesontdesfonctionsquineretournentpasdevaleur).

    Toutprogrammeapourbutdeffectuerdesoprationssurdesdonnes.Lastructurefondamentaleestdonclasuivante:

    ENTREDESDONNES(clavier,souris,fichier,autrespriphriques)

    |TRAITEMENTDESDONNES

    |SORTIEDESDONNES

    (cran,imprimante,fichier,autrespriphriques)

    Cesdiversestapespeuventtredispersesdansleprogramme.Parexemple,lesentrespeuventsetrouverdansleprogrammemme(lutilisateurnadanscecaspasbesoindelessaisir).Pourlaplupartdesprogrammes,lesdonnesenentreproviennentdufluxdentrestandard,etlesdonnesmisesensortiesontdirigesverslefluxdesortiestandard.Toutefois,leprocessusdentredesdonnespeuttrerptautantdefoisquencessairependantlexcutiondunprogramme,etlesdonnestraitesaufuretmesurequellesapparaissent.Parexemple,pourlesprogrammesgraphiques,lesdonnessontreuesdelapartdusystmesousformedemessagescaractrisantlesvnementsgnrsparlutilisateurouparlesystmeluimme(dplacementdesouris,fermeturedunefentre,appuisurunetouche, etc.). Letraitementdesprogrammesgraphiquesestdoncuneboucleinfinie(quelonappellelaboucledesmessages),quipermetdercuprerlesmessagesetdeprendrelesactionsenconsquence. Danscecas, lasortiedesdonnescorrespondaucomportement queleprogrammeadopteenrponsecesmessages.Celapeuttretoutsimplementdafficherlesdonnessaisies,ou,plusgnralement,dappliquerunecommandeauxdonnesencoursdemanipulation.

    Lesdonnesmanipulessont stockesdansdesvariables, cestdiredeszonesdelammoire.Commeleurnomlindique,lesvariablespeuventtremodifies(parletraitementdesdonnes).Desoprationspeuventdonctreeffectuessurlesvariables,maispasnimportelesquelles.Parexemple,onnepeutpasajouterdespommesdesbananes,saufdfinircetteoprationbienprcisment.Lesoprationsdpendentdoncdelanaturedesvariables. Afinderduirelesrisquesderreursdeprogrammation,leslangagescommeleC/C++donnentuntypechaquevariable(parexemple:pommeetbanane).Lorsdelacompilation(phasedetraductiondutextesourceduprogrammeenexcutable),cestypessontutilisspourvrifiersilesoprationseffectuessontautorises.Leprogrammeurpeutvidemmentdfinirsesproprestypes.

    Lelangagefournitdestypesdebaseetdesoprationsprdfiniessurcestypes.Lesoprationsquipeuvent trefaitessont soit lapplicationdunoprateur, soit lapplicationdunefonctionsurlesvariables.Logiquementparlant,ilnyapasdediffrence.Seulelasyntaxechange:

    a=2+3

    estdoncstrictementquivalent:

    a=ajoute(2,3)

    1

  • Chapitre1.PremireapprocheduC/C++

    videmment, desfonctionsutilisateur peuvent tredfinies. Lesoprateursnepeuvent trequesurchargs:ilestimpossibledendfinirdenouveaux(deplus, lasurchargedesoprateursnestfaisablequenC++). Lanotiondesurchargedefonctionseradcriteendtailcidessous, danslaSection1.6.4.

    Cettepremirepartieest doncconsacreladfinitiondestypes, ladclarationdesvariables, laconstructionetlappeldefonctions,etauxentres/sortiesdebase(fluxdentre/sortiestandards).

    1.1.LescommentairesenC++Lescommentairessontncessairesettrssimplesfaire.Toutprogrammedoittrecomment.Attentioncependant,tropdecommentairestuelecommentaire,parcequeleschosesimportantessontnoyesdanslesbanalits.

    IlexistedeuxtypesdecommentairesenC++:lescommentairesdetypeCetlescommentairesdefindeligne(quinesontdisponiblesquenC++).

    LescommentairesCcommencentaveclasquencebarreobliquetoile.Lescommentairesseterminentaveclasquenceinverse:unetoilesuiviedunebarreoblique.

    Exemple11.CommentaireC

    /* CeciestuncommentaireC */

    Cescommentairespeuventstendresurplusieurslignes.

    Enrevanche,lescommentairesdefindelignessarrtentlafindelalignecourante,etpasavant.Ilspermettent decommenterplusfacilement lesactionseffectuessurlalignecourante, avant lecommentaire. Lescommentairesdefindelignecommencent parlasquenceconstituededeuxbarresobliques(ilsnontpasdesquencedeterminaison,puisquilsneseterminentqulafindelalignecourante).Parexemple:

    Exemple12.CommentaireC++

    actionquelconque //CeciestuncommentaireC++actionsuivante

    1.2.LestypesprdfinisduC/C++LeC,etencoreplusleC++,estunlangagetyp.Celasignifiequechaqueentitmanipuledanslesprogrammesdoitdisposerduntypededonnegrceauquellecompilateurpourravrifierlavaliditdesoprationsquonluiappliquera.Lapriseencomptedutypedesdonnespeutapparatrecommeunecontraintepourleprogrammeur, maisenralitilsagitsurtoutduneaideladtectiondeserreurs.

    Ilexisteplusieurstypesprdfinis.Cesont:

    letypevide:void.Cetypeestutilispourspcifierlefaitquilnyapasdetype.Celaauneutilitpourfairedesprocdures(fonctionsnerenvoyantrien)etlespointeurssurdesdonnesnontypes(voirplusloin);

    lesboolens: bool, qui peuvent prendrelesvaleurs true et false (enC++uniquement, ilsnexistentpasenC);

    2

  • Chapitre1.PremireapprocheduC/C++

    lescaractres:char;

    lescaractreslongs:wchar_t(cenestuntypedebasequepourlelangageC++,maisilestgalementdfinidanslabibliothquestandardCetestdoncutilisablemalgrtoutenC);

    lesentiers:int;

    lesrels:float;

    lesrelsendoubleprcision:double;

    lestableauxunedimension,dontlesindicessontspcifispardescrochets( [et ]).Pourlestableauxdedimensionsuprieureougale2,onutiliseradestableauxdetableaux;

    lesstructures,unionsetnumrations(voirplusloin).

    Lestypesentiers(int)peuvent trecaractrissdundesmotsclslongoushort. Cesmotsclspermettentdemodifierlatailledutype, cestdirelaplagedevaleursquilspeuventcouvrir. Demme, lesrelsendoubleprcisionpeuvent trequalifisdumot cllong, cequi augmenteleurplagedevaleurs.Onnepeutpasutiliserlemotclshortaveclesdouble.Ondisposedoncdetypesadditionnels:

    lesentierslongs:longint,oulong(intestfacultatif);

    lesentierscourts:shortint,oushort;

    lesrelsenquadrupleprcision:longdouble.

    Note:Attention!Ilnyapasdetypedebasepermettantdemanipulerleschanesdecaractres.EnC/C++,leschanesdecaractressontenralitdestableauxdecaractres.Voustrouverezplusloinpourdeplusamplesinformationssurleschanesdecaractresetlestableaux.

    Latailledestypesnestspcifiedansaucunenorme.LaseulechosequiestindiquedanslanormeC++,cestquelepluspetittypeestletypechar.Lestaillesdesautrestypessontdoncdesmultiplesdecelledutypechar.Deplus,lesingalitssuivantessonttoujoursvrifies:

    char shortint int longintfloat double longdouble

    oloprateur signifieici auneplagedevaleurpluspetiteougaleque. Celadit, lestaillesdestypessontgnralementlesmmespourtouslesenvironnementsdedveloppement.Letypecharest gnralement codsurunoctet (8bits), letypeshort int surdeuxoctetset letypelongintsurquatreoctets. Letypeintestceluiquipermetdestockerlesentiersauformatnatifduprocesseurutilis.Ilestdonccodsurdeuxoctetssurlesmachines16bitsetsurquatreoctetssurlesmachines32bits.Enfin,latailledescaractresdetypewchar_tnestpasspcifieetdpenddelenvironnementdedveloppementutilis.Ilssontgnralementcodssurdeuxousurquatreoctetssuivantlareprsentationutilisepourlescaractreslarges.

    Note:Remarquezque,daprscequi prcde,letypeintdevraittrecodsur64bitssurlesmachines64bits.Letypelongintdevantluitresuprieur,ildoitgalementtrecodsur64bitsouplus.Letypeshortintpeutalorstresur16ousur32bits.Ilnexistedoncpas,selonlanorme,detypepermettantdemanipulerlesvaleurs16bitssurlesmachines64bitssi letypeshortintestcodsur32bits,ou,inversement,detypepermettantdemanipulerlesvaleurs32bitssi letypeshortintestcodsur16bits.

    3

  • Chapitre1.PremireapprocheduC/C++

    Afindersoudrecesproblmes, laplupart descompilateursbrisent largleselonlaquelleletypeint est letypedesentiersnatifsduprocesseur, et fixent sataille32bitsquellequesoitlarchitectureutilise.Ainsi,letypeshortesttoujourscodsur16bits,letypeintsur32bitsetletypelongsur32ou64bitsselonquelarchitecturedelamachineest32ou64bits.Autrementdit,letypequi reprsentelesentiersnativementnestplusletypeint,maisletypelong.Celanechangepaslesprogrammes32bits,puisquecesdeuxtypessontidentiquesdanscecas.Lesprogrammesdestinsauxmachines64bitspourront quant euxtreoptimissenutilisant letypelongchaquefoisquelonvoudrautiliserletypededonnesnatifdelamachinecible.Lesprogrammes16bitsenrevanchentnesontenrevanchepluscompatiblesaveccesrgles,maislaplupartdescompilateursactuelsnepermettentplusdecompilerdesprogrammes16bitsdetoutesmanires.

    Lestypeschar,wchar_tetintpeuventtresignsounon.Unnombresignpeuttrengatif,pasunnombrenonsign.Lorsquunnombreestsign,lavaleurabsolueduplusgrandnombrereprsentableestpluspetite.Pardfaut,lesnombresentierssontsigns.Lesignedestypescharetwchar_tdpendducompilateurutilis,ilestdoncprfrabledespcifiersystmatiquementsicestypessontsignsounonlorsquonlesutiliseentantquetypeentier.Pourprciserquunnombrenestpassign,ilfaututiliserlemotclunsigned.Pourprciserquunnombreestsign,onpeututiliserlemotclsigned.Cesmotsclspeuventtreintervertislibrementaveclesmotsclslongetshortpourlestypesentiers.

    Exemple13.Typessignsetnonsigns

    unsignedcharsignedcharunsignedwchar_tsignedwchar_tunsignedintsignedintunsignedlongintlongunsignedint

    Note:LeC++(etleC++uniquement)considrelestypescharetwchar_tcommelestypesdebasedescaractres.LelangageC++distinguedonclesversionssignesetnonsignesdecestypesdelaversiondontlesignenestpasspcifi,puisquelescaractresnontpasdenotiondesigneassocie.CelasignifiequelescompilateursC++traitentlestypeschar,unsignedcharetsignedcharcommedestypesdiffrents,etilenestdemmepourlestypeswchar_t,signedwchar_tetunsignedwchar_t.Cettedistinctionnapaslieudtreauniveaudesplagesdevaleurssilonconnatlesignedutypeutiliseninternepourreprsenterlestypescharetwchar_t,maiselleest trsimportantedansladterminationdela signaturedesfonctions, enparticulierauniveaudumcanismedesurchargedesfonctions.Lesnotionsdesignatureetdesurchargedesfonctionsserontdtaillesplusloindanscecours.

    Lesvaleursaccessiblesaveclesnombressignsnesontpaslesmmesquecellesaccessiblesaveclesnombresnonsigns.Eneffet,unbitestutilispourlesignedanslesnombressigns.Parexemple,siletypecharestcodsur8bits,onpeutcoderlesnombresallantde0255aveccetypeennonsign(ilya8chiffresbinaires,chacunpeutvaloir0ou1,onadonc2puissance8combinaisonspossibles,cequifait256).Ensign,lesvaleursstendentde128127(undeschiffresbinairesestutilispourlesigne,ilenreste7pourcoderlenombre,doncilreste128possibilitsdanslespositifscommedanslesngatifs.0estconsidrcommepositif.Entout,ilyaautantdepossibilits.).

    Demme,siletypeintestcodsur16bits(casdesmachines16bits),lesvaleursaccessiblesvontde3276832767oude065535silentiernestpassign.CestlecassurlesPCenmoderel

    4

  • Chapitre1.PremireapprocheduC/C++

    (cestdiresousDOS)etsousWindows3.x.Surlesmachinesfonctionnanten32bits,letypeinteststocksur32bits:lespacedesvaleursdisponiblesestdonc65536foispluslarge.CestlecassurlesPCenmodeprotg32bits(Windows9xouNT,DOSExtender,Linux)etsurlesMacintosh.Surlesmachines64bits,letypeintdevraittre64bits(DECAlphaetlaplupartdesmachinesUNIXparexemple).

    Enfin,letypefloatestgnralementcodsur4octets,etlestypesdoubleetlongdoublesontsouventidentiquesetcodssur8octets.

    Note:Onconstatedoncquelaportabilitdestypesdebaseesttrsalatoire.Celasignifiequilfautfaireextrmementattentiondanslechoixdestypessilonveutfaireducodeportable(cestdirequi compileraetfonctionnerasansmodificati