cours c++ 1.pdf
-
Upload
oussam-ouadidi -
Category
Documents
-
view
303 -
download
10
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