Vous êtes sur la page 1sur 793

Claude Delannoy

Apprendre Apprendre
le le

C++ C++

delappC++ titre

4/07/07

15:11

Page 2

Apprendre
le

C++

AUX EDITIONS EYROLLES Du mme auteur C. Delannoy. Exercices en langage C++. N12201, 3e dition 2007, 340 pages. C. Delannoy. C++ pour les programmeurs C. N12231, environ 580 pages, paratre. C. Delannoy. Programmer en Java (Java 5 et 6). N12232, 5e dition, environ 780 pages + CD-Rom, paratre. C. Delannoy. Exercices en Java (Java 5). N11989, 2e dition, 2006, 330 pages. C. Delannoy. Langage C. N11123, 1998, 944 pages (rdition au format semi-poche). C. Delannoy. Programmer en langage C. Avec exercices corrigs. N11072, 1996, 280 pages. C. Delannoy. Exercices en langage C. N11105, 1997, 260 pages. Autres ouvrages dans la mme collection P. Roques. UML 2 par la pratique. Cours et exercices. N12014, 5e dition 2006, 360 pages. X. Blanc, I. MounIeR. UML 2 pour les dveloppeurs. Cours et exercices corrigs. N12029, 2006, 218 pages. H. BeRsInI, I. Wellesz. Lorient objet. Cours et exercices en UML 2 avec PHP, Java, Python, C# et C++. N12084, 3e dition, 2007, 520 pages. J. engels. XHTML et CSS : cours et exercices. N11637, 2005, 350 pages. J. engels. PHP 5 : cours et exercices. N11407, 2005, 518 pages. Autres ouvrages I. HoRton. Visual C++ 6. Avec un CD-Rom contenant le produit Microsoft Visual C++ 6 Introductory Edition. N9043, 1999, 1 250 pages. G. leBlanc. C# et .NET 2.0. N11778, 2006, 700 pages. E. DasPet et C. PIeRRe de geyeR. PHP 5 avanc. N12167, 4e dition, environ 800 pages, paratre en octobre 2007. a. goncalves. Cahier du programmeur Java EE5. N12038, 2007, 330 pages. c. PoRteneuve. Bien dvelopper pour le Web 2.0. N12028, 2006, 560 pages.

Claude Delannoy

Apprendre
le

C++

Avant-propos

XXX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . avaJ te ++C ,C ,egarvuoL - 3 X IXX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . egarvuol ed erutcurts te fitcejbO - 2 X IXX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ++C ed euqirotsiH - 1 X IXX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Chapitre 1 : Prsentation du langage C++

8 8 6 5 4 4 4 4 3 3 3 2 2 2 1

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . dradnats euqhtoilbib al te ++C - 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + +C t e C - 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tejbo etneiro noita m margorp al te ++C - 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . erutcurts noita m margorp al te ++C - 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ++C te noitammargorp ed segagnal ,.O.O.P 4.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . emsihpromyloP 5.3.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . egatirH 4.3.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . essalC 3.3.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noitaluspacnE 2.3.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tejbO 1.3.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tejbo etne iro noitammargorp al ed stroppa seL 3.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . erutcurts noitammargorp aL 2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .noitammargorp a l ed euqitamlborP 1.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . tejbo etneiro noita m margorp te erutcurts noita m margorP - 1 .................................

Chapitre 2 : Gnralits sur le langage C++

41 41 31 31 21 21 11

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . rof no itcurtsnil : noit itpr enu eriaf ruoP 5.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tuoc tolf el res il itu : snoitamrofni sed erirc ruoP 4.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoitara lcD 3.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ++C egagna l ne emmargorp nud erutcurtS 2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ++C egagnal ne emmargorp ed elpmexe nU 1.1 . . . . . . . . . . . . . . . . . . . ++C egagnal ud snoitcurtsni seuqleuq ed elp mexel rap noitatnesrP - 1 ..............................

Table des matires


Table des matires

83 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .noitpecxed sac ne sruetarpo sed tnemetropmoC 3.2 83 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sru et ar po s e d s e v i ta le r s t i ro ir p s eL 2.2 73 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sruetarpo sed noitatnesrP 1.2 73 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .++C ne seuqit mhtira sruetarpo seL - 2 53 . . . . . . . . . . . . . . . . . . . . . . . . . . . ++C ne noisserpxed te ruetarpod snoiton sed tilanigirO - 1 53 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . l o o b e p y t e L - 6 33 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . s e t n a t s n o c t e n o i t a s i l a i t i n I - 5 13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sertcarac setnatsnoc sed noitatoN 2.4 1 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ++C eg a gna l ne e r tc a ra c ed no it on aL 1.4 13 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . s e r t c a r a c s e p y t s e L - 4 03 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . setnatto lf setnatsnoc sed noitatoN 2.3 92 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . er iomm ne noitatnesrper ruel te sep yt stnerffid seL 1.3 92 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . stnattolf sepyt seL - 3 82 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ser itne setnatsnoc sed noitatoN 4.2 82 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sngis non sre itne sep yt seL 3.2 72 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . er iomm ne noitatnesrper rueL 2.2 62 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ++C rap suvrp sre itned sleusu sep yt stnerffid seL 1.2 62 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . s re itn e sep yt s eL - 2 52 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . epyt ed noiton aL - 1 52 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ett -ne sre ihc if seL 4.3 2 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sne i l e d no it id L 3.3 22 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . n o i t a l i pm o c aL 2.3 2 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . emm ar g or p u d no it id L 1.3 12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ++C ne e m margorp nud noitarC - 3 12 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . engil ed nif ed seriatnemmoc seL 2.5.2 02 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . serbil seriatnemmoc seL 1.5.2 02 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . s e r i atne mmo c s eL 5.2 91 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e r b i l t a m r o f e L 4 . 2 91 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .sruetaraps seL 3.2 9 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . s l c - st om s eL 2.2 81 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sruetacifitnedi seL 1.2 81 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . erutircd selgr seuqleuQ - 2 71 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ertcarac ep yt el tnas ilitu emmargorp ed e lpmexE 01.1 71 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . gnisu no itcurtsniL 9.1 61 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ruessecorprp ud no itan itsed sev itcerid seL 8.1 51 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . fi noitcurtsn i l : xiohc sed eriaf ruoP 7.1 51 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . nic tolf e l resi litu : sno itamrofn i sed eril ruoP 6.1
Chapitre 3 : Les types de base de C++ Chapitre 4 : Oprateurs et expressions

VI

Apprendre le C++

16 06 06 95 85 85 85 65 55 45 45 35 35 25 25 25 05 05 05 05 94 94 84 74 74 54 44 34 34 34 24 14 14 04 04 04

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sruetarpo sel suot ed stiroirp sed fitalutipacR - 51 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . stib ed sruetarpo sed noitasi litud selpmexE 4.41 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . egalacd ed sruetarpo seL 3.41 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tib tib sruetarpo seL 2.41 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . stib ed no italupinam ed sruetarpo sed noitatnesrP 1.41 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . stib ed noitalupina m ed sruetarpo seL - 41 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . foe zis ruetarpoL - 31 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . leitneuqs ruetarpoL - 21 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . lennoitidnoc ruetarpoL - 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tsac ed ruetarpoL - 01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . eng is ed tub irtta nud etpmoc ne es irP 2.9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sleusu saC 1.9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noitatceffa enu rap secrof snoisrevnoc seL - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . eigral noitatceffad sruetarpo seL - 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . trtni rueL 3.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . st iroirp srueL 2.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elr rueL 1.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noitatne mrcd ed te noitatne mrcnid sruetarpO - 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noisrevnoc enu ren artne tuep no itatceffaL 3.6 . . . . . . . . . . . . . . . . . . ehcuag et iord ed tivita icossa enu edssop no itatceffad ruetarpoL 2.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . eulavl ed noitoN 1.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . erianidro noitatceffad ruetarpoL - 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . || te && ed noitaulavl snad t iucr ic -truoC 2.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elR 1.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . seuqigol sruetarpo seL - 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . slennoitaler sruetarpo seL - 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sertcarac sed saC 2.4.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sreitne sed saC 1.4.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sngis non sepyt ed ecnesrp ne snoisrevnoc seL 4.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . loob epyt ud saC 3.3.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . rahc epyt ud saC 2.3.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . stilarnG 1.3.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . se lleusu seuqirmun sno itomorp seL 3.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ep yt ed tnemetsu jad sel leusu snoisrevnoc seL 2.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . etxim noisserpxed noitoN 1.3 . . . . . . . . . . . . . . noisserpxed luclac nu snad rinevretni tnavuop seticilp mi snoisrevnoc seL - 3

Chapitre 5 : Les entres-sorties conversationnelles de C++

56 46 46 36 36

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tuoc rus erut ircd sti libissop seL 3.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 elpmexE 2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 elpmexE 1.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . narcl egahciffA - 1 .................................................

Table des matires

VII

101 . . . . . . . . . . . . . . . . . . . . . . . . . . . tnemugra snas uo ruoter ed rue lav snas sno itcnof sed saC 3.2 001 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . nruter no itcurtsniL 2.2 001 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sf it ce ff e stn emug ra t e st eum stnemu gr A 1.2 001 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . selgr seuqleuQ - 2 89 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noitcnof enud noitasilitud te noitinifd ed elp mexE - 1 79 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . otog no itcurtsniL 3.7 49 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . eunitnoc no itcurtsniL 2.7 39 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .kaerb no itcurtsniL 1.7 39 . . . . . . . . . . . . . . . otog te eunitnoc ,kaerb : lennoitidnocni tne mehcnarb ed snoitcurtsni seL - 7 09 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . rof noitcurtsn i l ed exatn yS 3.6 98 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . larng ne rof no itcurtsniL 2.6 88 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . rof noitcurtsn i l ed no itcudortn id elpmexE 1.6 88 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . rof noitcurtsniL - 6 78 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elihw noitcurtsn i l ed exatn yS 2.5 68 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elihw noitcurtsn i l ed no itcudortn id elpmexE 1.5 68 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elihw noitcurtsniL - 5 58 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . el ihw ...od noitcurtsn i l ed exatn yS 2.4 48 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elihw ...od noitcurtsn i l ed no itcudortn id elpmexE 1.4 48 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elihw ...od noitcurtsniL - 4 28 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . hct iws noitcurtsn i l ed exatn yS 2.3 97 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . hctiws no itcurtsnil ed noitcudortnid selpmexE 1.3 97 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . hctiws noitcurtsniL - 3 77 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f i sno itcurtsni sed no itac irbmI 3.2 67 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . selpmexE 2.2 67 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . fi noitcurtsn i l ed exatn yS 1.2 57 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . fi noitcurtsniL - 2 57 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . colb nu snad sno itaralcD 2.1 47 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoitcurtsn id scolB 1.1 47 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoitcurtsnid scolb seL - 1 37 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 07 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . edilavni ertcarac nu rus einifni elcuoB 3.6.2 07 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . erutcel al ed egacolB 2.6.2 96 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . narc te reivalc ertne emsinorhcnys ed euqnaM 1.6.2 96 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . r e i v a l c ua e rut ce l a l ra p s t iudn i s euqs ir s eL 6.2 86 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ennod enu snad ed ilavni ertcarac nud ecnesrP 5.2 76 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . >> rap ses ilitu selgr serimerP 4.2 76 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sru et ar a p s se r t ca ra c e d t e n o pma t ed sn o i toN 3.2 7 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . n ic ru s erut ce l e d s t i l ib is s op s etn er f f i d s eL 2.2 6 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . n o i tcu do rtn I 1.2 66 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . r e i v a l c u a e r u t c e L - 2
Chapitre 6 : Les instructions de contrle Chapitre 7 : Les fonctions

VIII

Apprendre le C++

921 821 721 721 621 521 421 421 321 321 121 021 911 811 711 711 611 611 611 511 411 311 211 111 111 111 011 901 901 801 801 801 701 701 601 601 401 401 301 301 301

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoitcnof ed noit inifdrus al ed ems inacm eL 3.21 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sne il ed noit idl ed srol etnauqnam noitcnoF 2.21 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sepytotorp te eraps noital ipmoC 1.21 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . eraps noitalip moc al ed ecneuqsnoc aL - 21 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elpmexe dnoceS 2.11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e lpmexe reimerP 1.11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . erb mon ne selbairav stne mugra seL - 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . stnemugra srueisulp snoitcnof sed saC 2.3.01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tnemugra nu snoitcnof sed saC 1.3.01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . einifdrus noitcnof enud ehcrehcer ed selgR 3.01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e in ifdrus no itcnof enud x iohc ed selpmexE 2.01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoitcnof ed no it in ifdrus a l ed ervu ne esiM 1.01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoitcnof ed noitinifdruS - 01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tuafd rap stnemugra sed st irporp seL 2.9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . selpmexE 1.9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tuafd rap stne mugra seL - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . euqitamotua essa lc ed selbairav seL 2.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . euq itats essa lc ed selbairav seL 1.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . selbairav sed noitasilaitinI - 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sev isrucr sno itcnof sed sac eL 5.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . colb nu selacol selbairaV 4.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . seuq itats se lacol selbairav seL 3.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . seuqitamotua se lacol selbairav seL 2.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . selaco l selbairav sed etrop aL 1.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . selacol selbairav seL - 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . selabo lg selbairav sed noitacol lad essa lc aL 3.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . selabo lg selbairav sed etrop aL 2.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . se labolg selba irav ed no itas ilitud elpmexE 1.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . selabolg selbairav seL - 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tnatsnoc teum tnemugra nud saC 4.2.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tnatsnoc fitceffe tnemugra nud saC 3.2.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noisrevnoc ed ecnesbA 2.2.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . stceridni seuqsir ed noitcudnI 1.2.5 . . . . . . . . . . . . . . . . . . . . . . . . . . tnemugra nud ecnerfr rap noissimsnart al ed stirporP 2.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ecnerfr rap tnemugrad noissimsnart ed elpmexE 1.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ecnerfr rap noissi msnarT - 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ruelav rap stne mugra sed noissi msnarT - 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ep ytotorp el rap setiudn i snoisrevnoc te selrtnoC 3.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noitcnof enud noitara lcd al recalp O 2.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noitcnof enu reralcd ed snoaf setnerffid seL 1.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoitaralcd sruel te snoitcnof seL - 3

Table des matires

IX

631 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . enilni noitacificps aL - 41 531 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ecnerfr ed noitasilaitinI 2.2.31 531 . . . . . . . . . . . . . . . . . .tnemugrad ellec euq elarng sulp tse ecnerfr ed noiton aL 1.2.31 531 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .e larng erinam enud ecnerfr aL 2.31 431 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ecnatsnoc te ruoter ed ruelaV 4.1.31 431 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noisrevnoC 3.1.31 331 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . eulavl enu tneitbo nO 2.1.31 331 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noitcudortnI 1.1.31 231 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ruoter ed rue lav enud ecnerfr rap no issimsnarT 1.31 231 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . secnerfr sel rus stne mlp moC - 31 231 . . . . . . . . . . . . . . . . . . . . . . . . citats noitaralcd al sehcac selabolg selbairav seL 3.4.21 131 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sneil ed noitidl te selabolg selbairav seL 2.4.21 031 . . . . . . . . . . . . . . . . . . . . . . nretxe noitaralcd al elabolg elbairav enud etrop aL 1.4.21 031 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . s e l a bo lg s e l b a i ra v te e ra p s n o i ta l i pm oC 4.21

Apprendre le C++

Chapitre 8 : Les tableaux et les pointeurs

451 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . lun ruetniop el te sruetn iop ed sno itatceffa seL 3.7 451 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sruetniop ed noitcartsuos aL 2.7 351 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sruetn iop ed nos iarapmoc aL 1.7 351 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sruetniop sed rus selbasilar snoitarpo seL - 7 251 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . secidn i srueisu lp xuae lbat sed saC 2.6 151 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ec idn i nu xuae lbat sed saC 1.6 151 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tnatsnoc ruetniop nu tse uaelbat ed mon nU - 6 941 . . . . . . . . . . . . . . . . . . . . . ruetniop nu ceva esserda rap noissi msnart enu relu mis tne m moC - 5 8 4 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sru etn i o p ed n o it atne m rcn I 3.4 741 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . se lpmexe seuqleuQ 2.4 6 4 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . n o i tcu do rtn I 1.4 641 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . & te * sruetarpo seL ruetniop ed noitoN - 4 541 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noitaco llad essalc te sruesilaitinI 3.3 441 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . secidni srueisulp xuaelbat ed noitasilaitinI 2.3 4 4 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e c i dn i nu xua e l b at e d n o it a s i l a i t in I 1.3 441 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xuaelbat sed noitasilaitin I - 3 341 . . . . . . . . . . . . . . . . . . . . . . . . . . . secidni srueisulp xuaelbat sed eriomm ne tnemegnarr A 2.2 3 4 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . no it ar a l c d ru eL 1.2 341 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . secidni srueisulp xuaelbat seL - 2 241 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ecidnid tnemedrobD 4.2.1 241 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . uaelbat nud noisnemid aL 3.2.1 141 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . secidni seL 2.2.1 141 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . uaelbat ed stneml seL 1.2.1 141 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . se lgr seuqleuQ 2.1 041 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ++C ne uae lbat nud no itas il itud elpmexE 1.1 041 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ecidni nu xuaelbat seL - 1 931 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

761 661 661 561 461 461 461 261 261 261 161 951 951 751 751 551 451

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tnemugra ne sesimsnart snoitcnoF 2.11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sno itcnof ed leppad egartmaraP 1.11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoitcnof sed rus sruetniop ed noitasilitU - 11 . . . . . . . . . . . . . . . . . . . . . . . . . . selbairav snoisnemid ed uaelbat : elpmexe dnoceS 2.2.01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . exif elliat ed uaelbat : elpmexe reimerP 1.2.01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . secidn i srueisu lp xuae lbat sed saC 2.01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elbairav elliat ed uaelbat : elpmexe dnoceS 2.1.01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . exif elliat ed uaelbat : elpmexe reimerP 1.1.01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ec idn i nu xuae lbat sed saC 1.01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tne mugra ne si msnart xuaelbat seL - 01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoitcnof ed noitinifdrus te sruetnioP - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elpmexE 3.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ete led ruetarpoL 2.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . wen ruetarpoL 1.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . eteled te wen sruetarpo sel : euqi manyd noitseg aL - 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . seuq irng sruetniop seL 5.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sruetniop ed snoisrevnoc seL 4.7

Chapitre 9 : Les chanes de style C

381 381 281 281 181 081 971 871 871 871 871 771 771 671 571 571 471 371 371 271 071 071 071 961

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . setnatsnoc sen ahc sed noitacifidom ed seuqs ir seL 2.01 . . . . . . . . . . . . . . . . . tubd iarv ed sap s iam ,nif eiarv enu edssop C el yts ed en ahc enU 1.01 . . . . . . . . . . . . . . . . . . . . . . . . . C elyts ed senahc sel ceva erdnerp snoituacrp seuqleuQ - 01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . enahc enu snad ehcrehcer ed snoitcnof seL - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . senahc ed eipoc ed snoitcnof seL - 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . senahc ed nosiarap moc ed snoitcnof seL - 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tacnrts noitcnof aL 2.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tacrts noitcnof aL 1.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . senahc ed noitantacnoc ed snoitcnof seL - 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noitantacnoc ed sno itcnof sed sac eL 3.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ne lrts noitcnof aL 2.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sesserda sed rus sruo juot tnel liavart sno itcnof seC 1.5 . . . . . . . . . . . . . . . . . . . . . . . C elyts ed senahc sed rus tnatrop snoitcnof sel rus stilarnG - 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . niam noitcnof a l snad stnemugra sec rerpucr tnemmoC 2.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . emmargorp nu stnemugra sed ressap tnemmoC 1.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . nia m noitcnof al si msnart stne mugra seL - 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sen ahc sed rus sruetniop ed xuaelbat ed no itas ilaitinI 2.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sertcarac ed xuaelbat ed no itas ilaitinI 1.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . senahc sed rap xuaelbat ed noitasilaitinI - 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C elyts ed senahc ed erutirc te erutceL - 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . setnatsnoc senahc sed saC 2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . etpoda no itnevnoc aL 1.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . senahc sed noitatnesrpeR - 1 ......................................

Table des matires

XI

102 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noitarmun ep yt ud stirporP 2.9 002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sfitcudortni selpmexE 1.9 002 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoitar mun seL - 9 891 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoinu seL - 8 791 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . s t i b e d s p m a h c s e L - 7 691 . . . . . . . . . . . . . . . . . . . . . noitcnof enud ruoter ed ruelav ne erutcurts enud noissi msnarT - 6 591 . . . . . . . . . . . . . . . . . . . . . . . . . . . > - ruetarpol : erutcurts enud esserda l ed noissimsnarT 3.5 491 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .ecnerfr rap erutcurts enud noissimsnarT 2.5 491 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . rue lav rap erutcurts enud noissimsnarT 1.5 391 . . . . . . . . . . . . . . . . . . . . . . . . . . . noitcnof enud tne mugra ne erutcurts enud noissi msnarT - 5 291 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . erutcurts ed epyt ud etrop al ed soporp - 4 291 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ruetn iop nu tnamrefner erutcurts ed rei luc itrap saC 4.3 191 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . serutcurts sertuad tnatropmoc serutcurtS 3.3 191 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . serutcurts ed xuaelbaT 2.3 091 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .xuae lbat sed tnatropmoc erutcurtS 1.3 981 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .serutcurts ed noitacirb m I - 3 881 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . s erut curt s e d n o it a s i l a i t in I 3.2 881 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .erutcurts enud e labolg noitasi litU 2.2 781 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . erutcurts enud spmahc sed noitasi litU 1.2 781 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . erutcurts enud noitasilitU - 2 681 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e r u t c u r t s e n u d n o i t a r a l c D - 1 581 . . . . . . . . . . . . . . .
Chapitre 10 : Les types structure, union et numration

XII

Apprendre le C++

Chapitre 11 : Classes et objets

322 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elpmexE 3.5 222 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . seuq itats sennod serbmem sed noitasilaitinI 2.5 122 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ennod erbmem nu ruop c itats fitacifilauq eL 1.5 122 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .seuqitats sennod serb me m seL - 5 022 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . se lgr seuqleuQ 5.4 712 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ruetcurtsed ud te ruetcurtsnoc ud se lR 4.4 612 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ste jbo sed no itcurtsed te no itcurtsnoC 3.4 412 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ruetcurtsnoc nu tnatropmoc essa lc ed elpmexE 2.4 3 1 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . n o i tcu do rtn I 1.4 312 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ruetcurtsed ed te ruetcurtsnoc ed snoitoN - 4 212 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . stejbod noitatceffA - 3 802 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . essalc ed noitoN - 2 702 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f italut ipacr elpmexE 4.1 602 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . es ilarng erutcurts enud noitasi litU 3.1 502 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . erutcurts enud serbmem sno itcnof sed noitinifD 2.1 402 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . erutcurts enud serbmem snoitcnof sed no itaralcD 1.1 402 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . s e s i l a r n g s e r u t c u r t s s e L - 1 302 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

032 922 822 822 822 822 722 722 722 522 522

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . essa lc enud noitara lcD 3.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . essa lc enud noitara lcd al snad revuort tuep nouq eC 2.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ++C ne sessa lc ed setros sertua seL 1.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . larng ne sessalc seL - 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . gnahc a scilbup serbmem sed noitaralcd aL 2.4.6 . . . . . . . . . . . . . . . . . . . . . . . . . . gnahc sap an scilbup serbmem sed noitaralcd aL 1.4.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . essalc enud no itac if idom ed sac nE 4.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . seuq itats sennod serbmem sed saC 3.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . se lpit lum snoisulcni sel ertnoc noitcetorP 2.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . leicigol tnasopmoc emmoc essa lc aL 1.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . essalc enud noitatiolpxE - 6

Chapitre 12 : Les proprits des fonctions membres

942 742 642 642 442 342 242 242 142 932 932 732 532 432 132 132

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . selbatu m serb me m seL - 01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . etnatsnoc erbmem noitcnof enud stirporP 2.9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . etnatsnoc erbmem noitcnof enud noit inifD 1.9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . setnatsnoc serb me m snoitcnof seL - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . seuqitats serb me m snoitcnof seL - 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . siht lc to m el : ecnerfrotuA - 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tejbo nu eiovner noitcnof enuuqsroL - 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ruelav rap no issimsnart a l rap ssop semlborp seL 3.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ecnerfr rap noiss imsnarT 2.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tejbo nud esserdal ed noiss imsnarT 1.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tne mugra ne stejbo sed noissi msnart ed edoM - 5 . . . . . . . . . . . . . . . . . . . . . . . . erb me m noitcnof enud tne mugra ne si msnart stejbo sed saC - 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . engil ne serb me m snoitcnof seL - 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tuafd rap stne mugrA - 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . serb me m snoitcnof sed noitinifdruS - 1 ..................

Chapitre 13 : Construction, destruction et initialisation des objets

752 652 552 552 352 352 252 252 152

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elpmexE 3.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ruetcurtsnoc ceva essalc enud saC 2.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ruetcurtsnoc snas essalc enud saC 1.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . seuqi manyd stejbo seL - 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elpmexE 3.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sruetcurtsed sed te sruetcurtsnoc sed lepp A 2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e iv ed eruD 1.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . seuqitats te seuqita motua stejbo seL - 1 .................................................

Table des matires

XIII

003 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . -- te ++ sruetarpo sed saC 4.2 992 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ruetarpo nud elr e l rus seshtop yh se l ret iv 3.2 992 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . essalc ed etxetnoc nu snad reca lp eS 2.2 792 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . stnatsixe sruetarpo xua ret imi l eS 1.2 792 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . larng ne sruetarpod noitinifdrus aL - 2 6 9 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ecn er f r r a p no is s i msna rt t e sru et ar pO 3.1 492 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . erbmem noitcnof enu ceva ruetarpod no itin ifdruS 2.1 392 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . eima noitcnof enu ceva ruetarpod no itin ifdruS 1.1 292 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sruetarpod noitinifdrus al ed e msinac m eL - 1 192 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 882 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sei ma snoitcnof ed tnasopsid sessalc ed noitatiolpxE - 4 782 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . essalc enud erbmem ,eima noitcnoF 2.3 682 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . etnadnepdn i eima noitcnoF 1.3 582 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e l p m e x E - 3 582 . . . . . . . . . . . . . . . . . . . . . . . . . . essa lc ertua enud seima essalc enud snoitcnof sel setuoT 3.2 4 8 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . s es sa lc s rue isu l p e d e im a n o i tcn o F 2.2 382 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . essalc ertua enud eima ,essa lc enud erbmem noitcnoF 1.2 282 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iti mad snoitautis setnerffid seL - 2 082 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . essalc enud ei ma etnadnepdni noitcnof ed elp mexE - 1 972 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 672 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . seriarop met stejbo seL - 8 572 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . stejbod seuqiman yd xuae lbat sed saC 3.7 472 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sruesi la it in i te sruetcurtsnoC 2.7 3 7 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sn o i ta toN 1.7 372 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . stejbod xuaelbat seL - 7 272 . . . . . . . . . . . . . . . . . . . . . . . . . . . ruetcurtsnoc nud ett-nel snad serb me m ed noitasilaitin I - 6 172 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e i p oc er e d rue tcu rtsn o c eL 3.5 962 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sruetcurtsed sed te sruetcurtsnoc sed ervu ne esiM 2.5 8 6 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . n o i tcu do rtn I 1.5 8 62 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . s erb m e m s te jbO - 5 662 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noitaralcd as ed srol tejbo nud noitasilaitin I - 4 562 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noitcnof enud ruoter ed rue lav ne te jbo : 2 elpmexE 3.3 262 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . eipocer ed ruetcurtsnoc nud noitinifD 2.2.3 162 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tuafd rap eipocer ed ruetcurtsnoc ud iolpmE 1.2.3 062 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ruelav rap s imsnart te jbo : 1 elpmexE 2.3 952 . . . . . . . . . . . . . . . . . . . . . . . . eipocer rap noitcurtnoc al eridretni etiahuos nouqsroL 3.1.3 952 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . irporppa ruetcurtsnoc nu etsixe lI 2.1.3 852 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . irporppa ruetcurtsnoc ed sap etsixen lI 1.1.3 852 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noitatnesrP 1.3 852 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .eipocer ed ruetcurtsnoc eL - 3
Chapitre 14 : Les fonctions amies Chapitre 15 : La surdfinition doprateurs

XIV

Apprendre le C++

713 513 513 413 413 113 013 013 903 703 703 703 503 403 303 303 303 203 103

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elarng er inam enuD 3.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elpmexE 2.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ennod essalc enu ruop eteled te wen ed noitinifdruS 1.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . eteled te wen sruetarpo sed noitinifdruS - 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )( ruetarpol ed noitinifdruS - 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ] [ ruetarpol ed noitinifdrus ed elp mexE - 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . larng saC 1.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . essalc enud euqinonac e mrof aL - 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noitatceffal eridretn i etiahuos nouqsroL 7.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . te lpmoc emmargorp ed elpmexE 6.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . evitinifd nE 5.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ruoter ed rue laV 4.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . soporp emht irogl A 3.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . no itatceffal ed saC 2.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . eipocer rap ruetcurtsnoc e l tnanrecnoc sleppaR 1.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . = ruetarpol ed noitinifdruS - 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . eima noitcnof te erbmem noitcnof ertne x iohC 7.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoisrevnoc seL 6.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e inifdrp no itac if ing is enu edssop = ruetarpoL 5.2

Chapitre 16 : Les conversions de type dfinies par lutilisateur

143 933 733 633 633 633 333 233 133 923 923 923 723 523 423 223 223 223 023 913

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sliesnoc seuqleuQ - 5 . . . . . . . . . . . . . . essalc ertua enu snad inifd ruetarpo nu no itacif ing is enu rennod ruoP 3.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ruetcurtsnoc nu rap no isrevnoc ed elpmexE 2.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tsac ed ruetarpod e lpmis elpmexE 1.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . essalc epyt ertua nu ne essalc epyt nud snoisrevnoc seL - 4 . . . . . . . . . . . . . . ticilpxed elr e l : ruetcurtsnoc el rap seticilpm i snoisrevnoc se l er idretnI 5.3 . . . . . . . . . . . . . . . . . ruetarpo nud noitacifingis al rigral ruop ruetcurtsnoc nud iolpmE 4.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . no itatceffad ruetarpo uo ruetcurtsnoc ertne x iohC 3.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoisrevnoc ed enahc enu snad ruetcurtsnoc eL 2.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elpmexE 1.3 . . . . . . . . . . . . . . . . . . . . . . . essalc epyt >- esab ed epyt noisrevnoc al ruop ruetcurtsnoc eL - 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tugibmad sac nE 6.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . en ahc ne snoisrevnoC 5.2 . . . . . . . . . . . . . . no isserpxe enud noitaulavl snad tsac ed ruetarpol ed et ic ilpmi lepp A 4.2 . . . . . . . . . . . . . . . . . . . . noitcnof ed leppa nud srol tsac ed ruetarpol ed et ic ilpmi lepp A 3.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . no itas ilitud elpmexE 2.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tsac ed ruetarpol ed noit inifD 1.2 . . . . . . . . . . . . . . . . . . . . esab ed epyt > essalc epyt noisrevnoc al ruop tsac ed ruetarpoL - 2 . . . . . . . . . . . . . . . . . . . . . . . . ruetasilitul rap seinifd snoisrevnoc ed setros setnerffid seL - 1 ......

Chapitre 17 : Les patrons de fonctions

543 443 443 343

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sno itcnof ed nortap ud snoitasi litu serimerP 2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoitcnof ed nortap nud noitarC 1.1 . . . . . . . . . . . . . . . . . . . . . . . . snoitcnof ed nortap nud noitasilitud te noitarc ed elp mexE - 1 ..................................

Table des matires

XV

973 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . secidni xued uaelbat essalc ed elp mexE - 9 873 . . . . . . . . . . . . . . . . . . . . . . . . . . . . sessalc ed uo snoitcnof ed nortap ertua nud no itaralcD 3.8 873 . . . . . . . . . . snortap sno itcnof ed uo snortap sessa lc ed seri lucitrap secnatsnid no itaralcD 2.8 773 . . . . . . . . . . . . . . . . . . . . . . . . . . . . se ima serian idro sno itcnof uo sessalc ed no itaralcD 1.8 773 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .iti mad snoitaralcd te snortap sessalC - 8 673 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snortap sessalc ed titned I - 7 673 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . serb me m snoitcnof ed snortaP - 6 673 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tuafd rap sert maraP - 5 573 . . . . . . . . . . . . . . sessalc ed snortap ed selleitrap snoitasilaicps sed riovrp tuep nO 3.2.4 573 . . . . . . . . . . . . . . . . . . . . . . . . essalc enu uo erbmem noitcnof enu resilaicps tuep nO 2.2.4 473 . . . . . . . . . . . . . . . sertmarap sel suot ruop erbmem noitcnof enu resilaicps tuep nO 1.2.4 4 7 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . no it as i l a i c p s e d s t i l ib is s op s etn er f f i d s eL 2.4 373 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . erbmem noitcnof enud noitasi la icps ed elpmexE 1.4 373 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sessalc ed nortap nud noitasilaicpS - 4 273 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sno isserpxe sertmarap sed st irporp seL 2.3 173 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elpmexE 1.3 073 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sessalc ed nortap nud snoisserpxe sert marap seL - 3 963 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . nortap essalc enud no itaicnatsnI 2.2 963 . . . . . . . . . . . . . . . . . . . . . . . sessalc ed nortap nud no itarc a l snad ep yt ed sertmarap seL 1.2 963 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sessalc ed nortap nud epyt ed sert marap seL - 2 763 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f italut ipacr elpmexE 4.1 663 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sessa lc ed nortap nud noitasi litud setniartnoC 3.1 663 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sessa lc ed nortap nud noitasi litU 2.1 463 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sessa lc ed nortap nud noitarC 1.1 463 . . . . . . . . . . . . . . . . . . . . . . . . . . . sessalc ed nortap nud noitasilitud te noitarc ed elp mexE - 1 363 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 953 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . nortap noitcnof enud noitaicnatsnid e mhtiroglA - 6 8 5 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . s e l l e it ra p sn o it a s i l a i c p s s eL 2.5 853 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . s t i l a r n G 1 . 5 853 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . nortap ed snoitcnof ed noitasilaicpS - 5 753 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoisserpxe sertmarap sed tnatropmoc selpmexE 2.4 453 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ep yt ed sertmarap sed euq tnatropmoc en selpmexE 1.4 453 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snortap ed noitinifdruS - 4 353 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoitcnof ed nortap nud snoisserpxe sert marap seL - 3 253 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sno it cno f ed sn or ta p s ed sn o i ta t im iL 4.2 153 . . . . . . . . . . . . . . . . . . . . . dradnats sep yt sed selbairav sed noitasi la it in id exatn ys el levuoN 3.2 053 . . . . . . . . . . . . . . . . . . . . . . . . . .nortap noitcnof enud epyt ed sertmarap sed no itac ifitnedI 2.2 943 . . . . . . . . . . . . . . . . . . . . . .nortap nud noitinifd al snad ep yt ed sertmarap sed noitasi litU 1.2 943 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoitcnof ed nortap nud epyt ed sert marap seL - 2 843 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . nortap nud noitasi litud setniartnoC 4.1 743 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . essalc epyt nu noitacilppA 2.3.1 643 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . * rahc epyt ua noitacilppA 1.3.1 643 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoitcnof ed nortap ud snoitasi litu sertu A 3.1
Chapitre 18 : Les patrons de classes

XVI

Apprendre le C++

Chapitre 19 : Lhritage simple

914 914 814 814 814 714 714 514 214 214 214 014 904 904 804 504 404 404 304 204 104 004 993 993 893 893 793 793 693 593 393 393 293 293 093 093 883 883 683 483 383

. . . . . . . . . . . . . . . . . . . . . . .tniop ed edicnioc noitcnof al ed loctniop snad egatirH 2.2.01 . . . . . . . . . . . . . . . . . . . . tniop snad inifd + ruetarpo nud loctniop snad egatirH 1.2.01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . selpmexE 2.01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f ed stnemugra sed epyt eL 2.1.01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . leppal ed tatlusr ud epyt eL 1.1.01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . egatirhd noitautis aL 1.01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . seti mil ses te egatirhL - 01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . essalc enud euqinonac e mrof te egatirH - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .= ruetarpol tinifdrus ev ird essa lc aL 2.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . = ruetarpol sap t in ifdrus en ev ird essa lc aL 1.8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . egatirhl te noitatceffad ruetarpoL - 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e ipocer ed ruetcurtsnoc nu tinifd ev ird essa lc aL 2.7 . . . . . . . . . . . . . . . . . . . . . . . . . . e ipocer ed ruetcurtsnoc ed sap tinifd en ev ird essa lc aL 1.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . egatirhl te eipocer ed ruetcurtsnoc eL - 7 . . . . . . . . . . . . . . . . . . . . . . . . . esab ed essalc al ed sno itcetorp sed noita lo iv ed seuqsir seL 4.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ste jbo sed euqitats egap yt ua se il sno itat imiL 3.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sruetniop ed noisrevnoC 2.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . esab ed epyt nu ne vird ep yt nud noisrevnoC 1.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . evird essalc te esab ed essalc ertne tilibitap moC - 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . no italut ipacR 5.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . egtorp noitavird ed stilibissop seL 3.4.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .evirp noitavirD 2.4.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .euqilbup noitavird al tnanrecnoc sleppaR 1.4.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . evirp no itavird te euqilbup no itavirD 4.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . gtorp tutats ud trtnI 3.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elpmexE 2.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sgtorp serbmem seL 1.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . scca sed elrtnoC - 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . stnem lpmoC 5.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elpmexE 4.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sruetcurtsnoc ertne sno itamrofn id noiss imsnarT 3.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sleppa sed no itas ihcrar ih aL 2.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sleppaR 1.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sruetcurtsed sed te sruetcurtsnoc sed leppA - 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . no itin ifdrus te no it in ifdeR 3.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . evird essalc enud sennod serbmem sed no it in ifdeR 2.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . ev ird essa lc enud serbmem snoitcnof sed no it in ifdeR 1.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . evird essalc enud serb me m sed noitinifdeR - 3 . . . . . . . . . . . . . . . . . . evird essalc enu snad esab ed essalc al ed serb me m sed noitasilitU - 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . egatirhd noiton aL - 1 ...........................................

Table des matires

XVII

664 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . seuqi manyd tsac seL - 9 664 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . secnerfr sed ceva elpmexE 3.8 564 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ofni_ep yt ed nos iarapmoc ed sruetarpo sed noitasi litU 2.8 464 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ofn i_epyt ed eman pmahc ud noitasi litU 1.8 364 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noitucxel epyt ed noitacifitned I - 8 164 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . stejbo sed euqi manyd noitacifitnedid e msinac m eL - 7 754 . . . . . . . . . . . . . . . . . . . . . . . . engorth etsil : selleutriv snoitcnof ed noitasilitud elp mexE - 6 554 . . . . . . . . . . . . . . . . . . . . setiartsba sessalc ed noitarc al ruop serup selleutriv snoitcnof seL - 5 454 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noitatceffad ruetarpol ed reilucitrap saC 4.6.4 354 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . leutriv ert tuep ruetcurtsed nU 3.6.4 254 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . leutriv ert sap tuep en ruetcurtsnoc nU 2.6.4 254 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elleutriv ert tuep erbmem noitcnof enu elueS 1.6.4 254 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . s liesnoc te sno itcirtser seuqleuQ 6.4 254 . . . . . . . . . . . . . . . . . . . essalc el leuq etropm in snad el leutriv noitcnof enu reralcd tuep nO 5.4 154 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . einifder e lleutr iv no itcnof enud ruoter ed ep yt eL 4.4 154 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . no itin ifdrus te se lleutr iv snoitcnoF 3.4 054 . . . . . . . . . . . . . . . . . . . . . . . . . eriotagi lbo sap tsen e lleutriv no itcnof enud no it in ifder aL 2.4 9 4 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e g at i rh l e d se l l ec tn os sn o it at im i l sru eL 1.4 944 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . selleutriv snoitcnof sed stirporp seL - 4 644 . . . . . . . . . . . . . . . . . . . . . . . . . . . elbasnepsidni tse euqi manyd erutagil al o noitautis ertuA - 3 444 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . selleutriv snoitcnof sed e msinac m eL - 2 444 . . . . . . . . . . . . . . . . . . . . . . . . eriassecn tse euqi manyd egapyt el o noitautis enud leppaR - 1 344 . . . . . . . . . . . . 044 . . . . . . . . . . . . . . . . elleutriv noitavird al ed te elpitlu m egatirhl ed noitasilitud elp mexE - 4 734 . . . . . . . . . . . . . . . . selleutriv sessalc sed sac : sruetcurtsed sed te sruetcurtsnoc sed sleppA - 3 634 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . selleutriv sessalc sel : stilfnoc sleutnev sel relgr ruoP - 2 234 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elpitlu m egatirhl ed ervu ne esiM - 1 134 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 824 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ev ird essa lc enud noitat iolpxE 3.31 824 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . egat irhl ed snoitasil itu setnerff iD 2.31 624 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sevisseccus snoitav irD 1.31 624 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . euqitarp ne egatirhL - 31 524 . . . . . . . . . . . . . . . . . . . . ertmarap uaevuon nud no itcudortn i ceva snortap ed noitav irD 3.21 524 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sertmarap semm se l ceva snortap ed noitav irD 2.21 424 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . nortap essalc enud tnavird er ian idro essa lC 1.21 324 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .egatirh te sessalc ed snortaP - 21 024 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . evird essalc ed elp mexE - 11
Chapitre 20 : Lhritage multiple Chapitre 21 : Les fonctions virtuelles et le polymorphisme

XVIII

Apprendre le C++

Chapitre 22 : Les flots

994 794 694 594 594 494 394 294 094 984 984 784 684 684 584 584 584 484 484 484 484 484 284 184 184 084 084 974 974 874 774 674 574 474 374 374 374 374 274 274 174 174 964

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elpmexE 4.3.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . serbmem snoitcnof seL 3.3.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . seuqirtmarap sruetalupinam seL 2.3.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . seuqirtmarap non sruetalupinam seL 1.3.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . egatamrof ed tutats e l rus noitc A 3.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . egatamrof ed tutats ud tatd tom ud noitp ircseD 2.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tolf nud egatamrof ed tutats eL 1.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . egata mrof ud noitseG - 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elpmexE 2.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . edohtM 1.4 . . . . . . . . . . . . . . . . . . . . . . ruetasilitul rap sinifd sepyt sel ruop >> te << ed noitinifdruS - 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . selpmexE 4.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ! te )( sruetarpo sed noitinifdruS 3.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ruerred tutats ud noitacifidoM 2.2.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ruerred stib xua sccA 1.2.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ruerred stib se l tnanrecnoc snoitc A 2.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ruerred stib seL 1.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tolf nud ruerred tutatS - 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sno itcnof sertua seuq leuQ 5.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sac sertuA 2.4.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .sertcarac sed saC 1.4.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . daer noitcnof aL 4.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tnuocg te en ilteg sno itcnof seL 3.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . teg noitcnof aL 2.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . >> rap stpecca sepyt seL 3.1.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . C elyts ed senahc sed saC 2.1.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .sertcarac sed saC 1.1.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . >> ruetarpoL 1.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . maertsi essalc al ed elarng noitatnesrP - 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . roilma noitarutcaf ed emmargorp nU 5.5.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elleitnenopxe uo etnattolf noitaton ertne xiohC 4.5.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . etirc noitamrofnil ed noisicrp al rus noitcA 3.5.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . etirc noitamrofnil ed tirabag el rus noitcA 2.5.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noitarmun ed esab al rus noitcA 1.5.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . << ceva egatamrof ed st il ib issop seuq leuQ 5.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sac sertuA 2.4.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .sertcarac sed saC 1.4.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . et irw noitcnof aL 4.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tup noitcnof aL 3.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sinifdrp stolf seL 2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . << ruetarpoL 1.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . maertso essalc al ed elarng noitatnesrP - 1 .....................................................

Table des matires

XIX

7 0 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . m ae rt sr ts i es s a l c aL 2.7 605 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . m ae rt srt s o es s a l c aL 1.7 505 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . erio m m ne egata mrof ed stilibissop senneicna seL - 7 405 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . re ihcif nud erutrevuod sedom stnerffid seL 4.6 205 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tcer id sccad sti libissop seL 3.6 105 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . reihcif nu ertned tolf nud noixennoC 2.6 994 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . reihc if nu eitros ed tolf nud noixennoC 1.6 994 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . reihcif nu tolf nud noixennoC - 6

XX

Apprendre le C++

Chapitre 23 : La gestion des exceptions

035 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2 elpmexE 2.5.6 035 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1 elpmexE 1.5.6 925 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . no itpecxe essalc a l ed sev ird snoitpecxed noitarC 5.6 825 . . . . . . . . . . . . . . . . . . . reldnah_wen_tes ceva eriomm ed stnemedrobd sed noitseG 2.4.6 725 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )worhton( wen ruetarpoL 1.4.6 725 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . er iomm ed euqiman yd noitseg a l ed rei luc itrap saC 4.6 725 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . emmargorp nu snad selbas ilitu snoitpecxe seL 3.6 625 . . . . . . . . . . . . . . . . . . . . . . . . . . . . dradnats euqhtoi lb ib al rap sehcnelcd snoitpecxe seL 2.6 625 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . s t i l a r n G 1 . 6 625 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . dradnats snoitpecxe seL - 6 325 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . detcepxenu noitcnof al : ecafretnid noitacificpS - 5 225 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noitpecxe enud tnemehcne lcdeR 4.4 025 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoitpecxe sed tnemenimehc eL 3.4 915 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noitpecxed erianno itseg nud xiohc ed selgR 2.4 915 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e ipoc enu sruo juot t ioer eriannoitseg eL 1.4 815 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . eriannoitseg ud xiohC - 4 815 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . scolb ed seitros sed etpmoc ne esirP 2.3 615 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . emmargorp ud noitucxe l ed etiusruoP 1.3 615 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .snoitpecxe sed noitseg ed e msinac m eL - 3 41 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elp m ex e dn oc eS - 2 2 1 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f it a lut i pa cR 3.1 115 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . no itpecxed erianno itseg nud noitasi litU 2.1 115 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . worht noitcurtsnil : noitpecxe enu recnal tnemmoC 1.1 015 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . n o i t p e c x e d e l p m e x e r e i m e r P - 1 905 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Chapitre 24 : Gnralits sur la bibliothque standard

635 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .esrevni sruocraP 2.3.1 535 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tcerid sruocraP 1.3.1 535 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .ruetarti nu ceva ruenetnoc nud sruocraP 3.1 435 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ruetart id noitoN 2.1 435 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ruen etn oc e d n o i toN 1.1 335 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e mhtiroglad te ruetartid ,ruenetnoc ed snoitoN - 1 335 . . . . . . . . . . . . . . . . .

645 545 545 545 445 345 345 345 245 245 145 145 045 935 935 835 835 835 735 635

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sruetarpod sruetarng seL - 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . retcepser stirporP 2.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . no itcudortnI 1.6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . erdrod noitaler te se mhtirogla ,sruenetnoC - 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . seinifdrp snoitcnof sessalC 2.3.5 . . . . . . . . . . . . . . . . . . . . . . . . . leppar ed noitcnof emmoc noitcnof te jbod noitasilitU 1.3.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoitcnof ste jbo te sessalC 3.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . stac idrP 2.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . er ianu no itcno F 1.5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoitcnof sessalc te stacidrp ,snoitcnoF - 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sruenetnoc sed rus snoitarpo sed ticaciffE - 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoitarpo sertu A 2.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . no itatceffa te e ipoc ,no itcurtsnoC 1.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . stejbo sed tnos stne ml sel tnod sruenetnoc seL - 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sruenetnoc ed seirogtac setnerffid seL 2.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . seuqissalc sennod ed serutcurts te sruenetnoC 1.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sruenetnoc ed setros setnerffid seL - 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sruetn iop te sruetartI 6.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . emht iroglad noitoN 5.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ruetartid e llavretnI 4.1

Chapitre 25 : Les conteneurs squentiels

655 555 555 455 455 455 355 355 355 355 255 255 155 155 155 055 055 055 055 055 945

. . . . . . . . . . . . . . . . . kcab_hsup te kcab_pop : nif ne snoisserppus/snoitresni sed saC 3.4.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noisserppuS 2.4.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noitresnI 1.4.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . stnem ld no isserppus uo no itresnI 4.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . selpmexE 3.3.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . < ruetarpoL 2.3.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . == ruetarpoL 1.3.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sruenetnoc ed nos iarapmoC 3.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . paws noitcnof aL 4.2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . raelc noitcnof aL 3.2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ngissa erbmem noitcnof aL 2.2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noitatceffad ruetarpO 1.2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . selabolg snoitac ifidoM 2.1 . . . . . . . . . . . . . . . . . . . . . . epyt emm ed ruenetnoc ertua nud ritrap noitcurtsnoC 5.1.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ecneuqs enud ritrap noitcurtsnoC 4.1.1 . . . . . . . . . . . ruelav enu ssilaitini stnemld nnod erbmon nu ceva noitcurtsnoC 3.1.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . stnemld nnod erbmon nu ceva noitcurtsnoC 2.1.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ediv ruenetnoc nud noitcurtsnoC 1.1.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . no itcurtsnoC 1.1 . . . . . . . . . . . . . . . . . . . . . . . euqed te tsil ,rotcev sruenetnoc xua senu m moc stilannoitcnoF - 1 ...............................

Table des matires

XXI

285 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . dnif erbmem noitcnof al rap ehcrehceR 3.4.1 185 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ruetarti rap sccA 2.4.1 185 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ] [ ruetarpol rap sccA 1.4.1 1 8 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . stnem l xu a s cc A 4.1 185 . . . . . . . . . . . . . . . . . . . . . . . . . . . . ruenetnoc nud erdrol ed xiohc ud secneuqsnoC 4.3.1 085 . . . . . . . . . . . . . . . . . . . . ruenetnoc nu rap esilitu erdrod noitaler al ertannoc ruoP 3.3.1 975 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ruenetnoc ud euqsnirtni erdrol ed xiohC 2.3.1 975 . . . . . . . . . . . . . . . . . . . . . . . . . . tuafd rap erdrod noitaler al tnasilitu snoitcurtsnoC 1.3.1 875 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pam epyt ed ruenetnoc nud no itcurtsnoC 3.1 8 7 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . r i ap s e ss a l c e d no rt a p eL 2.1 675 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . f itcudortni elpmexE 1.1 675 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pa m ruenetnoc eL - 1 575 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . eueuq_ ytiro irp ruetatpadaL 3.5 175 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . eueuq ruetatpadaL 2.5 075 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . kcats ruetatpadaL 1.5 075 . . . . . . . . . . . . . . . . . . . . . . . .eueuq_ytiroirp te kcats ,eueuq : ruenetnoc ed sruetatpada seL - 5 965 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elpmexE 5.4 865 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . eriomm tnemecalpme l ed no itseG 4.4 865 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ertua enu snad etsil ed eitrap enud trefsnarT 4.3.4 765 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . setsil xued ed noisuF 3.3.4 665 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elbuod ne stneml sed noisserppuS 2.3.4 665 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . etsil enud irT 1.3.4 565 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . se labolg sno itarpO 3.4 565 . . . . . . . . . . . . . . . . . . . . . . . . . . noitidnoc enu tnadnopr stneml sed noisserppuS 2.2.4 565 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .ennod ruelav ed stneml sed noisserppuS 1.2.4 465 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoisserppus te snoitresnI 2.4 465 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .stnatsixe stnem l xua scc A 1.4 465 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tsil ruenetnoc eL - 4 365 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elpmexE 2.3 265 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elarng noitatnesrP 1.3 265 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . euqed ruenetnoc eL - 3 165 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sneloob ed sruetcev sed rei luc itrap saC 5.2 065 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elpmexE 4.2 955 . . . . . . . . . . . . . . . . . . . . . . ruetcev nud eriomm tnemecalpmel ed noitseg ed slituO 3.3.2 955 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . secnerfr ed uo sruetartid noitadilavnI 2.3.2 855 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noitcudortnI 1.3.2 855 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . eriomm tnemecalpme l ed no itseG 3.2 855 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoisserppus te snoitresnI 2.2 855 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tneml reinred ua sccal ed saC 3.1.2 755 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ecidni rap sccA 2.1.2 755 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ruetarti rap sccA 1.1.2 755 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .stnatsixe stnem l xua scc A 1.2 655 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . rotcev ruenetnoc eL - 2
Chapitre 26 : Les conteneurs associatifs

XXII

Apprendre le C++

195 095 095 985 985 985 785 685 685 585 585 485 485 385 285

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . se mhtirogla te sfitaicossa sruenetnoC - 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tesitlu m ruenetnoc eL - 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . euq itamhtam e lbmesnel te tes ruenetnoc eL 3.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elpmexE 2.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e larng no itatnesrP 1.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tes ruenetnoc eL - 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elpmexE 2.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e larng no itatnesrP 1.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . pa mitlu m ruenetnoc eL - 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elpmexE 8.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sti libissop sertu A 7.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . er iomm no itseG 6.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoisserppuS 2.5.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoitresnI 1.5.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sno isserppus te sno itresnI 5.1

Chapitre 27 : Les algorithmes standard

216 016 016 906 706 706 706 606 606 506 406 306 106 006 006 995 895 895 695 595 595 495 495 495 395 395 395

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ir t ed s e mh ti roglA - 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noisserppus ed stid se mhtiroglA - 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoit itraP 3.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . seriotala snoitatumreP 3.2.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoitatumrep ed noitarnG 2.2.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noitatoR 1.2.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sruelav ed snoitatumreP 2.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sruelav ed tnemeca lpmeR 1.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ecneuqs enud noita mrofsnart ed se mhtiroglA - 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . muminim ed uo mum ixam ed ehcrehcer ed semht irogl A 2.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . erianu tacidrp nu uo ti lag enu rus sdnof semht irogl A 1.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . eh cr ehc e r ed s e mh ti roglA - 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . no itcnof enu rap sruelav ed no itarnG 2.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ertua enu snad ecneuqs enud e ipoC 1.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . s etnat si x e se cneuq s ed n oi tas ilai tini d s e mh ti roglA - 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ertned tolf ed ruetartI 2.5.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . eitros ed tolf ed ruetartI 1.5.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . to lf ed ruetartI 5.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . no itresn id ruetartI 4.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . secneuqs te semht irogl A 3.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sruetartid seirogtac sed eihcrariH 3.2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . eitros ne ruetartI 2.2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ertne ne ruetartI 1.2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sruetartid se irogtac seL 2.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sruetarti te semht irogl A 1.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . selarng snoitoN - 1 .................................

Table des matires

XXIII

946 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . smon ed secapse xued ceva elpmexE 2.1 846 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . smon ed ecapse levuon nud noitarc ed elpmexE 1.1 746 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . s mon ed secapsed noitarC - 1 746 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . t es tib es sal c aL - 3 246 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . secidn id sruetceV 7.2 146 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .sruetcev ed snoitceS 6.2 0 4 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . euq sam r ap s rue la v e d no it c e l S 5.2 8 3 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . le ir ot c ev luc laC 4.2 836 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . el liat ed tnemegnahc te no itatceff A 3.2 8 3 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ][ rue t ar p oL 2.2 7 3 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . y a rr a l av s e ss a l c se d sru et curt snoC 1.2 736 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . seicossa sessalc sel te yarralav essalc aL - 2 536 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . x e l p m o c e s s a l c a L - 1 536 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Chapitre 30 : Les espaces de noms Chapitre 28 : La classe string

136 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . reivalc ua serutcel sel resilibaif ruop noitasilitU 2.2.7 036 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noitatnesrP 1.2.7 036 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .maertsgn irts i essalc aL 2.7 9 2 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . m ae rt sgn irt s o es s a l c aL 1.7 926 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . erio m m ne egata mrof ed stilibissop seL - 7 826 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . stn eme c a l pmeR 3.6 726 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sn o i ss er p puS 2.6 6 2 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sn o i tr esn I 1.6 626 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . stne mecalp mer te snoisserppus ,snoitresn I - 6 526 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . etius enud tnesba uo tnesrp ertcarac nud ehcrehceR 2.5 526 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ertcarac nud uo enahc enud ehcrehceR 1.5 426 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . enahc enu snad ehcrehceR - 5 426 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . no itan tacn oC - 4 326 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . selabolg snoitarpO - 3 226 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noitcurtsnoC - 2 226 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . s t i l a r n G - 1 126 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 816 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . s a t e d n o i t a l u p i n a m e d s e m h t i r o g l A - 0 1 616 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . etsilb mesne ertcarac se mhtiroglA - 9 516 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . euqir mun ertcarac se mhtiroglA - 8 416 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noisuf ed semhtirogl A 2.7 416 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . er ianib ehcrehcer ed semhtirogl A 1.7 316 . . . . . . . . . . . . . . . . . . . sennodro secneuqs sed rus noisuf ed te ehcrehcer ed se mhtiroglA - 7

XXIV

Apprendre le C++

Chapitre 29 : Les outils numriques

166 166 066 066 956 756 556 456 256 256 256 156 056 056

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iti mad noitaralcd te s mon ed secapsE - 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . se mynona secapse seL - 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . saila seL - 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . gnisu evitcerid al ed tivitisnarT - 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . s mon ed secapse sed noitacirb mI - 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoitcnof ed ehcrehcer te s mon ed secapsE - 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . smon ed secapse sel ruop gn isu evitcer id aL 2.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . stugibma te egauqsaM 2.1.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . elarng noitatnesrP 1.1.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . selobm ys sel ruop gnisu no itaralcd aL 1.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . gnisu snoitcurtsni seL - 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . smon ed secapsed elatnemrcn i noitarC 5.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . smon ed ecapse nu snad tnarug if sno itcurtsnI 4.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ett -ne re ihc if te smon ed ecapsE 3.1

Chapitre 31 : Le prprocesseur et linstruction typedef

376 276 276 176 076 966 866 666 466 466 366 366

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ]3[tn i ed emynonys nud noit inifD 3.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . * tn i ed emynonys nud noit inifD 2.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tn i ed emynonys nud noit inifD 1.4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . fedepyt ceva se mynonys ed noitinifd aL - 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noisserpxe enud rue lav a l e il noitaroprocnI 2.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . selobm ys ed ecnetsixe l e il noitaroprocnI 1.3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ellennoitidnoc noitalip moc aL - 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sorcam ed noit inifD 2.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . selobm ys ed noit inifD 1.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . enifed# evitcerid aL - 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . edulcni# evitcerid aL - 1 ................

Annexes

576 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

Annexe A : Rgles de recherche dune fonction surdfinie

186 186 086 086 086 976 976 876 876 776 776

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . serb me m snoitcnoF - 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . stne mugra srueisulp snoitcnoF - 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . st ib ed spmahc sed sac : noitpecxE 6.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . selba irav stnemugra sno itcno F 5.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ruetas ilitul rap se in ifd snoisrevnoC 4.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sdradnats snoisrevnoC 3.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . seuqirmun sno itomorP 2.2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . etcaxe ecnadnopserroc enud ehcrehceR 1.2 . . . . . . . . . . . . . . . . . . . . . . . . . tne mugra lues nu noitcnof enud ehcrehcer ed e mhtiroglA - 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . setadidnac snoitcnof sed noitani mretD - 1 ...........

Table des matires

XXV

927 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sruerre sed noitseG 01.1 9 2 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . r e ih c i f ed ru etn i o p e l rus n o i tc A 9.1 827 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . egatamrof snas seitros-sertnE 8.1 727 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sertcarac ed seitros-sertnE 7.1 527 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .sno itcnof sec rap ssi litu tamrof ed sedoc seL 6.1 527 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoitcnof sec senummoc selgR 5.1 427 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e t am ro f erut c eL 4.1 227 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoitcnof siort sec ceva selbasi litu tamrof ed sedoc seL 3.1 127 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . etamrof erutirc 2.1 0 2 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sr e ihc if s e d no it se G 1.1 027 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ) o i d t s c ( s e i t r o s - s e r t n E - 1 917 . 717 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sr e vid s e mhti r oglA - 01 617 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sat ed noitalupina m ed se mhtiroglA - 9 317 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . etsilb mesne ertcarac se mhtiroglA - 8 217 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . euqir mun ertcarac se mhtiroglA - 7 017 . . . . . . . . . . . . . . . . . . . sennodro secneuqs sed rus noisuf ed te ehcrehcer ed se mhtiroglA - 6 807 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . irt ed se mhtiroglA - 5 607 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noisserppus ed se mhtiroglA - 4 307 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ecneuqs enud noita mrofsnart ed se mhtiroglA - 3 107 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ehcrehcer ed se mhtiroglA - 2 007 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . setnatsixe secneuqs ed noitasilaitinid se mhtiroglA - 1 996 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 796 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . serb me m sed rus sruetniop sel te egatirhL - 3 696 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sennod serb me m sed rus sruetniop seL - 2 596 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .serb me m snoitcnof sed rus sruetniop seL - 1 596 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Annexe G : Les principales fonctions de la bibliothque C standard Annexe F : Les algorithmes standard Annexe E : Les pointeurs sur des membres Annexe D : Comptage de rfrences Annexe C : Les diffrentes sortes de fonctions en C++ Annexe B : Complments sur les exceptions

986 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

686 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . rtp_otua essalc al : tnegilletni ruetniop ed tpecnoc eL - 3 486 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . noitasilaitini rap secruosser ed noitseg ed euqinhcet aL - 2 386 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . seuqita motua stejbo sel rap ssop se mlborp seL - 1 386 . . . . . . . . . . . . . . . . . . . . . . . . . . .

XXVI

Apprendre le C++

537 537 437 337 237 037 927

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )p mjtesc( xuacol non stne mehcnarB - 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )onrrec( sruerre sed noitseG - 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )tressac ( tniop ua esi m ed orcaM - 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )bildtsc( seriatilitU - 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )hta mc( seuqita mhta m snoitcnoF - 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . )gnirtsc( senahc ed noitalupinaM - 3 . . . . . . . . . . . . . . . . . . . . )epytcc( selucsuni m-selucsuja m snoisrevnoc te sertcarac ed stseT - 2

Annexe H : Les incompatibilits entre C et C++

147 047 047 047 937 937 837 837 837 837 737 737 737

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 743

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoitcnof ed s mon seL - 21 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sertcarac ed xuaelbat ed noitasilaitin I - 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . snoitar mun seL - 01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . otog noitcurtsniL - 9 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . selpitlu m snoitinifd seL - 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ertcarac epyt ed setnatsnoc seL - 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . slc-stoM - 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . * diov epyt ed sruetniop seL - 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . tsnoc fitacifilauq eL - 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ruoter ed ruelav snas snoitcnoF - 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . stne mugra snas snoitcnoF - 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . sepytotorP - 1 ........................

Table des matires

XXVII

-a mrofni ne stnangiesne xua te srueppolevd xua ,stnaidut xua sio f al esserdas lI .++C ne t e j b o e t n eir o n oi t a m m ar g or p al r es irt a m t n e ti a h u os i u q x u e c s u o t n i ts e d ts e e g ar v u o t e C

.8991 telliuj ne ISN Al rap eilbup t a ++C ed evitini fd emron a L .)yrarbiL etalpmeT dradnatS( L.T.S elgis el rap tnevuos engisd nouq seuqirng sessalc ed te snoitcno f ed e mro f suos tnatnesrp es xuanigiro dradnats stnasopmoc ed tuotrus te snoisnetxe seuqleuq ed eihcirne al ,esuac ne ertte mer al snas ,iuq ISNA timoc ud liav -ar t u a es ab ed i vre s a i uq er inr e d e t te c t se C .1991 ne 3 t e 1.2 sn o isre v se l ,9891 ne 0 .2 n ois -rev al : tnos etad ne serinred se L .egagnal ud ecner fr ed ivres tno T&TA ed snoitacilbup e d er b m o n n i a tr e c n u , t n e m e l a it i n I . ul o v u e p e u ql e u q a + + C e g a g n al e l , n o it asi l a mr o n as uqsuj noitpecnoc as eD .O.O.P al srev erutcurts noitam margorp al ed ruecuod ne noitis -nart enu reutce ffed C srue mmargorp sed si mrep a li ,erusem eniatrec enu snaD .O.O.P ed s t p e c n o c s e l r e u q il p p a d t n at t e mr e p i u l s t i c i fi c p s e d er b m o n n i a tr e c n u ,) C el( t n a t si x e r ut -curts egagnal nu erdniojda hcrehc a ,ruetarc nos ,purtsuortS enrajB ,te ffe nE .edirb yh ehcra md enu tnavius unoc t a ,iul tnauq ,++C egagnal e L .avaJ ,tnem mecr sulp ,uo lef fiE ,alu miS ,klatllamS euq slet stejbo stneiro stid segagnal xuaevuon ed ecnas -sian nnod tno ).O.O.P grba ne( tejbo etneiro noitammargorp al ed stpecnoc sel ,tt srT

2 Objectifs et structure de louvrage 1 Historique de C++

Avant-propos

.serianidro snoitcnof sec euq elr emm el tnemeuqitarp tnemelanif tnauoj ,tejbo euqnocleuq nud setnadnepdni , essalc ed sedohtm sed rinifd ed tnettemrep ,avaJ tnod ,segagnal sniatrec ,tiaf nE .2 .C egagnal ud sruessiannoc xua tnemeuqificps esserdas ,C sruemmargorp sel ruop ++C ,ruetua emm ud egarvuo ertua nU .1

erutagil al tnos euq selbasnepsidni sia m secnava snoiton sel reppolevd neib ed nios sirp snova suon ,tirpse emm el snad sruojuoT . euqinonac essalc ed noiton al tnesiudnoc iuq stne ml ,noitatce ffad ruetarpol ed noitini fder al rus euq isnia ,eipocer ed ruetcurtsnoc ud elr el rus tsisni tnemegral snova suon euq ,elpmexe rap ,isnia tseC .sessalc serporp ses ed tniop ua esim al te tnemeppolevd el ,noitpecnoc al snad lennoitarpo tne metia frap rineved ed ruetcel ua ertte mrep isnia snosnep suoN .)snoitpecxed noitseg ,stolf ,sei ma snoitcno f ,sruetarpod noitini fdrus( egagnal ua seuqi ficps srt stcepsa sel issua siam ,)euqirng noit -am margorp ,e msihprom ylop ,noitini fder ,egatirh ,ruetcurtsed ,ruetcurtsnoc ,essalc( .O.O.P ed stpecnoc srup sel tnemelues non ,snotiart y suoN .egarvuol ed tivitsuahxel eriun tnatua ruop snas sia m ,evissergorp noa f ed sdroba etiusne tnos tejbo stneiro stcepsa se L .eiuppas elle selleuqsel rus selatne madnof snoiton sertua sel selim - iss a t n os d n a u q ess a l c e d n oi t o n al r e t n e s r p e d e li c a f s ul p t s e l i , e u q i g o g a d p n al p n u r u S . e g a g n al u d s t il i bi s s o p seniatrec ed revirp es tiardneiver , tejbo noita mmargorp erup enu sap tnednopserroc en selleuq etxetrp suos ,snoitcno f sellet ed resilitu sap eN .sruetarpod noitini fdrus al euq sellet secnatsnocric seniatrec snad ++C ne selbasnepsidni emm tnos )tejbo nud setnad -nepdni( serianidro snoitcnof seC . stejbo sed tnemeriotagilbo tnauqilppas sedohtm sed euq etsixen li o tejbo egagnal rup nud sac el sap tnemeuqiroht tsen iuq ec ,tejbo tneiro non egagnal nuuq ertit emm ua serianidro snoitcno f sed rini fd ed temrep ++C e L . edohtm ed iulec snad tpada tne mergl evuort es noitcno f ed tpecnoc el lueS .cte ,elrtnoc ed erutcurts ,noitatce f fa ,sep - yt ,selbairav : erutcurts noitammargorp ed stpecnoc sed trapulp al rus eiuppas .O.O.P a L : setnavius snosiar sel ruop ei fitsuj es ehcra md etteC .tejbo stneiro stpecnoc sel redrobad t n a v a , + + C u d e r u t c urt s n oi t a m m ar g or p e d s t il i bis s o p s e d el b m es n e l s n o i d ut y s u o N . el l e n n osr e p n o it at n e m ir p x e e n u tr a p d e d t ni o p e d erocne uo liavart ed tnemennorivne erporp ertov snad etcerid noitatne mirpxe enu ,noitseuq ne noiton al ed edipar noisivr enu uo evitiutni ecnassiannoc ed esirp enu rivres tne melag tuep elpmexe teC .ler etxetnoc nu snad ervu ne erttem al tnem moc tnartnom )noituc -xed elp mexe nud itrossa te( telp moc siam elpmis em margorp nud ertsulli tse elatnemad -no f noiton euqahc ,tne melarnG .fissergorp sruoc nud emro f al suos unoc tse egarvuoL .)...PHP ,avaJ ,tpircSavaJ ,noht yP ,lreP ,ihpleD ,cisaB lausiV ,++C/C ,lacsaP ,loboC( iuhdruojua egasu ne segagnal sed trapulp al senummoc tnos iuq ,.cte ,snoitcno f e d , el rt n o c e d s er u t c ur ts e d , n o i t a t c e f f a d ,s e p yt e d ,s el b air a v e d s n oi t o n x u a u ti b a h ts e liuq erid--tsec ,erutcurts noitam margorp al ed ecneirpxe enu jd edssop ruetcel el euq esoppus li ,ehcnaver ne ; C egagnal ne in ,O.O.P ne ecnassiannoc enucua treiuqer en lI .euqit
1

XXX

Avant-propos AVANT-PROPOS

.C ne tirc edoc ud resilitur tnatiahuos ++C ruem margorp ua tuotrus tnorivres sellE .++C te C ertne tnatsixe setnatrop mi sulp sel secner ffid sel relangis tnenneiv C nE sertit seuqramer seuqleuq ,ertuo nE .avaJ ed edutl redroba aretiahuos ,++C ud esirta m al srpa ,iuq ruetcel ua tnemelag sia m ,++C el ici dnerppa iuq avaJ rue mmargorp ua tnemelues non selitu tnores s el l E . + + C te a v aJ ert n e t n at si x e s er u ej a m se c ner f fi d se l r us t ne cc al t n et te m s el l E . a vaJ nE sertit seuqramer sesuerbmon ed tiudortni snova suon ,avaJ egagnal ud tiralupop al ed unet etpmoC .++C egagnal ud OSI/ISNA emron al rus dno f tnemeritne tse egarvuoL

.stnasopmoc ses ed trapulp al ed noitasilitu ennob al tnennoitidnoc iuq semhtiroglad te ruetartid ,ruenetnoc ed sellec trap ertuad ,seuqirng s n o it c n o f e d t e s ess al c e d s n o it o n s e l tr a p e n u d t n e m el b al a r p r es o p x e d n i os sir p r i o v a s r p a ,liatd ne eidut t a . L.T.S al ,e m m eD .e msihprom ylop el tseuq ).O.O.P al ed te( egagnal ud etnassiup sulp al noiton al rus tnehcuobd selleuqsel ,setiartsba sessalc sel te euqiman yd
XXXI

3 Louvrage, C, C++ et Java


3 - Louvrage, C, C++ et Java

.euqissalc larudcorp egagnal nu ceva sirailimaf jd cilbup nu esserdas egarvuol euq snoleppaR .1

. .O.O.P ed stpecnoc sed tcniccus sopxe nu rap te )elarudcorp uo( erutcurts noita mmarg -orp al tnanrecnoc sleppar s ferb ed rap snorecnem moc suon ,rednehrppa sel xueim ed erttem -rep suov ruoP .++C ed selleitnesse seuqitsirtarac sel reni maxed ici snosoporp suov suoN .8991 ne IS N Al rap noitasila mron as uqsuj ,snoisrev srueisulp unnoc a ++C .0991 ne ISNAl rap silam -ron t a C .tnemelllarap reulovd unitnoc tno ++C te C segagnal xued sel ,2891 srpA .).O.O.P grba ne( tejbo etneiro noitammargorp ed stilibissop sed euqissalc elarudcorp noitam margorp ed egagnal nu rus re fferg ed ,etros euqleuq ne ,cnod te C egagnal ua sessalc sed retuojad tiat purtsuortS .B ed lapicnirp fitcejboL .8791 ne eihctiR te nahgninre K rap silamro f ,eihc -tiR sineD rap 2791 sd rc em m-iul ,C egagnal ud noisnetxe enu em moc ,2891 sd ,)seir -otaroba L lleB T&TA( purtsuortS enrajB rap 2891 ed ritrap unoc t a ++C egagnal e L
1

Prsentation du langage C++

r er o i l m a n e d t n e m el a g ti art t e mr e p e l l e u q r p s e ti a v a n O . e s s et s u b or a l t e e d u ti t c a x e l reroilma ned ,tnatrap ,te ,sem margorp sel rerutcurts ed simrep a elle ,tne mmatoN .sleicigol se d n o it c u d or p a l e d ti la u q a l r ess er g or p t ia f t n e m et se f i n a m a er ut c urts n oi ta m m ar g or p a L .) o t o g s n as n o i t a m m ar g or p e d s i o fr a p e lr a p n o( s e i n -i fd neib elrtnoc ed serutcurts ed erb mon niatrec nu tnesilitu serudcorp sel ,trap ertuaD .serudcorp sec ed setnadnepdni tnemelarng ,sennod ed serutcurts setner ffid ed te ser -udcorp setner ffid ed noinur al ed mro f tse em margorp nu ,erutcurts noita mmargorp nE

.seuqimonoc snosiar sed ruop euq ec-tiares en ,dnoces el snad xuaicurc tnemelbaborp tnores sliuq srola ,sac reimerp el snad ecnatropmid erug tnoruan tilibasilitur te tilibisnetxe stcepsa sel ,e m m eD ! senna-se mmoh xid ed tejorp nud tigas liuqsrol tnemertua tuot av ne li ; snoitcurtsnid eniatnec enu etrop - moc liuqsrol etsubor te tcaxe em margorp nu erircd elica f tse li ,elpmexe raP .snrecnoc stejorp sed ecnatrop mil eil tnemelleitnesse te etnerappauq tnevuos tsen noitcidartnoc a L ...erio m m elliat ,noitucxed sp met : ecneiciffel ; s n o i t a t n e m l p mi setner f fid snad leicigol emm nu retiolpxe tuep no elleuqal ceva tilica f : tilibatrop al ; e m lb orp er t ua n u erduosr ruop leicigol ud )seludo m( seitrap seniatrec resilitud tilibissop : tilibasilitur al ; snoitaci ficps sed noitulov enu eriafsitas ruop tpada ert arruop emmargorp nu elleuqal ceva tilica f : tilibisnetxel ; noitasilitud sela mron snoitidnoc sed etracs nol euqsrol rigar neib edutitpa : essetsubor al ; )snoitaci ficps xua tnadnopserroc sennod ,elp mexe rap( noitasilitud selam -r o n s n o it i d n o c s e d s n a d ,s ul u o v st at l us r s el ri nr u o f l ei ci g o l n u d e d u t it p a : e d u t i t c a x e l : t n e m m at o n ,s er t ir c s ni atr e c t n a v i us r er u s e m e d e t n e t n o u q ti l a u q e d secnegixe sed ceva sleicigol sed )e mret ud leirtsudni snes ua( eriudorp ed tigas li ,eriartnoc ua ,sertuad ruoP .euqserp uo emlborp leuq etropmin erduosr rinevrap ruop )tniertser er b m o n n e( s eri at n e m l s n oi t c ur ts ni s e d r e n a h c n e d t i f f us li l e u q el s n a d , n it n a f n e n oi t c ur t -s n o c e d u ej n u d e u q t i g as e n l i , t e f f e n e ,s n i a tr e c r u o P . el at o t n oi t c i d ar t n o c a l u qs u j t n a ll a sesrevid snoitcar sed ticsus sruojuot a noita mmargorp ed tivitcal ,tnanetniam uqsuJ

1.2 La programmation structure 1.1 Problmatique de la programmation

1 Programmation structure et programmation oriente objet


Prsentation du langage C++ CHAPITRE 1

.selr te stnemugra ,smoN .2 .elbatiah -uos sap tios en elleuq erid sap tuev en iuq ec ,eriotagilbo sap ares en noitaluspacnel ,++C ne ,reilucitrap nE .esuer -uogir sniom uo sulp erinam enud suqilppa ert tnevuep .O.O.P al ed stpecnoc sel euq teffe ne snorrev suoN .1

s en

-n od s ed n o italus pa cn e

tejbol ed sruetasilitu sel ; emm-iul tejbol rus euq ecnedicnid an tejbo nud sennod sed erutcurts al ed elleutnev noitaci fidom enu : ecnanetnia m al tnemelbardisnoc etilica f ellE .leicigol ed tilauq ed erita m ne etse fina m trtni nu etnesrp sennod sed noitaluspacneL . e s il a r s a p t i a t n s e n n o d s e d n oi t c arts b al , n oi t a l us p a c n e d et u a f ,euq sia m ,snoitaci ficps ses rap )rueirtxel ed( esirtcarac ert tne melag tiavuop erudc -orp enu ,erutcurts noita mmargorp neuq reuqramer tuep no ,soporp ec .)shcac tnos noit -atne mlpmid stercnoc sliatd sel euq neib emirpxe iuq ec( sennod sed noitcartsba enu esilar elleuq tnasid ne noitautis ellet enu tnevuos tircd nO .ecnatrop mi snas tnat sennod sel setnalp mi tnemeller tnos tnod erinam al ,sedohtm ses ed snoitaci ficps sel rap tnem -euqinu esirtcarac es tejbo nu ,rueirtxel ed uv ,euq tse noitaluspacnel ed etirm dnarg e L .t ej b ol e g ass e m n u d i o v n el tia f ne tse edohtm enud leppal euq tnasid ne alec sio frap tiudart nO .eriotagilbo ecaf -r e t ni d el r el is ni a t n e u oj i u q ,s e d o h t m s es e d eri ai d mr e t ni l r a p r ess a p e d er i a ss e c n ts e li ; tejbo nud sennod sel rus tnemetcerid rigad elbissop sap tsen liuq ei fingis aleC . enu emmon nol euq ec esilar no , erup .O.O.P ed reifilauq tiar -ruop nol euq ec snad ,te ffe nE .noitisopatxuj elp mis enuuq sulp tse noitaicossa ettec siaM
1

te j b O = s e n n o D + s e d o h t M

: tse .O.O.P al ed noitauql euq erid tiarruop no ,htriW ed noitauql ceva eigolana raP .sennod sec rus tnassiga )sedohtm srola el le p pa n o u q( s er u d c or p s e d t e s e n n o d s e d n oi ta ic oss a e n u ri o va s , d t p e c n o c el r us tnemetsuj edno f ,)O.O.P grba ne( tejbo etneiro noita mmargorp al tneivretniuq l tseC
tej b o

sennod ed serutcurts + se mhtirogla = se mmargorP : htriW ed noitauql e mmon nol euq ec rap musr evuort es leuqel ,serudcorp sel te sennod sel ertne tnatsixe egalpuocd ud esuac tnemsicrp tar -appa tluci ffid ed ep yt ec ,rO .sennod ed erutcurts enu esuac ne erttemer ed eriassecn tiat li u q e cr a p i c e c t e ,t n a ss er t n i e l u d o m e l r e ss a c t n e v u os ti as i u d n o c l e i ci g ol n u d n o i t as il -itur al uo noitatpadal euq urepa tses no ,euqitarp ne ,rO .tilibasilitur al te tilibisnetxel
3

1.3 Les apports de la programmation oriente objet

1.3.2 Encapsulation 1.3.1 Objet


1 - Programmation structure et programmation oriente objet

.essalc emm enud stejbo sed elbmesnel senummoc tnemevitceffe tnos sed -ohtm sel ,ehcnaver nE .tejbo euqahc serporp tnat sennod sel ,enummoc tse erutcurts al elues ,udnetne neiB .2 .elb -airav rap tejbo tom el te tejbo rap calpmer tse essalc tom el ,)elpmexe rap ,lacsaP obruT( segagnal sniatrec snaD .1

.reilucit -rap egagnal nu rehcatta suon snas .O.O.P al ed sepicnirp sdnarg sel recnond snonev suoN

.s te jb o sec ed fitce ffe ep yt ud ecnassiannoc riovad tnava tirc ,tne melleutnev ,te ilbatrp oirancs nu snad stejbo xuaevuon ed retuojad tnattemrep ne ,sem margorp sed tilibisnetxel eroil -ma emsihpro m ylop e L .seini fder t tno sedoht m serporp ses tnod erinam al ed reilucit -rap ne ,)esab ed essalc ettec ed evird( evitce ffe essalc as ed dnepd fitce ffe tnemetropmoc nos sia m ,esab ed essalc ettec ed tiat lis em moc tejbo euqahc esilitu no ,tnemsicrp sulP . es a b e d ess al c e m m a l e d s e vir d s es s a l c e d s u ot t n e i os s li u q u e p r u o p ,s t n er f fi d s e p yt e d stejbo sed erina m emm al ed retiart ed tilibissop al erid--tsec ,emsihpro m ylop el e mmon nol euq ec ed lc al tse tilibissop etteC .esab ed essalc as ed setirh sedoht m sed sen -iatrec )rei fido m erid--tsec( rini fder tuep evird essalc enu ,O.O.P ne ,tnemelarnG .)A ed etirh e m m-elle iuq ,B ed retirh tuep C essalc al( eriassecn euq sio f ed tnatua rtir ert tuep liuq sulp tnatuad ,stnatsixe stiudorp ed noitasilitur al tne megral etilica f egatirhl ,retuod nes tuep no e mmoC .tnolov resilaicps sel te tniop ua tne metia frap serueir -tna snoitasilar sed rus re yuppas isnia tuep ,enneicnal ed sedutitpa sed te stirporp sed e tir h i u q , ess a l c e ll e v u o n a l e d n oi t p e c n o c a L .s e d o h t m s e ll e v u o n e d t e s e n n o d s e ll e v -uon ed etuoja no elleuqal ,)! colb ne esilitur nouq( etnatsixe essalc enud ritrap essalc ellevuon enu rini fd ed te mrep lI .egatirhd iulec tse .O.O.P ne tnatrop mi tpecnoc ertua nU
1.3.4 Hritage 1.3.5 Polymorphisme

.)essalc as ed ecnatsni enu tse tejbo nuuq issua tid no( essalc ep yt let nud selbairav sed em moc srola tnessiarappa stejbo se L .sedohtm se mm sed tnasopsid te enum moc sennod ed erutcurts enu tna ya stejbod elbmesne nud noitpircsed al euq ertuad neir tsen essalc enu ,te ffe nE .seuqissalc segagnal sel snad ertnocner nol euq ep yt ed noiton al ed noitasilar -ng al tnemelpmis dnopserroc iuq , essalc ed tpecnoc el tnemelarng tarappa .O.O.P nE
2 1

.t ej b o n u d n oi ta si li t ur a l t n e m e d n ar g etilica f sennod sed noitaluspacnel ,erinam emm al eD .)erutcurts noitam margorp al ceva sac el sap rs neib tiatn iuq ec( noitaci fidom ettec ed ruenet al rap snrecnoc sap tnores en
4
Prsentation du langage C++ CHAPITRE 1

1.4 P.O.O., langages de programmation et C++


1.3.3 Classe

; noitalip moc al exi f elliat ed ,ep yt emm ed stne mld selb mesne : xuaelbat sel : tnos euq sennod ed stagrga sel arevuort nO . ess al c e n u d e mr o f s u os , + + C ed tejbo setneiro stilibissop sel snad tia f ne artarappa leuqel ,eritne trap enahc ep yt nud sap tigas en liuq arrev no ; sertcarac ed senahc sed noitatnesrper ed noitnevnoc enu ; ertcarac ep yt el ; snoisicrp te sticap -ac setner f fid ceva stnattol f ,sticapac setner f fid ceva sreitne : sleusu seuqirmun sep yt sel : arevuort no ,sennod sed esab ed sep yt sel enrecnoc iuq ec nE .sruetniop sed noitpecxel ,segagnal sertua sed sellec ed sehcorp zessa tnos te C egagnal ud sellec tia f ne tnos ++C ed erutcurts noita mmargorp ed stilibissop se L

.tilauq ennob ed edoc ud resilar arruop rue mmargorp el euq egagnal ud esirtam ennob enu rap euq tsen eC ..O.O.P te ) selleusu snoitcno f sed tnem maton( elarudcorp noitam margorp tnalm edirb yh etxetnoc nu snad tnaalp es neuq ++C ed essehcir al etuot retiolpxe arruop en no ,egagnal ud e m m erutan al rap ed ,euq euv ed erdrep sap ardua f en li ,tios ne liuq iouQ ...selabolg selbairav sed rus drob ed ste ffe sed tnasilar seuqissalc snoitcno f sed ceva )sennod sruel ed noitaluspacne etia frap enu tnasilar euq ecrap ,mon ec ed sengid( stejbo sed retibahoc eria f ed elbissop tia f tuot aretser li ,elpmexe raP .rueppolevd ud snoisicd sed tnemetiort ardnepd ++C ne stirc sem -margorp sed tilauq al euq tse esselpuos ettec ed eitrapertnoc al ,tnemesueruehlaM ..O.O.P al srev erutcurts noitam margorp al ed ruecuod ne noitisnart enu tne melag tiattemrep el l E . C n e s tir c j d s e m m ar g or p e d , + + C c e v a t il i bi t a p m o c-i s a u q a l e c r g , t n a tsi x el r e v -resrp ed etirm el tiava purtsuortS .B rap etpoda noitulos al ,eurappa tse elle o euqopl ! lef fiE ceva erup .O.O.P al ed eria f ed euq niol snio m sia m ,C ne .O.O.P eihposolihp enu retpodauq niol sulp cnod av ++C ne re mmargorP ..O.O.P al ed sepicnirp sel suot ervu ne erttem ed tnattemrep slituo sel )C( udnapr larudcorp egagnal nu ne unetbo t tef fe ne a lI .euv ed stniop xued sec ertne nimehc-im eutis es ++C egagnal e L .cisaB uo nartroF em moc segagnal sed erutcurts noita mmarg -orp al ed sepicnirp sel reuqilppa tiatsisnoc iuq ellec elbarap moc edi enu l evuorter nO .)...C ,lacsaP( euqissalc egagnal nu .O.O.P eihposolihp enu rem mon ecnadnet snoirua suon euq ec ,ruehnob ed sniom uo sulp ceva ,reuqilppad retnet sruojuot tuep no ,soppol .l acs a P ce v a er ut c urts n o i ta m mar g or p al r u o p ,s p m et n os ne , ue il ue a enmonhp e mm e L .avaJ uo le ffiE ,tnemmecr sulp ,uo klatlla mS ,alumiS ed sac el elp -mexe rap tseC . erup .O.O.P al ed snom mon suon euq ec resilar te sepicnirp sec erttel al reuqilppa ruop )secip setuot ed( sunoc ert tnevuep segagnal sniatrec ,tnemetse fina m rO
tnatu oja

2 C++ et la programmation structure


2 - C++ et la programmation structure

: s et n er f f i d s n o a f x u e d e d )s t e j b o s e d r e r c i ss u a s n or i d s u o n( s t e j b o s e d r ei c n a ts ni arr u o p n o , es s a l c e n u d ri tr a p .sedohtm sel rengisd ruop serb me m snoitcno f ; e ssa lc e n u e ic - oss a s e n n od e d er ut c urts al e d ser b me m st ner f fi d s el r en g is d r u o p s e n n od ser b m e m : e d t e f f e n e e lr a p n O .s er p or p t n os i ul i u q s e mr et s e d es i li t u + + C , eri al u b a c o v u d n al p el r u S .se d o ht m se d ; sennod ed erutcurts enud noitpircsed al : ar etr op m o c e ssa lc e nU .)r ue t -asilitul rap ini fd ep yt ed noiton al ed noitasilarng( essalc ed noiton al ed esopsid ++C .C egagnal ua ++C ed troppal ed leitnessel rs neib tnetnesrper .O.O.P ed stilibissop se L

.sessalc sed sedohtm xua noitisoppo rap , serianidro snoitcnof se d t ne v u os ar e m m o n s el n o ; ess al c et u o t e d t ne m m a d n e p d ni s ei n i f d t n os s n oi tc n o f se c euq areton nO .sruetniop ed noitalupinam ed siaib el rap erocne uo )C ne elbissop sap tiatn iuq ec( ecner fr rap ,ruelav rap : ruem margorp ud xiohc ua ,eria f ys arruop stnemugra sed snoissimsnart a L .noitcno f ed noiton al snad ++C ne arevuorter es erudcorp ed noiton a L ! s e m m ar gorp se l r esir u cs uq egagnal ud sruetalipmoc sed erutircl rei filp mis tnatua tiahcrehc no ,euqopl : 08 senna xua tnemelani f tnetnomer se mreg sel tnod ,egagnal ud euqirotsihl stnerhni tia f ne tnos stcepsa seC .senahc sed noitatnesrper ed noitnevnoc al te xuaelbat xua sil tne melag tnos sliuq arrev no ,tnemesueiruc zessA .)C te( ++C seuqi ficps zessa tnos sruetniop se L . r o f n oi tc ur ts ni : r ue t p m oc ceva elcuob enu ,sertua ertne ,remmargorp ed tnatte mrep elarng srt erutcurts enu ; elih w te elih w ...od snoitcurtsni : uqsuj te euq tnat ep yt ed elcuob ed serutcurts sel ; hcti ws noitcurtsni : elpitlum xiohc ed erutcurts al ; fi noitcurtsni : xiohc ed erutcurts al : tnennerp moc elrtnoc ed serutcurts se L .)! noitcurtsni enu sap ,ruetarpo nu tse noitatce ffal , + + C n e u q a r e t o n n o ( y + x = x e mr o f a l e d s n o it at c e f f a s e d y = + x n e r ei f il p mis e d t n at t e m -rep xuanigiro noitatce ffad sruetarpo sed tne mmaton arevuort no ,)non ,uo ,te( seuqigol te )/ ,* ,- ,+(( seuqitmhtira sruetarpo sed sulp nE .xuerbmon srt tnos ++C ed sruetarpo se L .sessalc xua sruesrucrp ed tnorivres selleuq arrev no ; seuqnocleuq sep yt ed stnemld selbmesne : serutcurts sel
6
Prsentation du langage C++ CHAPITRE 1

3 C++ et la programmation oriente objet

el rap ,rue mmargorp ud eticilpxe edna med al rus ,ecalp ne sim tse emsihpro m ylop e L .sertua srueisulp ed tne mnatlumis retirhd essalc enu tnattemrep elpitlu m egatirhd setid stilibissop ed )num moc uep tse iuq ec( emm te egatirhl ed esopsid ++C ,tnemellerutaN .)ess al c e n u t n at e x el p m o c( taolf >- exelpmoc noisrevnoc al uo exelpmoc >- tni noisrevnoc al snes nu rennod arruop no ,elpmexe raP .sessalc sel tnos euq ruetasilitul rap sinifd sep yt xua rigral sel ed tem -rep ++C .seticilpmi uo seticilpxe snoisrevnoc ed stilibissop ed jd tiasopsid C egagnal e L . ei m a n o it c n o f ed noiton al sruocer el aretissecn noitinifdrus ettec ,sac sniatrec snad ,euq arrev nO ./ ,* ,- ,+ : stnatsixe selobm ys sel resilitu tnorruop snoitarpo sec ,tse sulp iuQ .noisivid ed te noit -acilpitlu m ed ,noitcartsuos ed ,noitiddad snoitarpo sed rinum al te )sexelpmoc serb mon sed r e t n e s r p e r e n i t s e d ( e x e l p m o c e ssa lc e n u r i ni f d arr u o p n o , el p m e xe ra P .s i ni f d r p se p yt sel ruop ertnocner nol euq sellec seugolana snoitarpod essalc ettec retod ed erttemrep av sruetarpod noitini fdrus ed noiton a L .ruetasilitul rap ini fd ep yt nu tse essalc a L . eri a f el se sir o t ua t ne md snoitcno f sed rap tne meuqinu sia m ,loiv tse noitaluspacned epicnirp el ,setreC .essalc al ed )seluspacne( sennod xua redcca )essalc enu rap( sesirotua tnos iuq serb me m snoitcnof e d t i os ,s el l e us u s n o i t c n o f e d t i os ,t i g as l I . ess al c e n u d s e i m a s n o it c n o f s e d ri n i f d e d t il -ibissop al snad edisr .O.O.P ed segagnal sertuad troppar rap ++C ed stilanigiro sed enU .ruetcurtsed el rap srbil ert tnorruop sreinred sec ; stnemecalpmed seuqiman yd snoitacolla sed tnautce ffe stejbod sac el snad trtni nu tuotrus aretnesrp ic-elleC .tejbo nud noitcurtsed al ed tnemo m ua et -ucxe erbmem noitcno f , ruetcurtsed nud resopsid tuep essalc enu ,eriali mis erinam eD . tir u c s e n u t n e m e ts e f i n a m e u ti ts n o c i u q e c , si l a i ti ni sr u oj u ot ares tejbol euq titnarag ruetcurtsnoc nud ecnetsixeL .tejbol ed noitasilitul seriassecn stne mecalp med euqiman yd noitacolla enud eriov ,snoitcurtsnid tnemeluord ua tnad -nopserroc erobal sulp noitaraprp enud tnemelag siam ,sennod serb me m ed snoitasilait - i n i s e l a n a b e d r i g as t u e p l i ; r u eir t l u t n e m e n n oi t c n o f n o b n os t n at t e mr e p l ai ti n i t at n u s n a d esi m as erid--tsec ,emret ud egral sulp el snes ua ,tejbo nud noitasilaitinil egrahc ne erd -nerp tnemmaton tuep ruetcurtsnoc e L .essalc al ed tejbo nud noitarc al ed tne mom ua etuc -xe tse iuq erilucitrap erb me m noitcno f enu tse ruetcurtsnoc nU .essalc ed sruetcurtsnoc s e d e m m o n n ol e u q e c r i ni f d e d t e mr e p + + C ,s t e j b o s e g a g n a l s e d tr a p u l p al e m m o C .eulosba noitaluspacnel euq sellet selgr seniatrec tnangiertsas ne ,rueugir ed evuerp eriaf ed ruetpecnoc ua elbissop sruojuot etser li ,udnetne neiB .erup .O.O.P ed egagnal nu ert sap tuep en ++C el ,)C ed noisnetxe( emm noitpecnoc as rap ,euq euv ed erdrep sap tua f en li si a m r et t er g er el t u e p n O .s a p es o p m il e n l i s i a m ,s e n n o d s e d n o it al us p a c n e l t e mr e p + + C .emm-iul ruem margorp el rap srg srola tnat stne mecalpme sel , sat nu e mmon nol euq ec snad euqiman yd noitacolla rap tios ; el i p e n u e m m o n n ol e u q ec e d e mr o f suos tne meuqita motua srg srola tnat stnemecalpme sel ,selleusu snoitaralcd sed rap tios
7

3 - C++ et la programmation oriente objet

.u n e v tn e m o m e l l ia t d n e snoreidut sel suoN .sleusu sulp sel semhtirogla sel te )...senahc ,senahc setsil ,seuqi man yd sruetcev( setnatrop mi sulp sel sennod ed serutcurts sel ervu ne ertte m ed tnattemrep snoit - c n o f e d t e s ess a l c e d s n or t a p x u er b m o n e d t n e m m a t o n etr o p m o c el l E .s e i ni f d r p s e ss a l c e d te snoitcnof ed erid--tsec ,dradnats euqhtoilbib enud esopsid ++C ,egagnal tuot e mmoC

. H e x en n A ne se l u t -ipacr tnores selle ,noita mro fnid ertit .C el sap tannoc en iuq emlborp nucua tnoresop e n s e ll e , er o c n e L . + + C t e C ert n e s er u e ni m s ti li b it a p m o c n i s e u ql e u q ets i x e l i ,sr u e l li a r a P . C nE sertit seuqramer sed snad , fita mro fni ertit elp mis r e n n o i t n e m s el e d s n or e t n e t n o c s u o n s u o N .l i a t d n e s e i d u t s a p t n or es e n C u d s el it u n i s ti li b iss o p s e c e u q i os e d a v l i , + + C e g a g n a l e l t n e m e t c eri d s n oi d ut s u o n , i c i e m m o C .C ud eerf te collac ,collam snoitcno f sel tne m -esuegatnava tnecalp mer iuq )eteled te wen( euqiman yd noitseg ed sruetarpod esopsid ++C ,erocne uO .fnacs uo ftnirp euq sellet C ed sdradnats snoitcno f sel seul frepus tnedner iuq )tol f ed noiton al rus sesab( seitros-sertned stilibissop sellevuon ed tiudortni a ++C ,elp mexe r a P . + + C n e )s e t n a d n o d er u o( s e li t u n i t n e n n ei v e d C u d s t i li b iss o p s e ni atr e c ,sr u e l li a r a P . s ert i p a h c s n i a h c or p s e d li f u a s e t n es r p t n e m -ellerutan tuot tnores .O.O.P non snoisnetxe sec euq etros ed ,++C el tnemetcerid snoreidut suon ,icI . tejbo tneiro tnatua ruop tios liuq snas ,C egagnal ua setuoja ert tia f ne tneiar -ruop sellE .O.O.P al seil sap tnos en ++C ud snoisnetxe sed seniatrec ,rueugir etuot nE .O.O.P ed stilibissop sed tnar ffo ,C egagnal ud elbmesne-rus nu emmoc tiatnesrp es ++C euq ,etsilpmis uep euqleuq noa f enud ,tid snova suon ,tnem medcrP

. A D A ce v a s ac e l el p m e x e r a p ts e c e m m o c , e m m- i u l e g a g n a l el s n a d e r g t ni t n e m e l a t ot s a p ts e n ti cir n g et t e c is e m m ,s e u q ir n g e d si o fr a p s e i fi l a u q s n oi t c n o f s et n er f fi d u o s e ss a l c s e t n er f f i d rerng ruop selbasilitu te ,sep yt sed rap selbart marap seldom sed rini fd ed temrep nortap nU .)sialgna ne etalpmet( nortap ed noiton al ed tod t a ++C el ,noitasilamron as cevA .)r u et ar p o d n o it i ni f dr us ed e ms i na c m u a e cr g( ses sa lc s el t no s e uq r u et as il it u l r ap si n i f d sep y t s e l r u o p s n es n u r e n n o d r u el e d t n e m m a t o n t e mr e p i u q e c ,)s er i l u c itr a p s ess al c( st o l f ed noiton al rus tnesoper elle rac ,C ud sellec ed setner ffid tnos ++C ed seitros-sertne se L .)repuccorp nes ne sap cnod an ruemmargorp el te fitan tse emsihp -rom ylop el ,avaJ ne( selleutriv snoitcno f sed )tne mesueiruc( e mmon nol euq ec ed siaib
8
Prsentation du langage C++ CHAPITRE 1

5 C++ et la bibliothque standard 4 C et C++

. C e d s e tir h s n oi t c n o f s el -apicnirp sel relutipacr ardneiv G exennAL .sertipahc stner ffid sed li f ua setiudortni tnores s el b as n e ps i d n i s n oi t c n o f s el , er o c n e l , u d n e t n e n e i B .s et n a d n o d er u o s el it u ni s e u n e v e d snoitcno f ed sirp moc y ,C ud dradnats euqhtoilbib al ed tilatot al ed esopsid ++C ,ertuo nE
9

5 - C++ et la bibliothque standard

.s el p m e xe s on snad essalc enucua cnod zerevuort en suov te ici droba ares en .O.O.P tcepsa nucua ,tid tnem -ertuA .elarudcorp noitam margorp ed stcepsa sed ,reilucitrap ne ,cnod te egarvuol ed etius al e d e d u t l r u o p el b a s n e ps i d n i er v as i u q e c s ti mi l c n o d s e m m os s u o n s u o N . r f f i d ti os s n oi t on s en i atre c e d l li a t d s op xel e uq e c et ti uq ,s te lp m oc se m m arg orp se d e lb m ed erircd te eril ed erttemrep suov ed tse ertipahc ec ed fitcejbo lapicnirp el euq neib zetoN . n o i t u c x el t e s n ei l e d n o i ti d l , n o i t a li p m o c al , n oi ti d l t n os e u q e c t n a l e p p ar s u o v ne em margorp nud tnemeppolevd el esinagros tne mmoc snorertnom suov suon ,ni fnE .em margorp nud erutircl tnanrecnoc selarng selgr seuqleuq etiusne snoregagd suoN .) xi o hc ,ruetp moc ceva elcuob( elrtnoc ed serutcurts xued euq isnia ,)erutirc te erutcel ,noitat -ce ffa ,noitaralcd( esab ed snoitcurtsni seniatrec tnemirpxes tnemmoc ,tnatsnil ruop ellem -ro fni erocne erinam ed ,zerirvuocd y suoV .stnem moc selp mexe xued rus edno f ,++C egagnal ne em margorp nud ehcorppa eri merp enu snosoporp suov suon ,ertipahc ec snaD

Gnralits sur le langage C++

12

Gnralits sur le langage C++ CHAPITRE 2

1 Prsentation par lexemple de quelques instructions du langage C++


1.1 Un exemple de programme en langage C++
. tn e m e n -noitcno f el sniom uo sulp riovecrep ned ze yasse ,tnevius iuq snoitacilpxe sel eril ed tnavA .noitucxed elpmexe nud ngapmocca ,++C egagnal ne em margorp ed elpmexe nu icioV
#include <iostream> #include <cmath> using namespace std ; main() { int i ; float x ; float racx ; const int NFOIS = 5 ; cout << "Bonjour\n" ; cout << "Je vais vous calculer " << NFOIS << " racines carrees\n" ; for (i=0 ; i<NFOIS ; i++) { cout << "Donnez un nombre : " ; cin >> x ; if (x < 0.0) cout << "Le nombre " << x << "ne possede pas de racine carree\n " ; else { racx = sqrt (x) ; cout << "Le nombre " << x << " a pour racine carree : " << racx << "\n" ; } } cout << "Travail termine - au revoir " ; } Bonjour Je vais vous calculer 5 racines carrees Donnez un nombre : 8 Le nombre 8 a pour racine carree : 2.82843 Donnez un nombre : 4 Le nombre 4 a pour racine carree : 2 Donnez un nombre : 0.25 Le nombre 0.25 a pour racine carree : 0.5 Donnez un nombre : 3.4 Le nombre 3.4 a pour racine carree : 1.84391 Donnez un nombre : 2 Le nombre 2 a pour racine carree : 1.41421 Travail termine - au revoir

++C emmargorp ed elpmexe reimerP

.selabolg selbairav ed srola arelrap no : noitcno f etuot ed srohed ne selbairav sed rini fd tuep nouq )snoitcno f xua rcasnoc ertipahc e l sn ad( t ne mel ag sn orr ev s u oN .)n iam no it cn o f al ed se la co l selba ir av se d t nos elp m ex e erton snad seinifd selbairav sel ,rueugir etuot ne( selacol selbairav elleppa sel no ; noitcno f enu snad seini fd selbairav sel setuot ruop emm ed ari ne lI .)n iam noitcno f al ed tubd ua : erid ttulp tiarved no( emmargorp ud tubd ua sepuorger snova sel suon ,icI .sesilitu tnemevitceffe ertd tnava ertarappa tneviod sellE .seriotagilbo tnos s el b air a v s e d s e p y t s e d s n oi t ar al c d s e l , sl e u t c a s e g a g n a l s e d tr a p ul p a l s n a d e m m o c , + + C n E . e i fi d o m er t s a p t u e p e n et n at s n o c e n u d r u el a v a l , e l b a ir a v e n u t n e m er i ar t n o C . 5 r u el a v al tna ya ,reitne ep yt ed etnatsnoc enu tse SIO FN euq euqidni noitaralcd e mirtauq al ,ni fnE .stnattol f sep yt srueisulp etsixe li ++C neuq snorrev suon ,erocne L .)sler serb mon ed noita mixorppa( stnattol f serbmon sed rinetnoc senitsed tnos selleuq erid --tsec ,taolf ep yt ed tnos xcar te x selbairav sel euq tnesicrp snoitaralcd sertua xued se L .sre it n ed sep yt srueisulp etsixe li ++C neuq snorrev suoN .)s fitaler( sreitne serbmon sed rinetnoc enitsed tse elleuq erid--tsec ,tni ep yt ed tse i e mmon elbairav al euq esicrp eri merp a L . s n o it ar a l c d s e d t n os
const int NFOIS = 5 ; float racx ;

: s n oi t cur ts ni er ta uq s e L

.s n oi tc n o f s ert u a d ri n et n oc si a m aj tuep en noitcno f enuuq snorrev suon ,ehcnaver nE .)elpmexe erton ed sac el tsec( scolb sertuad rinetnoc e m m-iul tuep colb nuuq zetoN .++C noitcno f etuot ruop e m m ed ari ne li ; colb nud te ett-ne nud eutitsnoc tse n iam noitcno f al euq erid no-tuep isniA . colb nu tne mro f sedalocca sec ertne seutis snoitcurtsni sel euq tid nO . } te { sedalocca sel rap ti mild tse lI .ett-ne tec ed etius al tneiv tid tnemerporp )lapicnirp( e mmargorp e L .sopmi tse )niam( mon el tnod noitcno f enu e mmoc tiaf ne artarappa lap -icnirp em margorp el ,++C ne ,isnia ; ett-ne let nu tne melag tnedssop ic-sellec euq snorrev suon ,++C ne snoitcno f sed erutircl snoredroba suon euqsro L .)niam( lapicnirp emmarg -orp el tia f ne tse etius as tircd ares iuq ec euq esicrp ellE . ett-ne nu e mmon es : e n gi l a L .sengil serimerp siort sed elr el rus niol sulp uep nu snordneiver suoN
main()

1.3 Dclarations

1.2 Structure dun programme en langage C++

float x ; int i ;

1 - Prsentation par lexemple de quelques instructions du langage C++

13

: r es il a r , c o l b u d n oi t u c x e e u q a h c e d n i f al ; colb ec tnavius noitcurtsnil ressap nonis ,uqidni colb el retucxe ,etia fsitas tse elle is : n oi ti d n o c a l r e n i m a x e ,) e l c u o b e d r u o t( c ol b u d n o it u c x e e ll e v u o n e u q a h c t n a v a : r esi la r ,n o it it pr e tt ec r ec n e m mo c e d tn a va : s et n av i us se n gi sn o c s el t n at ceps er ne ,etius as tnarugi f ) } te { sedalocca sed rap timild( colb el retpr ed tse elr noS
: r o f n oi t c ur ts ni l si li t u s n o v a s u o n , i c I .) el c u o b e n u iss u a tid no( noititpr enu resilar ed snoa f srueisulp etsixe li ,++C ne ,snorrev el suon e mmoC
for (i=0 ; i<NFOIS ; i++) i = 0 i < NFOIS

."n\seerrac senicar " noita mrofnil ; 5 riovas ,etnatsnoc ettec ed ruelav al tia f ne erid--tsec ,SIO FN noita mrofnil ; "reluclac suov siav eJ" noita mrofnil : n ar c l s e t n er f f i d s n o it a mr o f ni si or t ei o v n e n o i c i u q e c n er f f i d et t e c c e v a e t n e d c r p al el b m ess er : etnavius noitcurtsniL .reilucitrap emsihp - ar g e d s a p t n a d ss o p e n er i d- - ts e c , el r t n o c e d st i d s er t c ar a c e d er b m o n n i atr e c n u r u o p ) er tc ara c n u d i vi us \( e p y t e c e d n o it at o n e n u t i o vr p + + C , el ar n g er i n a m e d ,e u q snorrev suoN .etnavius engil al egassap el euqovorp ,narcl yovne tse liuqsrol ,iuq ert -carac nu erid--tsec ,engil ed nif ed ertcarac nu etnesrper elle : ellennoitnevnoc tse n \ noit -aton a L .)sertcarac ed etius( sertcarac ed enahc enu retimild tnevres stemelliug se L : n o it a m r o f n i l t i o e r tuoc : isnia etrpretni ert tuep noitcurtsni ettec ,cnod ,icI .statlusr sel tnehci ffas elleuqal snad ertne f al engisd tuoc euq snottemda ,tnatsnil ruoP .eitros ed tolf nu rus noita m -ro fnil ed re yovned tnatte mrep ruetarpo nu tse << euq te eitros ed tol f nu tse tuoc euq snorrev suon : tnemerueirtluuq setiudortni tnores en iuq secnassiannoc sed tiaretissecn : noitcurtsnil ed elliatd noitatrpretniL
cout << "Bonjour\n" ; "Bonjour\n" cout << "Je vais vous calculer " << NFOIS << " racines carrees\n" ;

14

1.5 Pour faire une rptition : linstruction for

1.4 Pour crire des informations : utiliser le flot cout

Gnralits sur le langage C++ CHAPITRE 2

++

; ) x ( t r q s = x ca r : euq ellet noitcurtsni enU 1

se uqrameR

.tnemugra ne t e ms n ar t i u l n o u q e t n at t ol f r u el a v e n u d e rr a c e n i c ar a l e d r u e l a v al t i nr u o f t r q s n o it c no f a L .elituni dner el )noitidnoc al tnerdacne iuq seshtnerap ed ecnesrp al ecrg t nem - m a t o n ( f i n o i t c u r ts n i l e d e x a t n y s a L . n e h t t o m e d s a p s i a m e s l e t o m n u e t s i x e l i u q z e t o N : c o l b el , i c i , eri d- -t s e c , e s l e t o m e l t n a vi us n oi t c urt s n il e t u c x e n o , e ss u a f ts e el l e i S : erid--tsec ,etnavius noitcurtsnil etucxe no ,eiarv t s e n o it i d n o c e t t e c i S . 0 . 0 < x n o i t i d n o c a l r u s e d n o f x i o h c e d n o i t c u r t s n i e n u t n e u t i t s n o c
if (x < 0.0) cout << "Le nombre " << x << "ne possede pas de racine carree\n " ; else { racx = sqrt (x) ; cout << "Le nombre " << x << " a pour racine carree : " << racx << "\n" ; } cout << "Le nombre " << x << "ne possede pas de racine carree\n " ; { racx = sqrt (x) ; cout << "Le nombre " << x << " a pour racine carree : " << racx << "\n" ; }

: s e n gi l s e L

. eppar f e d e t ua f ed sap tiaf en liuq snoresoppus suon ,em m eD .noitapicitna rap snoita mro fni srueisulp rinruo f tuep liuq snorrev suon ,drat sulP .reivalc ua ertne nos edilav ruetasilitul euq snoresoppus suon ,icI .x elbairav al snad ecalp nol euq taolf ep yt ed ruelav enu ne ritrevnoc al te reivalc ua sertcarac ed etius enu eril : isnia etrpretni ert tuep noitcurtsni ettec euq snottemda ,tnatsnil ruoP .ertned tolf nud ritrap noitamro fnil ed )eril ed( eriartxe d tnattemrep ruetarpo nu tse << euq te reivalc ua icossa ertned tol f nu tse nic euq snorrev suon : tne merueirtluuq seiudortni tnores en iuq secnassiannoc sed tiaretissecn : colb ud noitcurtsni ednoces al ed elliatd noitatrpretnil ,erocne L .ni f al engil ed tnemegnahc ed uvrp sap snovan suon iciuq zetoN .:erbmon nu z ennoD egassem el tne melp mis ehci ffa rof noitcurtsnil rap tpr colb ud noitcurtsni eri merp a L
cin >> x ;

.sio f qnic tpr ares colb erton iciuq ze yov suov ,evitinifd nE : etnelaviuq tse iuq ++C ua erporp noitaton enud l tigas lI
15
i = i + 1

1.7 Pour faire des choix : linstruction if 1.6 Pour lire des informations : utiliser le flot cin
1 - Prsentation par lexemple de quelques instructions du langage C++

.stnadnopserroc ett-ne sreihci f sel reroprocnid elbar frp tse li ,seini fd -rp snoitcno f sec ed setcaxe snoitaralcd sel rus regorretnis ed euq ttulP .seini fdrp snoit -cno f sel ruop tnemelag tuav aleC .eralcd tne melbalarp t tia elleuq eriassecn tse li ,e mmargorp nud eitrap enu snad noitcno f enu zesilitu suov euq sd ,elarng erinam enuD .trqs r i l uc itr ap ne c n o d ,) C e d s e t ir h( s e u q it a m h t a m s n o it c n o f x u a s e v i t a l er s n o i t ar a l c d s e d t n ei t n o c h t a m c ; )s er il u ci tra p s n o it c n o f se d em moc srdisnoc tia f ne tnos sliuq drat sulp arrev no tnod( >> te << sruetarpo xuauq isnia ,tuoc te nic ,reilucitrap ne ,cnod stol f xua sevitaler snoitaralcd sed tneitnoc maertsoi : e u q z e t o n , t n a t s ni l r u o P .tnemerueirtluuq elbisneh -rp moc tnemetlpmoc ares en elr rue L .h tamc te maertsoi sreihci f sel snad seutis )++C ne( snoitcurtsni sed )noitalip moc tnava( eriudortnid tia f ne tnednamed sevitcerid xued seC .ici tia f snoval suon em moc ,noitcno f etuot tnava ,tubd ua recalp sel ed elbar frp tse li ,elarng erina m enuD .)edccus iul iuq emmargorp ud eitrap al uq euqilppas en evit -cerid enu siam( etniartnoc enucua si muos tsen em margorp ud nies ua tnemecalp me rue L .engil ed tubd ne recne mmoc tne meriotagilbo tneviod selle te engil rap enud nosiar set -irc ert tneviod ,em margorp ud etser ua tnemeriartnoc ,sevitcerid seC .) ruetalipmocrp sio frap( ruessecorprp mmon em margorp nu rap ,em margorp ud )noitalipmoc( noit -cudart al tnava etp moc ne sesirp tnores iuq sevitcerid ed tigas lI .serilucitrap uep nu tnos : e m mar g or p er t on e d se n g il ser i mer p x ue d se L
#include <iostream> #include <cmath>

. s u s s e d- i c s e m r o f s i or t s e d e l l e u q a l e tr o p m i n e d r i g a s a rr u o p l i ,s e r i a t n e m l p p u s s n o i s i c r p s n as , n o i t c u r ts n i d s n or e lr a p s u o n e u qs r o L .se mro f siort sed elleuqal etropmin ,ru ot ruel ,rinet noc tnevuep selleuqsiup evisrucr n oitini fd en u tno serinre d xued se L .) } t e { r a p s t i m il d( s c o l b s e d ; rof uo fi euq sellet noitarutcurts ed snoitcurtsni sed ; elugriv-tniop nu rap tnemeriotagilbo seni mret ,selpmis snoitcurtsni sed : s n o i t c ur t s n i d s e tr os s i or t e d e s o p s i d + + C , e l ar n g e r i n a m e n u D 2 .s e r o b a l s u l p s e mr o f s e d er d n er p t u e p n o i t - a t c e f f a l + + C n e u q dr a t s u l p s n orr e v s u o N . l a g e n g i s u d e t i o r d e u t is n o is s er p x e l e d r u e l a v a l x c a r e l b a i r a v a l e n n o d e l l e : n o i t a t c e f f a d e u q i ss a l c n o i t c ur t s n i e n u t s e
16
Gnralits sur le langage C++ CHAPITRE 2

1.8 Les directives destination du prprocesseur

ra hc ep yt ud no itas i li t U
opration souhaite (+ ou *) ? * donnez 2 nombres entiers : 12 5 leur produit est : 60

. t n a d n o ps err o c t at l us r e l sr o l a e h c -if fa li ; sreitne serbmon xued rinruo f ed siup ,noitacilpitlu m al uo noitiddal imrap noitarpo e n u ri si o h c e d r u e t as i li t u l e d n a m e d l I . er t c ar a c e p yt u d n o it asi l it ul r er t n o m s u o v nitsed ,noitucxed selpmexe xued ed ngapmocca ,e mmargorp ed elpmexe dnoces nu icioV

. ) ! i ni f d t erocne sap an iuq s mon ed ecapse nu ecner fr zere f suov rac ruerre enu zerdneitbo suov ,ett-ne sreihci f sed noitaroprocnil tnava gnisu noitcurtsnil zecalp suov is ,noitnetta( dts s mon ed ecapse tec snad ecalp es nol euq reuqidni tnemsicrp tres gnisu noitcurtsniL .dts smon ed ecapsel tnenneitrappa maertsoi reihci f el snad sralcd selobm ys sel euq zen -eter ,tnatsnil ruoP .etius al rap eidut ares smon ed ecapsed noiton etteC .smon semm sel tnesilitu seuqhtoilbib srueisulp dnauq resop es tnevuep iuq semlborp sel relgr ed ,reiluc -itrap ne ,cnod te e mmargorp nud eitrap eniatrec enu selob m ys sed etrop al erdniertser ed temrep ellE .) ecapseman( smon ed secapse d noiton al tiudortni a ++C ed e mron a L

.elbatucxe edoc ed sap tnesiudorp en snoitaralcd sel o erusem al snad ,tnang erug tsen alec ; nnod e mmargorp nu snad setuot sap zeresilitu sel en suov ,tnemelarnG .snoitcno f srueisulp sevitaler snoitaralcd sed tneitnoc ett-ne reihci f e m m nuuq zetoN
17

1.10 Exemple de programme utilisant le type caractre

1.9 Linstruction using

opration souhaite (+ ou *) ? + donnez 2 nombres entiers : 25 13 leur somme est : 38 #include <iostream> using namespace std ; main() { char op ; int n1, n2 ; cout << "opration souhaite (+ ou *) ? " ; cin >> op ; cout << "donnez 2 nombres entiers : " ; cin >> n1 >> n2 ; if (op == +) cout << "leur somme est : " << n1+n2 << "\n" ; else cout << "leur produit est : " << n1*n2 << "\n" ; }

1 - Prsentation par lexemple de quelques instructions du langage C++

. esohc ed ecalp al titne emret el resilitu up snoirua suoN .fitcitser port tneived emret ec ,iciuq ,rialc tse lI .emmargorp nu rap slupinam stejbo sed relrap up snoirua suon ,O.O.P ed etxetnoc nud srohed nE .1

.)s fi t a ci f i n gis t n ei at s er t c ar a c srei merp 13 sel slues ,C ne( sruetaci fitnedi sed rueugnol al rus esp en noitcirtser enucuA .stner f fid stejbo xued tnengisd engiL te engil sruetaci fitnedi sel ,++C n e ,i s n i A .s et n el a vi u q s a p t n os e n si a m s e s ir ot u a t n o s s e l u cs u ni m s e l t e s e l u cs uj a m s e L
lg_lig valeur_5 _total _89

: stcerroc sruetaci fitnedi seuqleuq icioV .ruetaci fitnedi nud tubd ua ertarappa cnod tuep lI .erttel enu em moc rdisnoc tse )_( ngiluos ertcarac e L : s er tt e l s el e nr e c n o c i u q e c n E .erttel enu tne meriassecn tnat xue ertned rei merp el ,serffihc sel uo serttel sel i mrap sisiohc sertcarac ed etius enud smro f tnos sli ,segagnal sed trapulp al snad e mmoC .)sorcam ,otog noitcurtsnid setteuqit ,sep yt ,noinud uo erutcurts ed ,essalc e d s er b m e m ,s n oi tar m u n u o s n o i nu , ser ut c urts , st ej b o : + + C e l r a p se l u pi n a m se so h c sertua sel tnemerueirtlu snorertnocner suon( snoitcno f sel te selbairav sel sellet ,emmarg -orp el rap selupinam sesohc setner ffid sel rengisd tnevres sruetaci fitnedi se L
1

.seriatne mmoc sed te sruetaraps sed egasul ed euq isnia ,snoitcurtsni sel tirc no leuqel snad erbil ta mro f ud , slc-stom sel te sruetaci fitnedi sel elleppa nol euq ec ed tne msicrp snorelrap y suoN .++C ne e mmargorp n u d er ut ir c l s n a d t n a n e vr e t ni s el ar n g s e l g r e d er b m o n n i atr e c n u es o p x e e h p ar g ar a p e C

.+ sap tsen ruetasilitul rap inruof ert -carac el euq srol sd ,tiudorp el eluclac emmargorp erton ,tirc t a liuq let ,euq zeuqrameR .sertcarac setnatsnoc sel ruop te ) " ed tigas li( senahc setnatsnoc sel ruop sruetimild sem -m sel sap esilitun ++C euq neib zetoN .ertcarac etnatsnoc enu etnesrper + noitaton a L .)! noitaci fingis ertua enu ceva siam si mda tiares ,drat sulp snorrev el suon emmoc ,ici ,iuq te noitatce f fal etnesrper iuq = non te( == engis el rap tiudart es tilagd noitaler a L : e uq ze to N . p o s n a d u n e t n o c ertcarac el tnavius ,serbmon xued ed tiudorp el uo e mmos al rehci ffad te mrep fi noitcurt -sniL .po snad regnar el ed te reivalc ua ertcarac nu eril ed te mrep po >> ni c noitcurtsniL .)! erianib e mrof suos ,rs neib ,doc( euqnocleuq ertcarac nu rinetnoc enit -sed tse elbairav ellet enU .)rah c( ertcarac ep yt ed tse po elbairav al euq snoralcd suon ,icI
18
Gnralits sur le langage C++ CHAPITRE 2

2.1 Les identificateurs

2 Quelques rgles dcriture

: tnedcrp e mmargorp erton tnesrp )la m( ert tiarruop tnem moc ze yov ,elpmexed ertit .selbisil uep sem margorp sed rituobad ,edrag dnerp yn nol is ,etsixe euqsir el ,tnem matoN .seitrapertnoc sed edssop egap ne esim ed trebil ettec ,udnetne neiB .tnediv elbmes iuq ec ,engil ed ni f enu rap x u e d n e p u o c ert t u e p e n r u et a c i fi t n e di n U . e n g il e l u es e n u d r u e ir t ni l s e tir c ert t n e m - e v it ar p mi t n e v i o d s e t n a ts n o c s e l l e t e d ; s e ti dr et n i t n os s e l l e o s e n a h c s et n ats n o c s el snad fuas ,ecapse nuuq ertit e mm ua ,ruetaraps ed iulec tsen ec is ,reilucitrap elr ed sap tneuoj en engil ed sni f se L .zetiahuos el suov euq snoitcurtsnid tnatua retrop moc tuep engil em m enu te ,sengil ed euqnocleuq erbmon nu rus erdnets tuep noitcurtsni enu ,reilucitrap nE .erbil tnemetiafrap egap ne esi m enu esirotua ++C el ,stnecr segagnal sel suot em moC

: tne mmer ffidni erirc zerruop suov ,ehcnaver nE


intx,y

: erir c t ne me v it ar p m i zer ve d s u o v , is ni A .)e mmargorp ud tilibisil al eroilma alec euq -itarp neuq neib( seriatnemlppus secapsed riovrp ed eriassecn sap srola tsen li ,euqnoc - l e u q r u et ar a p s n u es o p m i e x a t n y s a l e u q s d , e h c n a v er n E . e n g il e d n i f e n u r a p ti os , e c a ps e nu rap tios sraps ert tnemevitarp mi tneviod ) } { ] [ ) ( * ; = , : euq slet( reilucitrap engis n uc u a es op m in e xa tn ys al s le uqs el ert ne s f iss ec c us sr ue ta ci f it n ed i xu e d ,e m m arg orp nu snad ,isniA .sellerutan ertarap cnod tnov selgr sel o ++C ne emm ed tnemisauq av ne lI . e n g il e d n i f e n u u o n o it a ut -cnop ed engis nu ,ecapse nu rap sraps tnos stom stnerffid sel ,etirc eugnal ERTON snaD

.H exennA ne ,euqitbahpla erdro rap essalc ,etlp moc etsil al zerevuort ne suoV .sruetaci fitnedi e mmoc ssilitu ert s a p t n e v u e p e n t e i n i f d n ei b e g a s u n u e g a g n a l el r a p s vr es r t n o s s l c-s t o m s ni atr e C

2.4 Le format libre

2.3 Les sparateurs

2.2 Les mots-cls

#include <iostream> #include <cmath> using namespace std ; main() { int i ; float x ; float racx ; const int n, compte, total, p int n,compte,total,p int x,y

: tne melbisil sulp uo

: n o n te

2 - Quelques rgles dcriture

19

: elbisil uep siam lagl elpmexe nu ni fne icioV


int i ; float x ; float racx ; /* compteur de boucle */ /* nombre dont on veut la racine carre */ /* racine carre du nombre */

: selbairav setner ffid sed elr el rini fd ed tnettemrep ,noitaralcd ed noitcurtsni enud nies ua sutis ,iuq seriatnem moc ed elpmexe nu icioV
/* ============================================= * commentaire quelque peu esthtique * * et encadr, pouvant servir, * * par exemple, den-tte de programme * ========================================== */

: seriatnem moc slet ed selp mexe seuqleuq icioV . e m m ar g or p u d t i li b isi l e n n o b e n u s e c i p or p st n e m e c a l p m e s e d ar et i m i l e s no ,tnadnepec ,larng nE .sirotua tse ecapse nu o emmargorp ud tiordne tuot ertarappa tnevuep slI . /* te */ selobm ys sel ertne scalp seuqnocleuq sertcarac ed s mrof tnos slI .)++C rap stiudortni( engil ed ni f ed seriatne mmoc sel ; C egagnal ud stirh , serbil seriatne mmoc sel : s er i a t n e m m o c e d s e p yt x u e d ets i x e l I . n oi t a li p m o c as r us e c n e di c ni e n u c u a tnon iuq te em margorp ud sruetcel xua snitsed s fitacilpxe setxet ed tigas lI .ecruos se m - margorp sov snad seriatnem moc ed ecnesrp al esirotua ++C ,ulov egagnal tuot e mmoC
2.5.1 Les commentaires libres

tnesrp lam emmargorp ed elpmexE


int NFOIS = 5 ; cout << "Bonjour\n" ; cout << "Je vais vous calculer " << NFOIS << " racines carrees\n" ; for (i=0 ; i<NFOIS ; i++) { cout << "Donnez un nombre : " ; cin >> x ; if (x < 0.0) cout << "Le nombre " << x << "ne possede pas de racine carree\n " ; else { racx = sqrt (x) ; cout << "Le nombre " << x << " a pour racine carree : " << racx << "\n" ; } } cout << "Travail termine - au revoir " ; }

20

2.5 Les commentaires

Gnralits sur le langage C++ CHAPITRE 2

/* commentaire stendant sur plusieurs lignes de programme source */ /* commentaire fantaisiste &{<>} ?%!!!!!! */ /* programme de calcul de racines carres */

ec tnanrecnoc )tne mennorivne leuq etropmin tnauqilppas( selarng snoitacidni seuqleuq ic i s n oss i nr u o f s u o v s u o N . ze ll ia v art s u o v l e u q el s na d n o it a m m ar g or p e d t ne m e n n or i v n el ed tne mellerutan dnepd ++C ne e mmargorp nu resilitud te reppolevd ed erinam a L

. e m m- i u l e m m ar g - or p u d e t x e t u a tr o p p ar r a p s t n a d n o d er s er i a t n e m m o c s e l r e t i v d e l b ar f r p ar es l i , t n e m e l ar n g , i s n i A . n o i t a m m ar g o r p e d s e l d o m s e d e m m o c ,s a c n u c u a n e , t e s e u q - i t c a d i d s e l p m e x e s e d s e m m o c s r d i s n o c er t t n e v i o d s e r i a t n e m m o c e d s e l p m e x e s o N 3 . t n i o p u a e s i m e d e s a h p n e ) s er i a t n e m m o c s e d t n e m e l l e u t n e v t n a n e t n o c( s n o i t c ur t s n i d e l b m es n e n u r e b i h n i r u o p / * t e * / l e p p a er i a f sr o l a t u e p n o , e n g i l e d n i f e d er i a t n e m m o c e l t n e m e u q i t a m t s y s e s i l i t u n o l i S 2 .) et i d t n e m er p or p n o it al i p m o c a l s a p c n o d enrecnoc en li( ruessecorprp ua senitsed sevitcerid sel enrecnoc sac ertuaL . fitaci fingis el r n u e u o j e n gi l e d n i f al o s a c x u e d s e d n ul e u t its n o c e n g i l e d n i f e d eri at n e m m o c e L 1
.4 eitrap te 3eitrap ,2eitrap cnod enrecnoc lI .engil al ed ni f al uqsuj dnets // rap tiudortni eriatne mmoc el

: s na d ,e m m e D .snoitcurtsni xua tnanetrappa em moc rdisnoc tse 3eitrap euq sidnat ,seriatne mmoc sed tnos 2eitrap te 1eitrap cnod ; /* niahcorp uauq eni mret es en */ rap trevuo eriatne mmoc el : s n a d , e u q z e t o n , s a c e c s n a D . e n gi l e d n i f ed seriatnem moc sel te serbil seriatne mmoc sel )! non uo tnemeriatnolov( rel m zevuop suoV
cout << "bonjour\n" ; /* formule de politesse */ /* partie1 // partie2 */ partie3

: e u q el l e t e n gi l e n u , t e f f e n e ; tirucs ed te tro fnoc ed torcrus nuuq etroppan tilibissop ellevuon ettec euq zetoN .eriat -ne mmoc nu tse engil al ed ni f al te // ertne utis tse iuq ec tuot ,sac ec snaD .// : sertcarac xued sel rap stiudortni tnos slI .engil enud ni f al tnecalp es sli ,euqidnil mon ruel em moC
2.5.2 Les commentaires de fin de ligne

3 Cration dun programme en C++


se uqrameR
partie1 // partie2 /* partie3 */ partie4

: isnia etirc ert sruojuot tuep

cout << "bonjour\n" ; // formule de politesse

int /* compteur de boucle */ i ; float x ; /* nombre dont on veut la racine carre */ float racx ; /* racine carre du nombre */

3 - Cration dun programme en C++

21

. e t n a d n e p d n i n o a f e d s l i p - m o c ,s t e j b o s el u d o m s t n er f f i d s n ei l e d n o it i d l e d t n e m o m u a r el b m ess ar e d el b iss o p t n e m -elag ares suov li ,++C ed eraps noitalipmoc ed stilibissop xua ecrg ,euq snorrev suoN .sreihci f srueisulp uo nu ne ,enrecnoc noitatnemlpmil tnavius ,esinagro stejbo seludo m e d n o it c e ll o c e n u ts e e u q ht o il b i b et t e c e u q z et o N .s eri ass e c n st ej b o s e l u d o m s e l dr a d n at s euqhtoilbib al snad rehcrehcer rellad euq sneil ed ruetidl ed elr el tnemevitcef fe tseC .>> te << sruetarpo sed liavart ua t n a d n o p s e r r o c s n o i t c n o f s e d , t r q s n o it c n o f a l e d : t i ar i g as l i ,t n e d c r p e l p m e x e ert o n s n a d ; nioseb a li tnod dradnats euqhtoilbib al ed snoitcno f sel sniom ua ,te ffe ne ,areuqna m iul lI .elbatucxe tnemetcerid sap tsen ruetalipmoc el rap isnia rc tejbo eludo m nu ,larng nE

.tejbo eludom ed mon el etrop noitalip moc al ed tatlusr e L .r u ess e c or p r p el r a p i nr u o f ++C etxet ud enihca m egagnal ne noitcudart erid--tsec ,etid tnemerporp noitalipmoC .ru ess ec -orprp el rap inruo f tatlusr el ertannoc ed ,zetiahuos el suov is ,sruelliad tnettemrep suov noitammargorp ed stnemennorivne sed trapulp al : ecruos e mmargorp nuuq ertit emm ua ,etxet iarv nud sruojuot tigas liuq neib zetoN .rup ++C ne ecruos em margorp nu ,tatlus -r ne ,tiudorp lI .)# ertcarac nu rap tnecne mmoc selleuq tiaf ua tannocer sel li( tnenrec -noc el iuq sevitcerid sel tne melpmis etucxe reinred ec : ruessecorprp el rap tnemetiarT : s epa t xu e d ti a f ne etropmoc noitalipmoc ed noitarpo ettec ,ruessecorprp nud ecnetsixel ed unet etpmoc ,)C ne e mmoc( ++C nE .ruetalipmoc mmon e mmargorp nu leppa tnasia f ne ,enihca m egagnal ne )ecruos reihci f nud unetnoc el uo( ecruos em margorp el eriudart etsisnoc ellE

.ppc noisnetxel tnoretrop ecruos sreihci f sel ,++C ne ,spmet ud trapulp al ; ) ep yt nu sio frap ,uo( noisnetxe enu elleppa nouq )3 sniom ua( sertcarac ed epuorg nu rap sirtcarac ert ,mon nos ed sulp ne ,tuep reihci f nu ,l ar n g n E .sr ei h ci f se d n o i ta ni m o n d e d s n o it n e v n o c s er p or p se s e dss o p e m ts ys e u qa h C . ecruos reihci f arem mon nol euq reihci f nu snad vresnoc ares etxet ec ,larng nE . ecruos e mmargorp em mon nouq em margorp nud etxet ud eitrap uo tuot ,reivalc nud ritrap ,rerc etsisnoc ) eisias siofrap issua tid no( em margorp ud noitidL

. s n e il e d n oi t i d t e n o i t a li p m o c , e m m ar g or p u d n o it i d : r i o v as , e m m ar g or p n u d n oi t a r c a l e d s e p at s e d n ar g s el r e l e p p a t i arr u o p n ol e u q
22
Gnralits sur le langage C++ CHAPITRE 2

3.3 Ldition de liens 3.2 La compilation 3.1 Ldition du programme

.) s n o it c n o f s e t n er f fi d s e c e d e l b a t u c x e e d o c el t n or d n e it n o c i u q st ej b o s e l u d o m sel ceva ,ett-ne sreihci f sed snoitaralcd sec sap zedno fnoc en ,noitnetta( seinifdrp snoit - c n o f x u a s e v it a l er s n o it ar a l c d s e d ,s es o h c s er t u a ert n e , t n e tr o p m o c sr ei h ci f s e C . e t t- n e sreihci f sed elleppa nol euq ec ed tnanevorp )++C egagnal ne( snoitcurtsni sed eriudortnid ruessecorprp ua rednamed zeivuop suov , edul cn i# evitcerid al ecrg ,euq uv snova suoN

.++C ne noitam margorp ed tne mennorivnel ed tnasopmoc euqnocleuq nu leppa eriaf ed eriassecn tios liuq snas tucxe ert tnemerueirtlu arruop li ,reihci f nu snad gnar tse elbatucxe emmargorp ec iS .enihcam egagnal ne snoitcurtsnid emonotua elbmesne nu erid--tsec ,elbatucxe em margorp nu em mon nol euq ec tse sneil ed noitidl ed tatlusr e L
23

3.4 Les fichiers en-tte


3 - Cration dun programme en C++

ne ert ruop )stetco srueisulp ed uo nud( erio mm al ed tnemecalpme nud unetnoc el ert -annoc ed sap ti ffus en liuq tiov no ,snoitidnoc sec snaD .e mro f ettec suos ert ar v ed ,erutan as tios euq elleuq ,noitamro fni etuoT .erianib e mro f suos se mirpxe snoitamro fni sed euq retiart te retnesrper tias en ,elleutca eigolonhcet as ed unet etpmoc ,ruetanidroL .esserda nos em mon nouq ec rap rper tse tetco euqahc te ,)stib 8( stetco ne sp -uorger tnos stib se L .stib semmon serianib snoitisop ed elbmesne nu tse elartnec eriomm aL
e d oc

esab ed s epyt

.eluocd ne iuq ep yt ed noiton al te ruetanidro nu snad etnesrper tse noita mro fnil tnod erinam al tnanrecnoc leppar ferb nu eria f ed snosoporp suov suon ,tnadnepec ,tnavarapuA .snoitarmun sel uo sruetniop sel e mmoc selpmis sep yt sertuad ; ses sa lc se l t uo tr us te ,s n o in u se l u o ser ut c urts se l , xu ae lba t se l e m m o c s ru tc ur ts sep yt e d : ess i gas li u q , s vir d s e p y t s ti d ,s ert u a s el s u o t s t i ur ts n o c er t t n orr u o p s l e u qs e d ri tr a p s eri al a cs s e p y t s e d t i g as li ; + + C e g a g n a l u d s e l el l e p p a n o l e u q e c l i at d n e s n or e i d u t suon ,icI .)non uo ep yt emm ed( sruelav srueisulp tnenneitnoc ,nnod tnatsni nu ,iuq selb -airav sed tnednopserroc iuq ) sgrga issua tid no( srutcurts sep yt xua tnesoppos slI .ruelav elues enu tneitnoc ep yt let nud elbairav enu ,nnod tnatsni nu ,rac , selpmis uo serialacs stid tnevuos tnos srtnocner jd snova suon euq te , s e p yt s e L
taolf tn i rah c

1 La notion de type

Les types de base de C++

gnol

.) ne regrba tuep nouq( tni gn ol ; )tnedcrp ertipahc el snad rtnocner snova suon euq iulec tsec( tni ;) ne regrba tuep nouq( tni tr ohs : s t na vi us s l c-st o m s el r ap s e n g is d ,sr ei tn e d setner ffid selliat siort uqsuj revuort essiup no ,ennod enihcam enu rus ,euq tiovrp ++C
trohs

l oo b

.) lc-tom( xuaf tios ,iarv tios tse ruelav al tnod erid--tsec ,senneloob sruelav ; )rahc lc-tom( sertcarac ; )elbu od uo ta olf lc-to m( stnattolf serb mon ; )tni lc-tom( sreitne serb mon : retnesrper ed tnette mrep sliuq snoitamro fni sed erutan al ed noitcno f ne seirogtac ertauq ne tnessitrapr es ++C egagnal ud esab ed sep yt se L .reuqovd snonev suon euq semlborp sel )sesohc sertua ertne( relgr tres ,sulov segagnal sel snad etsixe elleuq ellet ,ep yt ed noiton al ,elarng erinam enuD . etnattol f emro f suos sdoc serb mon xued te eritne emrof suos sdoc serb mon xued rennoitidda ruop seuqinortcel stiucric se m m xua leppa sap tia f en no ,elp mexe raP .)enihcam egagnal ne( snoitcurtsni sennob sel ervu n e ert t e m r i o v u o p e d n i f a y ol p m e t a e g a d o c l e u q ri o v a s ar d u a f li ,s n o it a mr o f ni x u e d r e n n o it i d d a r u o p , el p m e x e r a P . n o it a mr o f n i e tt e c r e t i art e d el b iss o p s a p e m m ar es e n l i ,larng ne ,tse sulp iuQ .edoc t a elle tnod erinam al sap tannoc en nol euq tnat erianib noitamro fni enu noitaci fingis enu reubirttad elbissop sap tsen liuq cnod dnerp moc nO .. . u o ,st et c o 4 r us d oc le r er b m o n n u d u o ,s te tc o 2 r us d o c r e it ne er b m o n n u d u o e ni h ca m noitcurtsni enud eitrap enu retnesrper tne melag tnevuep slI .)IICSA edoc ud sac el snad ,M elpmexe rap( nnod ertcarac nu erdnopserroc eria f iul snovuop suon ,sertcarac sel ret -nesrper ruop enrecnoc enihca m al rus e yolpme noitnevnoc al snossiannoc suon is ,sac ec snad ; ertcarac nu retnesrper ert-tuep tnevuep sussed-ic stib tiuh sel ,snoitidnoc sec snaD .erianib ne sedoc ert ,etp moc ud tuob ua ,tnorved )...sodiv ,snos ,sega mi ,seuqihparg ,enihcam egagnal ne e mmargorp ed snoitcurtsni ,sertcarac ,sexelp - moc serb mon ,sler serbmon ,sreitne serb mon( snoitamro fni sel setuot ,te ffe nE ? erbmon nu li-tiaretnesrper alec iouqruop siaM .)erbmon ec ed 2 esab ne noitatnesrper al dnopserroc sussed-ic fitom el euqsiup( reitne erb mon el etnesrper alec euq rerdisnoc zevuop suov
77

: tnavius erianib fitom el tneitnoc tetco nuuq zevas suov is ,elpmexe raP .noitaci fingis enu reubirtta iul ed eruse m
26
Les types de base de C++ CHAPITRE 3

2.1 Les diffrents types usuels dentiers prvus par C++

2 Les types entiers


01001101

.)ennod reitned elliat enu ruop setrevuoc sruelav sed egalp al rus tinu enud ecnerffid ,0- te 0+ : orz ud snoitatnesrper xued( seruenim tnetser secnerffid sel ,emron al rap sesopmi setniartnoc sel retcepser ed tneiatnetnoc es iuq snoitatnemlpmi )senneicna( sel snaD .ellesrevinu rineved dnet euqinhcet ettec ,emron al rap tnemelatot esopmi non euq neiB .2 .stimilc ett-ne reihcif el snad seinifd )NIM_TNI ,XAM_TNI euq sellet( setnatsnoc sed ecrg sreitne sepyt stnerffid sed seuqitsirtcarac sel ertannoc tuep no ,ennod noitatnemlpmi enu snaD .1
-256
1

: )tne mmedcrp euq noitatnesrp e m m al ceva( selpmexe seuqleuq icioV .tatlusr ua tinu enu etuoja no ,nifne ,te )1 tneived 0 te 0 tneived 1( ssrevni tnos stib sel suot siup 2 esab ne emirpxe drobad tse ruelav ettec ,eria f ec ruoP . xued tnemlpmoc ud euqinhcet al emmon nol euq e c t n a v i us t n e m e l ar n g e d o c ts e e u l os b a r u el a v as , erbmon nud tigas liuqsro L
fitagn )b

: ) la m ic da x eh ne mirpxe egadoc emm el ,etiord ,tnadnopserroc erianib egadoc el ,ertnec ua ,la micd ne erb mon el ,ehcuag ( serb mon ed segadoc ed selpmexe seuqleuq icioV .engis ed tib ud etius al , 2 es a b n e e tir c ts e e ul os b a r u e l a v a s ,) l u n u o( er b m o n n u d t i g as li u qsr o L
fit is op )a

.) fitagn ruop 1 te fitisop ruop 0( engis el retnesrper ruop tib nu tnasilitu ne sdoc tnos sreitne sel ,)! egagnal el ,iroitrof a ,cnod te( enihcam al tios euq elleuQ . e u q n o c l e u q el li at e n u s o p or p er t o n r e si l ar n g e d e li c a f ar es li s i a m , stib 61 rus stnesrper sreitne serb mon sed rus ici snorennosiar suon ,sedi sel rexi f ruoP

. el l i a t e m m e n u t n e d n o ps err o c s l c-s t o m si or t s e d x u e d , t n e m m e u q r F ! s e ni h c a m s e l s e t u o t r us e ll i a t e m m al sap tnon sel suot : esilitu enihcam al ed tne melag sia m ,rdisnoc lc-tom ud tnem -elues non tnednepd serinred sec ,siofetuoT .setimil ses tne mellerutan esopmi elliat euqahC
tni

2.2 Leur reprsentation en mmoire

-16 255 127 -4 -3 -2 -1 16 3 2 1

1111111100000000 1111111111110000 1111111111111100 1111111111111101 1111111111111110 1111111111111111 0000000011111111 0000000001111111 0000000000010000 0000000000000011 0000000000000010 0000000000000001

FF00 FFF0 FFFC FFFD FFFE FFFF 00FF 007F 0010 0003 0002 0001

2 - Les types entiers

27

)01+61( 62 elamicd ruelav al dnopserroc A1x0 : elp mexe raP .)X0 uo( x0 sert -carac xued sed )ezniuq F ...ezno B ,xid dnopserroc A ,9 0 tneton es ser ffihc sreimerp xid sel( lamicdaxeh ne tirc erb mon el redcrp tnasia f ne eton es elamicdaxeh emro f a L .13 elamicd ruelav al dnopserroc 730 ,21 elamicd ruelav al dnopserroc 410 : e lp me x e r aP .0 er ffihc ud 8 esab ne tirc erb mon el redcrp tnasia f ne eton es elatco emro f a L .)61 esab( elamicdaxeh uo )8 esab( elatco noitaton enu resilitu tne melag zevuop suoV : s e l p m e x e s e c s n a d e m m o c , e n g is s n as u o c e v a , e l a mi c d e mr o f s u os t n e m e l p m is erir c l e d tse e m m ar g or p n u s na d er it n e et n ats n oc e n u er i u d ort n i d el ler ut a n s u l p al n o a f a L
+533 48 -273

.e mr o n al ra p sir o t u a t n e m e u q ir o ht ts e a le c is e m m , n oi sser p xe e m m e n u s na d s n gis n o n sreitne sed te sngis sreitne sed rel m ed retivd lliesnoc tse li ,releppar el ed noisaccol snorua suon em moC . stib ed noitalupina m ed stid ssilaicps sruetarpo sed etsixe liuq sruelliad snorrev suoN .sluclac sed eria f ruop sap non te ) tatd tom nu let( erianib fito m nud etcerid noitalupinam al svresr tnores sngis non sep yt sec ,euqitarp nE .)! n ed ellec erueirpus ares p ed ruelav al euq sd emlborp resop av p-n euq ellet noisserpxe elp mis enuuq zegnos( sep yt sec ed noitasilitul etrop moc euq seuqsir xua trop -par rap ,eriosird neib tse egatnava tec siaM .]53556 ; 0[ ellavretnil ]76723 ;86723-[ ellav -retnil ed essap no ,stib 61 ceva ,elpmexe rap ; selbatnesrper serbmon sed elliat al relbuod ed tne meuqiroht temrep aleC .eriassecn tsen engis ed tib nucua sleuqsel ruop s fitisop serb - mon sed euq sulp etnesrper en no ,sac ec snaD .dengisnu fitaci filauq el tnasilitu ne stnedc -rp sed snisiov sep yt sertua siort rini fd esirotua suov ++C ,euqip yta uep euqleuq noa f eD

. . . e u n e t er e d t i b n u t n ar o n g i n e , i s n i a t i ar t ar e s ) u v r p e p y t e l r u o p d n ar g p o r t e r v a s n o i t ar p o d t a t l u s r n u o s a c u a t n a d n o p s e rr o c( t i c a p a c e d t n e m e ss a p d e d e t i d n o i t a u t i s a l , + + C n e uq s n or re v s u oN .) l a m i c d n e 86 723- u o l a m i c d a xe h n e 000 8 t i o s , 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 i c i ( e l b i s s o p f i t a g n er b m o n t i t e p s u l p e l . . . t n e i t b o n o , ) t a t - l us r u d s t i b s r e i nr e d 6 1 s e l e u q er d is n o c e n n o l i s , e m m u a t n e i v e r i u q e c , u o( e u n - e t e r er i nr e d a l e d e t p m o c s a p t n e i t e n n o l e u q t e ) l a m i c d n e 8 6 7 2 3 u o l a m i c d a x e h ne FF F7 tios ,1111111111111110 ici( fitis op erb mon dnarg s ulp ua 1 et uoja nol iS 2 .)0000000000000000( erinam elues enud doc tse 0 erb mon e L 1

28

2.4 Notation des constantes entires 2.3 Les types entiers non signs
se uqrameR
Les types de base de C++ CHAPITRE 3

C egagnal

.selloryE snoitid xua ,ruetua emm ud , snad stneml sec rus snoitamrofnid sulp arevuort nO .)... enihcam nolispe ,snoisicrp ,setimil( stnattolf sepyt stnerffid sed stirporp sel tnassinifd setnatsnoc sesuerbmon ed tneitnoc ett-ne reihcif el ,fitacidni ertit .1
taolfc
1

-naver nE . luclac ed sruerre sed enif es ylana enu eria f tiod nol euqsrol fuas ,elbasnepsidni s a p t n e m e l ar n g ts e n e g a d o c e d e m ts ys u d s et c a x e s e u qi ts ir t c ar a c s e d e c n as si a n n o c a L .elbuod gnol te elbuod ,taolf : setner ffid selliat sed tnadnopserroc stnattol f ed sep yt siort tiovrp ++C .erb mon ud enihcam noitatnesrper al snad tne meticilpxe sap erugi f en elle te )61 ed uo 2 ed tnevuos tigas li( ennod enihcam enu ruop euqinu tne melarng tse B esab a L .erbmon ec ed noitamixorppa enu etnesrper B.M r ue la v a l e u q se ll e t )t n as o p x e( E te ) ess it n a m( M stitnauq xued tnanimretd ne ,tnattol f ne tnesrper ares ler erbmon nu ,tne msicrp sulP .8- uo 22 euq sellet stitnauq sel stnasopxe te 274.0 uo 5.1 euq sellet stitnauq sel sessitnam e mmon no ,noitaton ellet enu snad ; 01 274.0 uo 01 5.1 e mro f al suos erb mon nu erirc etsisnoc iuq eunnoc neib )elleitnenopxe uo( euqi fitneics noitaton al ed tneripsnis sli ,eria f ec ruoP .sler serb mon sed eitrap enu ,ehcorppa erinam ed ,retnesrper ed tnette mrep stnattol f sep yt se L
822

. s er i a n i b s f i t o m e d n o i t a l u p i n a m a l e d s r o l t r t n i n u t u o tr u s t n o r u a s t i l i b i s s o p s e c , er o c n e L . l u 9 4 6 2 s n a d e m m o c , l u r a p t n a x i f f u s a l n e g n o l d e n g is n u e p y t u d er t d ; l 6 5 4 s n a d e m m o c , l r a p t n a x i f f u s a l n e , g n o l e p y t u d er t d ; u 5 2 - u o u 1 : s n a d e m m o c , u r a p t n a x i f f us a l n e , e n g i s n o n er t d elamicd etnatsnoc enu resop mi tuep nO .)retnesrper al ruop tnasi ffus ,titep sulp el ep yt el esilitu no( gnol uo tni ngis sep yt xued sed nul snad edoc tse ela micd noitaton ne etirc eritne etnatsnoc enu ,tua fd raP
seriatnemlpmoc snoitamrofnI

.)s e n g is ne i b t n o s el a m ic d noitaton ne setirc setnatsnoc sel euq srola( ngis non ep yt ed tnos setnatsnoc sec ,sruelliaD .noitseuq ne etnatsnoc al ed euqir mun ruelav al uq erianib fito m ua sulp essertnis no selleuqsel snad snoitautis xua sevresr ert tnadnepec tneviod snoitaton serinred xued se L
29

3.1 Les diffrents types et leur reprsentation en mmoire

3 Les types flottants


3 - Les types flottants

tao lf

.)enrecnoc enihca m al ed tnadnepd noisicrp ne etrep al te ec -alp ne niag el( noisicrp ed etrep elleutnev enud eitrapertnoc ne ,eriom m ecalp ed uep nu rengag ed temrep alec : ) uo( erttel al ed erutirc nos ervius tnasia f ne , ep yt ud ertd : e t n a tt ol f e t n a ts n o c e n u r es o p mi d el b iss o p s i o f e t e p y t el s n a d r u e t a li p m o c e l r a p s e r c t n os s et n ats n o c s e l s et u ot , t u a f d r a P - u ot ts e lI .
e lbuod

: )stnelaviuq tnat engil emm enud selpmexe sel( stcerroc selp mexe seuqleuq icioV .)tnasopxe nu esilitu nol euq sd tnesba ert tuep tniop el( reitne uo la micd erbmon leuq etropmin ert tuep essitna m a L .engis snas uo ceva ,)01 ed ecnas -siup( reitne tnasopxe nu eriudortni ruop ) uo( erttel al esilitu elleitnenopxe noitaton a L .)tnavius ertipahc el snad snorelrap suon tnod te( ruetalipmoc el rap ecalp ne sesim tnores iuq seuqitamotua snoisrevnoc sed unet etp moc ,noitucxed spmet ud uaevin ua tsen ec is ,ecnatropmid uep arua tiaf ec ,euqitarp al s n a D . e t n at t ol f e m m o c n o n t e er i t n e e m m o c e r d is n o c ti ar es 7 4 et na ts n oc a l ,e h c na ver n E
E e

: st cerr oc se lp m e xe se uql e uq ic io v n E .)! sp m et e m m ne xu e d sel setuot sap ,rs neib ,sia m( esi mo ert tuep elamicd eitrap al uo eritne eitrap a L .)elug -r i v ert o n t n a d n o ps err o c( t ni o p n u t n e m er i o t a g il b o r e tr o p m o c ti o d e l a mi c d n oi t at o n a L .e ll e it ne n o p xe ; e la mi c d : s n o it at o n x u e d s e d e n ul t n a v i us t n e m - mer ffidni erircs tnevuep setnattol f setnatsnoc sel ,segagnal sed trapulp al snad e mmoC

. 01 01 ed sniom ua ardnets liuq russa tse no ,esilitu enihcam al tios euq elleuq ,erocne L .srp erutac -nort ed ruerrel selbatnesrper serb mon sed elb mesnel erid--tsec ,trevuoc eniamod eL . elb -uod gnol ep yt el ruop 01 te taolf ep yt el ruop 01 sap aressapd en )evitaler( ruerre ettec euq russa tse no ,esilitu enihcam al tios euq elleuQ .erutacnort ed ruerre enu e mmon nol euq ec tnasia f ne ehcorppa noitatnesrper enu retimil es ed gilbo cnod tse nO .egadoc l e t n u s n a d e t c a x e n o a f e d r e m ir p x es s a p t n e v u e p e n s el a m i c d e d t i m il er b m o n n u c e v a tna mirpxes serb mon sed trapulp al rO .stib ed ini f erb mon nuuq revresnoc en ed eriassecn tse li ,tnattol f ep yt nu snad euqnocleuq lamicd erbmon nud egadoc ud srol : noisicrp aL : st n e m l xued rap sesirtcarac tnos snoitatnesrper sellet ed euq reton ed tnatrop mi tse li ,ehc
73 + 730 16-

30

3.2 Notation des constantes flottantes

Les types de base de C++ CHAPITRE 3

4.25E4 54.27E-32 48e13 12.43 -0.38

-.38

4.25e+4 542.7E-33 48.e13 4. .27

42.5E3 5427e-34 48.0E13

"

. s e h p or ts o p a x u e d er t n e e u q i s s a l c er i n a m e d s t o n er t d e h c p m e s e l i u q r u e t i m i l d e d r e i l u c i tr a p e l r n u t n e u o j , e ms i h p ar g n u d t n as o ps i d e u q n e i b , i u q ) t e , , ( s er t c ar a c s e u q l e u q t n e m e l a g e v u or t n o , e ir o g t a c e t t e c s n a D . ) hs a l s- er t n o c u o e sr e v n i err a b i ss u a e m m o n e l n o , s i a n ar f n e , h s a l s- k c a b e m m o n e s l i , s i a l g n a n e( h s a l s i t n a m m o n , er t c ar a c e l t n as - i l i t u e l l e n n o i t n e v n o c n o i t a t n e s r p er e n u t n e d s s o p s e l b a m i r p m i n o n s er t c ar a c s n i a tr e C
\

: s el p me xe se c sn a d e m m o c ,u l u ov ertcarac el )setouq uo( sehportsopa ertne tnavirc ne ,euqissalc noaf ed tneton es ,selb - a mir p mi s er t c ar a c s e d t n e d n o ps err o c s e ll e u qsr o l , er t c ar a c e p yt e d s e t n a ts n o c s e L

. 1 3 te 0 er t ne sir p m o c s e d o c s e d t n o s li ,) n o n u o t n ier tser( I I C S A e d oc el snaD . elrtnoc ed sertcarac s mmon tnevuos tnos selbamirpmi non sertcarac se L

.) emro f al suos( reimerp el silitu jd sruelliad snova suoN ...)ehcolc( eronos e mrala enud noitavitcad ,noit -alubat ed ,engil ed tnemegnahc ed sertcarac sniatrec etsixe liuq isnia tseC .)narc nu rus rehci ffa uo re mirp mi cnod tuep nouq te( emsihparg nu icossa tnemeriotagilbo tse leuqua erid--tsec ,elba mirpmi ertcarac ed ellec essapd ++C ne ertcarac ed noiton al ,sruellia raP .stnemennorivne sel suot snad sap tnerugi f en seuq -ihparg-imes sertcarac sel uo ) uo sutnecca sertcarac( xuanoitan sertcarac sel ,ehcnaver nE .)! em margorp nu erirc ruop eiolp me nol euq xuec suot ,tia f ne( sruetaraps stner - f f i d s e d t e n o it a ut c n o p e d s e n g is s e d ,s er f fi h c s e d ,)s e l u c s u n i m t e s e l u cs u j a m( s ert t e l s e d r es -opsid ed niatrec sruojuot tse no ,sniomnaN .) yolpme ruetalipmoc ud te enrecnoc enihcam al ed sio f al erid--tsec( silitu noitam margorp ed tnemennorivnel ed dnepd ,selb -atnesrper sertcarac sed elbmesnel euq isnia , yolp me edoc el ,udnetne neiB .tetco nu rus eriomm ne sdoc sertcarac sed relupinam ed temrep ++C ,segagnal sed trapulp al em moC
n\

.)enrecnoc enihca m al ed tnadnepd ecalp ne etrep al te noisicrp ne niag el( eriomm ecalp ed etrep enud eitrapertnoc ne ,noisicrp ne tnemelleutnev rengag ed temrep alec : ) uo( erttel al ed erutirc nos ervius tnasiaf ne , ep yt u d ertd
l L e lbuod gno l

4.2 Notation des constantes caractres

4.1 La notion de caractre en langage C++

4 Les types caractres

e uqrameR

4 - Les types caractres

31

+ + C e u q er t i p a h c n i a h c or p e l s n a d s n or r e v s u o n , e h c n a v e r n E . e r i o m m n e er t c ar a c n u d n o i t a t n es r p er a l r u s s a p t i g a n e n g i s e d t u b ir t t a t e c e u q z e h c as , t n a t s n i l r u o P . te , : s er t c ar a c e d s e p y t s i o r t t i o v r p e mr o n a l , t i a f n E 3 . e h c o l c a l e r i d- - t s e c , 7 I I C S A e d o c e d e r t c a r a c u a d n o p s e r r o c 7\ e u q s i d n a t , ) 7 5 I I C S A e d o c e d ( 9 e r t c a r a c u a d n o p s e r r o c 9\ , I I C S A e d o c u a e r i a f f a a n o l o s a c e l s n a d , i s n i A . r o n g i t n e m e l p m i s t s e 7 0 e d e r f f i h c n u d u o s u s s e d - i c u a e l b a t u d x u e c e u q e r t u a e r t c a r a c n u d i v i u s ,\ e r t c a r a c e L 2 .enum moc eitrap ettec neib tnenneitrappa ici stic selpmexe sel ; )snoitatne mlpmi s e l s et u ot s n a d e v u or t n o u q s er t c ar a c x u a t n a d n o ps err o c( s e d o c s e d i ti o m er i m -erp al num moc ne tno setuot siam ,IICSA edoc ed snoisrev srueisulp etsixe li ,tia f nE 1
rah c d eng i sn u rah c d e ng is ra hc

se uqrameR
\a

: IICSA edoc el snad ,setnelaviuq snoitaton ed selp mexe seuqleuq icioV .x ed edcrp elamicdaxeh e mro f suos tios ; elatco e mro f suos tios : hs al si t na er t car ac u d e ti us a l sr u o j u ot ,t n a mir p x e l n e er t c ar a c u d e d o c el t n e m et c er i d r es il it u d e l bis s o p ts e l i ,s ul p e D
? " \
)baT lacitreV( elacitrev noitalubaT )baT latnoziroH( elatnoziroh noitalubaT )nruteR egairraC( toirahc ruoteR )deeF eniL( engil ed tuaS )deeF mroF( egap ed tuaS )ecapskcaB( erirra ruoteR )lleb elbidua uo trela( pib uo ehcolc

F3 22 C2 C5 B0 90 D0 A0 C0 80 70

?\ "\ \ \\ v\ t\ r\ n\ f\ b\ a\

TV TH RC FL FF SB L EB

elleusu noitacifingiS

noitaivrbA

ICS A edoC

++C ne noitatoN

: sertcarac sec ed etsil al icioV


32
Les types de base de C++ CHAPITRE 3

A \r

\x07 \x41 \x0d

\x7 \101 \15

\07 \015

\007

: e l p m e x e r a p , z er d i s n o C . e m m ar g or p u d s n o i t c u r ts n i s e l u e s s e d n e m a x e l r us s e s a b s n o i t a s i m i t p o s e d r e d c or p e d r u e t a l i p m o c e l r e h c p m e sr o l a t u e p l i u q s i u p x ueicrp relvr es tuep sac ec snad elitalov e d iolp meL . noitisi uqcad seuqir hpirp s n i a tr e c er i a f e l t n e v u e p e m m o c , e r i o m m s t n e m e c a l p m e s e d r us t n e m e t c er i d r i g a t u e p e m m ar g o r p u a r u e i r t x e t n e m e n n o r i v n e l s e l l e u q s e l s n a d s er i l u c i t r a p s r t s n o i t a u t is sed ti mil tse egasu n oS .e m margorp u d s noitcurtsni sed t nem mad nepdni ,reulov t u e p ) q u o p i c i( e t n a d n o p s err o c e l b a i r a v a l e d r u e l a v a l e u q r u e t a l i p m o c u a e u q i d n i e ll E : s el p m e xe se c s n a d e m m o c , t s n o c euq erinam emm al ed elitalov lc-to m el tna yolpme etisu uep noitaralcd enu etsixe lI
seriatnemlpmoc snoitamrofnI
volatile int p ; volatile int q = 50 ;

.2 ertipahc ud 1.1 ehpargarap ud em margorp reimerp erton snad elp mexe nu rtnocner jd snoiva ne suoN .ruetalipmoc el rap setejer tnores n ed ruelav al tnai fidom s n o it c ur ts ni s e ll e u t n e v s e l , t or cr us e d ,si a m 0 2 ) el ai t i n i( r u el a v e d t e t n i e p y t e d n e r a l c d n o : c e v a ,e l p m e x e r a P .e m mar g or p u d n oi t uc x el ed srol regnahc sap tiod en elbairav enud ruelav al euq reralcd ed elbissop tnadnepec tse lI .51 ruelav al tiarvecer n o tnatsnil snad tiar -edisr ecner ffid elues al ; )51=n( noitatceffa enud niol sulp uep nu eivius ,)n tni( erianidro n oi t ar al c d e n u r a p e c a l p m er er t t i arr u o p et n e d c r p n oi t ar al c d a l e u q sr u e l li a d z e t o N .e m mar g orp ud n o it u c xe l ed sr ol e ul o v e la it i ni r u el a v e tt ec e uq e h cp m e n ne ir s ia m ; 51 ruelav al arecalp li elleuqal snad tni ep yt ed elbairav enu tse n ,ruetalip moc el ruop ,icI : s n a d e m m o c n o it ar a l c d as e d sr ol e l b a ir a v e n u r es i l a it i ni d el b iss o p ts e lI
int n = 15 ; const int n = 20 ;

.rahc ep yt lues nuuq etsixen lI . edocinU tid egadoc el tnasilitu ne ,stetco 2 rus stnesrper tnos sertcarac se L
avaJ n E

.rinevret ni arruop ertcarac ud engis e d t ubirttal , s a c e c s n a d ; e r i t n e r u e l a v e n u n e e r t c a r a c e p y t e d r u e l a v e n u r i tr e v n o c e d t e mr e p


33

5 nitialisation et constantes

for (int i=1 ; i<15 ; i++) { k = j*j ; // ici, on utilise k }

5 - Initialisation et constantes

: e u q s e ll et s n oi t c ur ts n o c s e d s n a d rinevretni tuep lI .eslaf te eurt seton sruelav xued ed mro f tnemellerutan tuot tse ep yt eC

. e l c u ob a l s n a d n o i t s e uq n e n o i t - a t c e f f a l ar e vr e s n o c r u e t a l i p m o c e l , e l i t a l o v e r a l c d t a k e l b a i r a v a l i s , e h c n a v e r n E
k = j*j ; for (int i=1 ; i<15 ; i++) { // ici, on utilise k }

: t ir c t i a v a n o l i s e m m o c s n o i t - c ur t s n i s e c ar i u d ar t r u e t a l i p m o c e l , e l c u o b a l s n a d e i f i d o m s a p t s e n j e d r u e l a v a l i S
34
Les types de base de C++ CHAPITRE 3

6 Le type bool

bool ok = false ; ..... if (.....) ok = true ; ..... if (ok) .....

enu ruelav enud noitubirtta enu esilar y noitatce ffad noitcurtsnil ,eriartnoc uA .elbairav enu ruelav enud noitubirtta enucua reilucitrap ne ,noitca enucua esilar en siam ruelav enu edssop noisserpxel ,)C uo( ++C euq sertua segagnal sel snad ,tnemelarng ,siaM ; p * 2 + n n oi s s er p x e l t ar a p p a e ll e u q a l s n a d : eg a hc i f fa d n o it cur ts ni l ero c ne uo : noitatce f fad noitcurtsnil ,elp mexe rap ,em -moc ,snoisserpxe sed rinevretni eria f tnemelleutnev tnavuop snoitcurtsni sed ,trap ertuad ; sruetarpod edial )sertua ertne( semro f snoisserpxe sed ,trap enud : + + C ne e m m oc , e v u or t n o , s e g a g n al s e d tr a p ul p a l s n a d , t e f f e n E . n o i t a ci l p x e e n u e tis s e c n t c e ps a r ei nr e d e C .noitatnemrcnid te noitatceffad xuanigiro sruetarpod liatnev tnatropmi nud esop -sid ++C ,torcrus ed ,siaM .)stib ed snoitalupinam( seuqissalc sniom uo )seuqigol ,slennoit -aler ,seuqitmhtira ( seuqissalc sruetarpo sed uaevin ua drobad tuot etse fina m es essehcir etteC .sruetarpo ne sinruo f sulp sel segagnal sed nul tnemeniatrec tse ++C egagnal e L
y = a * x + b ; cout << "valeur = " << n + 2 * p ;

1 Originalit des notions doprateur et dexpression en C++

Oprateurs et expressions

. e g ar v u o t e c e d et i us al s n a d s s o p x e t n or es s l I . e tr o p ed noitulosr e mmon nol euq ec te sessalc sed serb me m xua scca sel ,serutcurts sed te xuaelbat sed stneml xua scca sel ,sruetniop sel tnemelleitnesse tnenrecnoc sruetarpo sertua )s e u ql e u q( s e L .s n ois s er p x e s e d s n oi t a u l a v s e l s n a d t n e n n e i vr e t n i i u q e p yt e d n o isr e v n o c e d te tiroirp ed selgr sel euq isnia ++C ud sruetarpo sed trapulp al etnesrp suov ertipahc eC .esilituni ,erocne l ,tse etlpmoc noisserpxel ed elani f ruelav al ,ertnoc rap ; k etce ffa ruot nos tse ,5 erid--tsec ,5=i noisserpxel ed ruelav al ,sac reinred el snaD .esilituni tnemelani f tse ruelav al tnod )5=i uo i++( nois -serpxe enud noitaulav a y li ,sac xued sec snad ,euq zetoN .segagnal sertua sed trapulp al snad tne meuqissalc ertnocner al nouq ellet noitatcef fa enud erullal tno serimerp xued se L : sussed-ic seuqov snoisserpxe sel tnennerper iuq snoitcurtsni sellet ed selpmexe sed icioV . noisserpxe noitcurtsni tnevuos em mon al nO .elugriv-tniop nu rap enimret noisserpxe enu tse egagnal ec ed noitcurtsni elapicnirp al euqsiup seil tnemetiort tnos noitcurtsnid te noisserpxed snoiton sel ,++C ne ,tia f nE .5 erid--tsec ,5 = i n o iss er p x e l e d r u e l a v a l k ar et c e f f a el l e s i u p 5 r u e l a v al i a r e t c e f f a e l l e , t i d t n e m e r t u A : e m mo c e trpre t ni ar es el lE .)s n or d -neiver y suon noitcurtsni enu erocne sap tsen ec( ++C ne noisserpxe enu etnesrper : etnavius noitaton al ,elpmexe raP .ruetarpo nu tse )=( noitatce ffal ,++C ne ,sruelliaD .)5 ruelav ed ,ici( noisserpxe enu emmoc erdisnoc ert ,ruot nos ,arruop : euq ellet euqissalc tne mmerappa noitatce f fa enu ,trap ertuaD .noitatnemrcni srpa i ed ellec riovas ,ruelav enu arua elle ,sp met e m m ne ; 1 ed i ed ruelav al retnemgua : riovas ,noitca enu aresilar : ) + + C n e n o iss er p x e e n u d n ei b t i g as li ,snorrev el suon em moc ,rac( noisserpxel ,isniA .selbairav ed unetnoc el rus riga tnem -elag sia m ,)ruelav enu aredssop ,etp moc ud tuob ua ,elleuqal( noisserpxe enud nies ua r i n e vr e t ni t n e m e l u es n o n t n orr u o p n o it at n e m r c ni d sr u et ar p o ) x u a e v u o n( s el , tr a p e n u D : e u qsi u p t ne m m er f f i d a v n e li , + + C n E .setniojsid tnemetia frap snoiton xued eria ffa a nO .ruelav ed sap edssop en siam elbairav
36
Oprateurs et expressions CHAPITRE 4
++i i = 5 k = i = 5 k = (i = 5) ++i ; i = 5 ; k = i = 5 ;

.etnerffid elliat ed stnattolf xued ed uo tnattolf nud te reitne nud noitiddad sap etsixen lI .elliat emm ed stnattolf ed uo elliat emm ed sreitne xued ed snoitidda sed euq ,elpmexe rap ,etsixen li ,enihcam egagnal nE .1

.stnattol f sel ruop te )non uo s fitisop( sreitne sel ruop ini fd tse % ruetarpoL
avaJ n E

.)G exennAl tnemelleutnev ze yov( htamc snad erugi f ett-nel tnod ,dradnats euqhtoilbib al ed re wop noitcno f al tios ,)x*x*x e mmoc x areluclac no ,elpmexe rap( sednarg port sap seritne secnassiup sed ruop s fisseccus stiudorp sed tios leppa eria f ed eriassecn tse lI .ecnassiup al noitavld ruetarpod sap etsixen lI
3

e uqrameR

.) 5.2 t ne me v it a m i xorppa neib tuav 0.2/0.5( tnattol f nu neib tse )/ issua iul ,ton( stnattol f xued ed tneitouq el ,ehcnaver ne ; 2 tuav 2/5 ,isniA .reitne nu tinruo f sreitne xued ed tneitouq el ++C neuq neib zetoN .noitatne mlp mil ed dnepd tatlusr el ,sac sertua sel snaD .sednarpo xued ses ed s e vi ti s o p sr u e l a v s e d r u o p e u q r u et ar p o t e c ti n i f d e n I S N A e mr o n a L . 5 t u a v 6 % 3 2 , 3 t u a v 4 %11 ,elpmexe raP .dnoces nos rap ednarpo rei merp nos ed noisivid al ed etser el tinruof iuq te sreitne sed rus euq retrop tuep en iuq % ton oludom ed ruetarpo nu etsixe li ,sulp eD . stner f fid sep yt ed sednarpo sed rus tnoretrop sliuqsrol tios ; )rahc dengisnu te rahc dengis ruop e m m ed ari ne li( sertcarac sep yt siarv ed sulp es -sigas en sliuq neib ,loob emm uo rahc ep yt ed sednarpo sed rus tnoretrop sliuqsrol tios ; ) trohs dengisnu ruop emm ed ari ne li( erit -ne trap euqir mun ep yt nu tse iuq trohs ep yt ed sednarpo sed rus tnoretrop sliuqsrol tios : n oi t a ci f i n g is e n u r e n n o d r u e l ar u as r u et al -ip moc el ,seticilp mi snoisrevnoc sed uej el rap ,euq ,3 ehpargarap el snad ,snorrev suon siaM . se d nar p o sr u e l e u q e p yt e m m e d t at l usr n u t ne ssi nr u o f s li te )gnol dengisnu te tni dengisnu euq isnia( elbuod gnol te elbuod ,taolf ,tni gnol ,tni : imrap ep yt em m el tna ya sednarpo xued ruop euq sini fd iroirp a tnos en serianib sruetarpo se L .)y+x- snad uo n- snad em moc( - ton soppol tnadnopserroc )ednar -po lues nu rus euq tnatrop en erid--tsec( erianu ruetarpo nud euq isnia ,)/( noisivid al te )*( noitacilpitlum al ,)-( noitcartsuos al ,)+( noitiddal riovas ,) sednarpo xued rus tnat -rop erid--tsec( serianib seuqissalc sruetarpod esopsid ++C ,segagnal sel suot em moC
1

2.1 Prsentation des oprateurs

2 Les oprateurs arithmtiques en C++


2 - Les oprateurs arithmtiques en C++

37

; ) fi t a g n t a tl us -r nu tinruo f sngis non sreitne sed rus tnatrop noitarpo enu is eriudorp es tuep li( ep yt ud ticapac al ruop )eulosba ruelav ne( dnarg port luclac ed tatlusr : ticapac ed tnemessapd : tc erro c ta t lu sr n u r i n -ruo f sap tuep en ruetarpo nu o secnatsnocric siort etsixe li ,segagnal sel suot snad e mmoC

.luclac ed sruerre sel tne metia frap resirtam ehcrehc nol euqsrol euq ecnatropmid an euqramer ellet enuuq neib zetoN .sluclac sed erdrol recrof s a p t i f f u s e n s a c e c s n a d s e s h t n e r a p e d i o l p m e l e m M . c t e b e d e m m o s a l a t n a t u oj a neuq ,b te a ed em mos al c tnatuoja ne eluclac ert neib issua arruop c+b+a euq ellet noisserpxe enu ,elpmexe raP .stucxe tnemelani f tnores sli leuqel snad erdrol ed niatrec ert t ue p e n n o ,s fi t at u m m oc t n e m e u q ir o ht t n o s sr u et ar p o x u e d e u qsr o l ,s n i o m na N . n o iss er p x e e n u d e t c a x e n oi t a ci f i n g is al r i n i f d r u o p t n e n n ei vr e t ni t ir oir p e d s el g r s e L

: )statlusr se mm xua cnod tnesiudnoc sesop -orp snoisserpxe xued sel( sluclac sel tneutceffes erdro leuq snad ertnom ,seulfrepus seshtnerap sed setiudortni t tno o ,etiord ed noisserpxel sleuqsel snad selp mexe seuqleuq icioV .noisserpxe enud tilibisil eruellie m enu rerussa ruop se yolpme ert t n e m e l a g t n e v u e p s e s ht n e r a p s e c e u q z e t o N . t n e n n e it n o c s e l l e u q n oi s s e r p x e l e d e l b a l a r p luclac el tnaro f ne ,tiroirp ed selgr sec ressapertuod tnette mrep seshtnerap sed ,nifnE .) e h c u a g et i or d e d ti v it ai c oss a e n u t n es i li t u , s e u qi t m ht ir a u q sertua ,sruetarpo seuqleuq euq snorrev suon( etiord ehcuag ed tivitaicossa enu eria ffa a n o l e u q t i d n O . e t i or d e h c u a g e d t n e u t c e f f es s l u c l a c s e l ,s e u qi t n e di s tir oir p e d s a c n E .- te + serianib sruetarpo sel tnessiarappa ,uaevin reinred nu rus ,nifnE . % te / ,* sruetarpo sel ,uaevin e m m n u , et i us n e e v u ort n O . e v e l s u l p a l tir oir p a l t n o - t e + s eri a n u sr u et ar p o se L .)ici snolrap suon tnod seuqit mhtira sruetarpo sel enrecnoc iuq ec ne ,sniom ud( ellennoitidart erbglal ed sellec tnengiojer te sellerutan tnos selgr sel ,segagnal sertua sel snad em moc ,++C nE .uej ne sim tnos sli erdro leuq snad riovas ed eriassecn tse li ,noisserpxe em m enu snad tnessiarappa sruetarpo srueisulp euqsro L

38

2.3 Comportement des oprateurs en cas dexception


e uqrameR

2.2 Les priorits relatives des oprateurs

Oprateurs et expressions CHAPITRE 4

a a -

+ * c a a a

b b % + / /

* + d c -

% d b + c ( b + c ) c c % d

a ( ( ( ( (

+ a ( -

( * c a a

b b ) ) a )

* ) % + ) /

c + d ( / (

c % d ) ( - b ) ) + c - ( b + c ) ) ) ( c % d )

.inifd tse sngis non sreitned noitiddal ed ticapac ed tnemessapd el lueS .1

.)snoitpecxe sed noitseg ed emsinac m nud ecnetsixel rglam ,++C ne sac el sap tsen iuq ec( emmargorp el rap etpecretni ert tnemelleutnev tuep iuq noitpecxe enu ehcnelcd orz rap noisivid ed evitatnet al elueS .stnattol f sel ruop EEEI snoitnevnoc sed noitasilitu ,reitne ne tic - a p a c e d s t n e m es s a p d s e d n o it c e t d e d s a p : e g a g n a l e l r a p s o p m i t s e t n e m etr o p m o c e L
avaJ n E

.s ert u a s el s na d noitucxel ed trra nu ,EEEI snoitnevnoc sel tnatcepser snoitatne mlp mi sel snad )reb -muN a toN( NaN uo FNI- ,FNI+ sruelav sed enul tiudnoc orz rap noisivid ed evitatnet al ; noitucxel ed trra nu tios ,lun tatlusr nu tios tiudnoc stnattol f sed ticapac ed tnemessapd-suos el ; s ert u a s el s n a d n o it u c x e l e d t rr a n u , E E E I s n o i t n e v n o c s e l t n at c e ps er s n o it at n e m -lpmi sel snad FNI- uo FNI+ ruelav al tiudnoc stnattol f sed ticapac ed tnemessapd el ; t at l u s r u d s fi t a c i f i n gi s s ni o m s el s ti b sel revresnoc ed etnetnoc es no te tcetd sap tsen sreitne sed ticapac ed tne messapd el : euq etatsnoc no ,tnadnepec ,euqitarp nE . .. ; ruerred egassem nud )ert-tuep( ngap mocca em margorp ud trra nu ; E E E I s e t i d s n oi t n e v n o c s e l t n e s il i t u i u q snoitatne mlpmi sel snad stnattolf sel ruop tiudorp es iuq ec tsec : ini fni tse liuq uo erbmon n u s u l p ts e n t a t l u s r n u u q r e u qi d n i t n e m el l e n n oi t n e v n o c t n a vr es er il u ci tr a p r u el a v e n u ; x u a f t a t l u s r n u : r i t u o b a c n o d t u e p n o , e ir o h t n E . n i mr et d n i ts e e m m ar g -orp ud tnemetropmoc el ,secnatsnocric sec snad ,euq erid ed etnetnoc es ++C ed e mron a L .orz rap noisivid ed evitatnet ; stnattol f sep yt sel ruop euq etnesrp es en noitautis ettec ; ep yt ud ticap -ac al ruop )eulosba ruelav ne( titep port luclac ed tatlusr : ticapac ed tnemessapd-suos
1

2 - Les oprateurs arithmtiques en C++

39

- u t a n d s a p e n e d t e mr e p i u q e i h cr ar i h e n u t n a vi us e u q eri a f es t u e p e n n oisr e v n o c el l e t e n U . ep yt ed tnemetsujad noisrevnoc enu e mmon es taolf >- tni euq ellet noisrevnoc enU

.ertannoc sap tuep en li tnemelarng euq ruelav enud noisrevnoc al emm-iul reutce ffe sap tuep en li ; )em margorp ud snoitcurtsni sertua sel euq spmet emm ne setucxe cnod tnores iuq( noisrevnoc ed snoitcurtsni sel riovrp euq tuep en ruetalipmoc el ,noitnettA

. t a o l f e p y t e d a r e s l a n i f t a t l u s r e l t e , e c a l p n e s i m a r e s e m s i n a c m e m m e L . ) t n i t e t a o l f( stner ffid sep yt ed sednarpo xued ed ecnesrp ne uaevuon evuorter es no ,noitiddal ruoP .taolf ep yt ed tatlusr nu arinruo f elle te taolf ep yt ed sednarpo xued rus aretrop noitacilpitlum al ,etpmoc ud tuob uA .)xua f tne mellerutan tnat esrevnil ,eritne ruelav enu tnemelbanevnoc srp uep retnesrper ed temrep taolf ep yt ec euq erdisnoc no rac( taolf ep yt el snad n ed ruelav al ed noisrev - n o c e d s n oi t c ur ts ni s e d e c al p n e er tt e m a v l i , el b iss o p ti os al e c e u q r u o P . x * n ti u d or p e l r e u t -ce ffe drobad tiod liuq ,tiroirp ed selgr sed unet etp moc ,tias ruetalipmoc el ,sac ec snaD : taolf ep yt ed soppus tse x euq sidnat ,tni ep yt ed ssoppus tnos p te n elleuqal snad ,esirotua noisserpxed elp mexe nu icioV .stner ffid sep yt ed sednarpo sed tnenneivretni selleuqsel snad setxim snoisserpxe sed em mon nol euq ec erircd temrep suov ++C siaM .ep yt e m m ed tnos sednarpo xued sruel euqsrol euq sini fd tnos en seuqitmhtira sruetarpo sel ,tid snoval suon e mmoC
n * x + p

.sp met rei merp nu snad rerongil tnemelleutnev zerruop suov ; stisu uep sac sec rus tniop el etiusne are f rueirtlu ehpargarap nU .sngis non sep yt sel rinevretni sap tnasia f en selleusu snoitautis sel drobad t u ot s n or e n i m a x e s u o n ,s o p or p el r e t il i c a f r u o P . i c i r e n i m a x e s n ol l a s u o n e u q e c t s e C .loob ep yt el euq isnia ,)sengis non setnairav sruel ceva( rahc te trohs sep yt sel resilitud ; n oi ss er p x e e m m e n u d n i es u a s e p yt sr u e is ul p r e g n a l m e d : temrep suov ++C ,tnemesuerueh trof ,siaM .elbuod gnol te elbuod ,taolf euq isnia ,)sengis non setnairav sruel te( gnol te tni imrap ep yt emm ed sednarpo sed ruop euq sini fd tnos en seuqitmhtira sruetarpo stner ffid sel ,uqov jd snoval suon e mmoC

40

3.2 Les conversions usuelles dajustement de type


e uqrameR

3.1 Notion dexpression mixte

3 Les conversions implicites pouvant intervenir dans un calcul dexpression


Oprateurs et expressions CHAPITRE 4

: srpa-ic a mhcs el euqidnil em moc eulav tse : noisserpxel , taolf ep yt ed x te trohs ep yt ed tnos 3p te 2p ,1p is ,elp mexe raP .) s e u qi t a m ts ys s n o isr e v n o c e d erocne uo( seuqirmun snoito morp ed ,sac ec snad ,srola elrap nO .sednarpo sertua sleut -nev sed sep yt sel rerdisnoc snas alec te ,tni ne eitrevnoc drobad tse noisserpxe enu snad tnassiarappa sep yt siort sec ed nul ed ruelav etuot euq tnemelp mis tuot tiovrp ++C ,tia f nE .seuqitmhtira snoisserpxe sed snad ,issua xue ,ertarappa tnadnepec tnevuep iuq loob te rahc sep yt sel ruop in ,)euqirmun ep yt iarv nud essigas liuq neib( trohs ep yt el ruop sini fd sap tnemeuqiroht tnos en seuqit mhtira sruetarpo sel ,tid jd snoval suon e m m o c ,t e f fe n E . sac s el s u o t r el gr s a p t nes i f f us e n e p yt e d t n e m ets u ja d s n oisr e v n o c s e L
p1 * p2 + p3 * x n * p + x

: n oi sserp xe l ,taolf e p y t e d x te g n o l ep y t ed p , tni ep yt ed tse n is ,elp mexe raP .elabolg noa f ed noisserpxel sap non te snrecnoc sednarpo s el n u n u t n ar d is n o c n e ut c e f f e ts e er v u n e ert t e m s n oisr e v n o c s e d xi o h c el e u q z e t o N .tni ne uo taolf ne elbuod nu ritrev - n o c s a p arr u o p e n n o , e h c n a v er n e ; e l b u o d n e t n i n u t n e m e t c eri d ri tr e v n o c r s n e i b t u e p n O : riovas ,)sen -nod sed tirgtnil tnetcepser snoisrevnoc sellet ed euq siofrap tid no( elaitini ruelav al rer
41
int -> long -> float -> double -> long double

3.3 Les promotions numriques usuelles


: a m h cs e c t n a vi us e ul a v ar es
n * p + x | | | long | | | | | |__ * __| | | | long | | | float | | | |____ + ____| | float

3.3.1 Gnralits
3 - Les conversions implicites pouvant intervenir dans un calcul dexpression
ce qui fournit un rsultat de type float pour tre additionn x il est converti en float le rsultat de * est de type long multiplication par p conversion de n en long

. t i n u e n u d t n e m g ua 1 c s n a d u ne t n oc er tc ara c ud edoc ud ruelav al tnadnopserroc ,tni ep yt ed tatlusr nu cnod tinruo f 1+1c noisserpxeL

.tni ep yt ed tse n euq sidnat ,rahc ep yt ed tnos 2c te 1c euq esoppus no sleuqsel snad ,snoisserpxed noitaulavd selpmexe seuqleuq icioV . e m m el sr uo j u ot sap are s e n n n o d er tc ara c n u i c ossa re it n el ,s er tc ara c s el r u o p e d oc e m m e l sa p t ne i ol p m e n senihca m sel setuot em moc ,euq neib zetoN .etnesrper el iuq edoc ud )reitne( ruelav al ceva ertcarac nu tnemelica f dno fnoc ++C etros euqleuq neuq erid tuep no ,tne mevitce ffE .56 erb mon el erdnopserroc eria f tuep no leuqua ,10100010 erianib f i t o m e l r a p t n e s r p e r t s e E er t c ar a c e l , I I C S A e d o c e l s n a d , e l p m e x e r a p ; ) n oi ts e u q n e fito m el tinruo f ,erianib ne doc ,iuq erb mon el( reitne erb mon nu erdnopserroc eria f sruoj -uot tuep no reinred ec ro ; stib 8 ed fito m nu erid--tsec ,ertcarac ec ed edoc el e mmoc ; e n g il e d n i f , Z , a : n r e c n o c e r t c a r a c e l e m m o c : s no a f xu e d ed erdisnoc ert tuep ertcarac ep yt ed ruelav enu ,te ffe nE .euv ed tniop ed noitseuq enud euq tigas en li ,tiaf nE .noitaci fingis as rus regorretni suov te tni ne rahc ed )euqirmun noitomorp( euqitamts ys noisrevnoc enud ecnetsixel ed sirprus ert zevuop suov ,iroirp A .tne mmedcrp euq selgr semm sel euqilppa no ,iouq srpa ; tni >- trohs euqir mun noit -omorp al sesi muos drobad tnos trohs ep yt ed selbairav siort sed sruelav sel euq neib zetoN
3.3.2 Cas du type char

42

Oprateurs et expressions CHAPITRE 4

p1 * p2 + p3 * | | | int int int |____ * ____| | | float int |___ * ___ | | float float |_________ + _________| | float

c1 c2 | | int int |___ _ ___| | int c1 + 1 | | int | |___ + ___| | int

promotions numriques char -> int promotion numrique char -> int x | | | | | conversion dajustement de type promotions numriques short -> int addition conversion dajustement de type addition

. ed ellec erueirfni tse ed ruelav al euq sd ticapac ed tnemessapd nu eriudnoc tuep )ngis non epyt ed tnos te o( euq ellet noisserpxe elpmis enu ,siof ettec ,noitnettA .1
p n p-n

5-

gnol dengisnu >- tni dengisnu >- t roh s d engi snu

seuvrp snoisrevnoc sel euq zehcas ,fitacidni ertit elpmis .erircsorp cnod tse trebil ellet enU .)? ngis non ne itrevnoc riolav neib sruelliad tiarruop euq( sennod sed tirgtnil ,noaf etuot ed ,sap tnatcepser en te snes ed erug tna yan )ngis non srev ngis ed tnemelarng( snoisrevnoc sed ecalp ne erttem tiudnoc li sia m ; egagnal el rap tpecca tse ,lliesnocd tnemetro f tios liuq neib ,sngis non sep yt sed te sngis sep yt sed egnal m el ,ehcnaver nE .) stcetd sap tnores en iuq ticapac ed stne messapd sed rinetbo sruojuot tuep no( esop es en uaevuon e mlborp nucua sia m , s n ois -revnoc sel rap )ep yt ed tne metsujad snoisrevnoc te seuqir mun snoitom -orp( snoisrevnoc sel retlp moc ed tne melp mis ti ffus lI .sellerutan tnetser sesohc sel ,sngis non sreitne sep yt sed te sngis sreitne sep yt sed sap egnal m en noisserpxe enuuq tnaT
gnol >- tni >- t roh s

.spmet reimerp nu snad rongi ert tuep ehpargarap eC .ngis non ep yt ed sednar -po sed noisserpxe enu snad tnessiarappa o selleusu uep snoitautis sel ici snoni maxe suoN

.tilibitapmoc al erussa euqov eticilpmi noisrevnoc al ,erocne L . 1 u o 0 er i t n e r u el a v e n u t ness i nr u o f li , C e g a g n al ne u q is n ia , + + C e d s n oisr e v s e n ne ic na sel snaD .loob ep yt ed tatlusr nu tnessinruo f )seuqigol ,slennoitaler( sruetarpo sniatreC
// affiche 2

: elpmexe nu icioV .tni ne loob ed )euqirmun noitomorp( euqitam -ts ys noisrevnoc enu uvrp a emron al ,sedoc sneicnad ceva tilibitap moc al revresrp ruoP .)0 uo 1( reitne nu rap setnesrper tne melpmis tneiat )eslaf te eurt( setnadnopserroc sruelav sel ,tnavarapuA .)C ne sap etsixen li( ++C snad tnemevidrat tiudortni t a loob ep yt e L
3.3.3 Cas du type bool

.)seuqir mun snoitomorp( tni ne sruelav sruel ed elbalarp noisrevnoc emm dnauq a y li ,rahc ep yt ed tneios sednarpo xued sel euq neib ,icI
43

3.4 Les conversions en prsence de types non signs

3.4.1 Cas des entiers


bool ok = true ; ..... cout << ok + 2 ; ..... ok = false ; cout << ok +2 ; c1 + n | | int | |___ + ___| | int

3 - Les conversions implicites pouvant intervenir dans un calcul dexpression

// affiche 3 promotion numrique pour c1

.ruetid emm el zehc ,ruetua emm ud


rahc

C egagnaL

snad stilibissop sec ed elliatd edut enu arevuort nO .1


rahc

.) e yt lues nuuq etsixen liuq snoleppar( ngis non tiat ep yt e l is e m m o c e ss a p es t u o t ; r ei t n e n e ed euqirmun noito morp enu tnemelag etsixe lI
rahc

avaJ n E

rah c d eng isnu c

rah c

rahc dengis

552

rahc dengisnu

721

821-

tn i

1+c

tni >- rahc

: euq ellet noitcurtsni enu snad tarappan ep yt ec ed emlborp nucuauq zetoN .n o it at n e m lp m il t n a vi us nu uo nu erdnopserroc tuep ic-iulec ,)truoc tuot( ep yt ed tse is ,euq sap areilbuon nO . ep yt e d ts e is te ertne esirp moc ruelav enu ; ep yt ed tse is te ertne esirp moc ruelav enu : ) e d e t ne mg u a ,er i nre d et t ec t na t e hc i f fa r u el a v al( ne eitrevnoc ed ruelav al ruop aresilitu etnedcrp egahci ffad noitcurtsnil ,isniA t n ei v e d t n ei v e d : e l p m e x e r a P . e r t c a r a c u d e d o c u d t i b r ei m er p u a x u a g st i b 8 e d o c n os e d e h c u a g et u o j a n o , n gis ts e er t c ar a c e l i S t n ei v e d t n ei v e d : elp mexe raP .0 xuag stib 8 edoc nos ed ehcuag etuoja no ,ngis sap tsen ertcarac el iS . noisserpxel ed noitaulavl eriassecn , euqir mun noitomorp al tnemsicrp eluord es tnem moc sno yov te stib 61 rus stnesrper tnos ep yt ed sreitne sel euq ,erocne ici ,snosoppus ,sedi sel rexi f ruoP
r a h c d e n gi s

tni

0\

rah c dengis

rahc d engi snu

: euq sellet noitautis sed snad ,elp mexe rap ,sac el tseC .e m m - i ul er t car ac ua s ulp n on te er t car ac ua e ic oss a e uqir m u n r ue l av al e sser t n is n o uq srol sd rinevretni av tubirtta tec ,ehcnaver nE . el tnatpmoc ne selbissop snosianibmoc 652 tios ,stib 8 rus sedoc ed uej lues nuuq a yn li : )doc( tnesrper tse nnod ertcarac nu tnod erina m al rus ecnedicni enucua an ertcarac ep yt ed elbairav enud engis ed tubirttaL .)s ng is e m m oc sr d is n oc t n os sre it n e s e p yt s e l s u ot ,t u a f d r a p , e u q sr o l a( uo d n o ps err o c ) tr u o c t u o t( is sap tid en emron al ,ertuo ne ; engis ed tubirtta nu riovecer ,issua iul ,tuep ep yt e L
rah c rah c tni dengisnu

. )nrecnoc erianib fitom el leuq let revresnoc tneiver ne e d n oi s -revnoc al ,elpmexe rap( erianib fito m el revresrp ed tnetnetnoc es ,sac ec snad ,emron al rap
1

44

3.4.2 Cas des caractres

tni dengis

Oprateurs et expressions CHAPITRE 4

01001110 11011001

01001110 11011001

cout << c ;

char c ; cout << c+1 ;

0000000001001110 1111111111011001 0000000001001110 0000000011011001

d< c

.snoisserpxe sed snad seshtnerap seniatrec retivd tnevuos temrep aleC .seuq -itmhtira sruetarpo sel euq seriatiroirp sniom tnos slennoitaler sruetarpo sec ,trap ertuaD . er i ar t n o c s a c e l s n a d r u e l a v al ardnerp ellE .sessua f xued sel setuot tnores selleuqsrol tios ,seiarv xued sel setuot tnores selleuqsrol tios erid--tsec ,ruelav emm al xued sel setuot tnorua d < c te b < a snoitaler sel e u qsr o l r u e l a v a l a r d n e r p n o i s s e r p x e e t t e c , t i a f n E . s e r i t n e s t i t n a u q s e d , t n e m e l a n i f , t n o s te s n o iss er p x e s e l e u q n n o d t n at , n oi t a ci f i n gis e n u t n e m e vi t c e f f e a , + + C n e , i u q e c
b<a

=!

==

> ,

<

: noisserpxel ,isniA .stnedcrp sed ellec erueir fni tse ic-ellec siam ,tiroirp emm al tnemelag tnedssop ) te ( sreinred xued se L .tiroirp emm ed tnos )=> te =< , ( sruetarpo sreimerp ertauq sel euq riovas tuaf li ,tiroirp ruel enrecnoc iuq ec nE . s n o it at ( noitaton al neib zeuqrameR - c e f f a x u a v r e s r t n a t e n gi s e l , t il a g d r u et ar p ol e d )
= sl enno ita ler sru etar po se L ==

ed t nerf fid

lag

lag uo rueirpus

rueirpus

lag uo rueir fni

rueir fni

noita cifingiS

es laf> eurt

loob

rah c

trohs

: ++C ne tnatsixe slennoitaler sruetarpo sed etsil al icioV .)eiarv ares ( uo , e p yt e d sr u el a v s e d t n er u g i f s e d n ar p o s e l s n a d is e m m ,euqir mun ep yt ed snoisserpxe sed euq rerapmoc nema ares en no etpmoc ud tuob uauq ei fingis aleC .tnedcrp ehpargarap el snad setnesrp noisrevnoc ed selgr xua sesimuos tnores selle te euqnocleuq esab ed ep yt nud ert tnorruop serapmoc snoisserpxe seL . sruelav xued sed enul tnanerp enneloob ruelav enu tse nosiarap moc al ed tatlusr e L
es laf

uo

eu rt

: elp mexe nu iciov nE .nosiarap moc ed seuq -issalc sruetarpod edial snoisserpxe sed rerap moc ed temrep ++C ,egagnal tuot em moC

4 Les oprateurs relationnels

( a < b) == (c < d)
rue tarpO

: e mmoc etrpretni tse


a < b == c < d
=! == => > =< <

2 * a > b + 5

4 - Les oprateurs relationnels

45

5 < 2

S < C

c < a

rah c

2c

1c

2c < 1c

tni >-- rahc

1c

1c

e = = 1c

2c

1c

2c

1c

2c

1c

rahc

2c

1c

! engis ed tubirttal tnavius reirav tuep elleuqal ,sertcarac sertua xua troppar rap )tnetsixe sliuqsrol( sutnecca sertcarac sed ecalp al rus euq sulp sap ,selucsuni m sed te selucsuja m sed ,ser ffihc sed sevitaler secalp sel rus etiaf ert tuep en eshtop yh enucua ,ehcnaver nE . .. sruojuot a no ; lerutan erdro rap sssalc tnos ser f fihc sel .. . , sr u o j u ot a n o ; tr a p ertuad selucsujam sel ruop ,trap enud selucsunim sel ruop tcepser tse euqitbahpla erdrol : egadoc ec tios euq leuq ,euq riovas tua f li ,tnadnepeC .) y olp me ep yt ud ngis non uo ngis tubirttal ,tne melleutnev ,te( yolpme egadoc el tnavius reirav cnod tuep nosiarapmoc ellet enud tatlusr e L . ed ertcarac ud edoc ua erueir fni ruelav enu a ed ertcarac ud edoc el is eiarv ares elp mexe rap ,te ffe nE .tnesopmis snoisicrp seuqleuq ,tilagnid snosiarap moc sel ruop ,ehcnaver nE .ecneul fnid erug an n o isr e v n o c e n u d e c n ets i x e l , s e c n at s n o cri c s e c s n a d , ti d t n e m er t u A . er t c ar a c el t n ei t n o c i s c n o d , e d e d o c u a l a g ts e e d e d o c el is e iar v ares ; er t c ar a c e m m e l t n e n n e it n o c t e i s c n o d , e d o c e m m e d s er t c ar a c sed tnenneitnoc te is erid--tsec ,ruelav emm al tno te is eiarv ares 2c == 1c :) ep yt e d t na t t e ( elp mexe rap ; reilucitrap e mlborp ed sap esop en tilagd nosiarapmoc al ,udnetne neiB . s e r t c a r a c x u e d r u s r e t r o p t u e p n o s i a r a p m o c e n u , n oisr e v n o c e d s e l g r s e d u n e t e t p m o C
.=

fi

r u e t a r p o l e d es u e t u o d n o i t a s i l i t u d s a c n e t n e m es s i tr e v a n u t n e ss i nr u o f s u o v s r u e t a l - i p m o c s n i a tr e c e u q r e t o n ! e l l u n n o n t s e e d r u e l a v a l i s t u c x e l i - t s e t n a v i us c o l b e l , i s n i A . x u a f t n e i v e d l u n , i ar v t n e i v e d l u n n o n : e l g r a l t n a v i u s n e l o o b n u n e e u q - ir m u n r u e l a v e t t e c s r o l a t i tr e v n o c n o i t c ur ts n i l e u q s n orr e v s u o N .) e d e l l e c , c n o d ( n o i t a t c e f f a s r p a e d e l l e c t s e r u e l a v as t e e d r u e l a v a l e t c e f f a noisserpxeL
fi b a a b b= a

: elp mexe tec ze yoV .uluov tatlusr ua sap tnassituoban sia m ,ruetalip moc el rap tpecca edoc ud eriudnoc tuep ellE . ed ecalp al ruetarpol resilitu etsisnoc etnaruoc ruerre enU
== =

46

Cas des comparaisons de caractres

Oprateurs et expressions CHAPITRE 4

( x + y ) < ( a + 2 )

x + y < a + 2

if (a = b) // ici, on a utilis = au lieu de == { ..... }

e uqrameR

: tnelaviuq tse : is n i A

xua f

lun non

ia rv

ia rv

lun non

||

lun non

ia rv

||

lun non

ia rv

lun non

||

xua f

||

ia rv

lun non

&&

lun non

xua f

&&

lun non

xua f

lun non

&&

xua f

&&

tat lusR

2 ednarpO

rue tarpO

1 ednarpO

tn i

loob

rahc

t rohs

b=>a

: n oi t a u ti s a l e l u ti p a c r t n a vi u s u a el b a t e L .iarv dnopserroc ) ruelav al tnemelues sap cnod te( ellun non ruelav etuot ; x u a f d n o ps err o c el l u n r ue la v e d e d n ar p o n u : euq tner -disnoc sruetarpo sec ,sac ec snaD .) ne te , e d e u qir m u n n o it o mor p ed selgr sel sirpmoc y( sertnocner jd eticilp mi noisrevnoc ed selgr sel ceva ,)drat sulp snor -r e v el s u o n e m m o c sr u e t ni o p s e p y t s el e m m t e( st n a t t o l f s e p y t s el sir p m o c y , e u q i r m u n ednarpo leuq etropmin tnetpecca seuqigol sruetarpo sec ,tiaf nE .senneloob snois -serpxe sed euq ert tnessiup en sruetarpo sec ed sednarpo sel euq ec tiardnettas no siaM . : et n el av i uq ts e n oi sserp xe e tt e C . eri art - n o c s a c e l s n a d x u a f r u el a v al d n er p t e e ss u a f ts e n o it i d n o c a l i s i ar v r u e l a v a l d n er P
b<a )b <a ( !

al d n er p t e ei ar v ts e

d< c

te

b<a

. er i ar t n o c s a c e l s n a d x u a f r u e l a v s n oi t i d n o c x u e d s e d s n i o m u a e n u l is i ar v r u el a v al d n er P
)d< c ( || )b<a (

al d ner p te se iar v x u e d s et u ot t n os

d<c

te

b <a

. er i ar t n o c s a c e l s n a d x u a f r u e l a v snoisserpxe xued sel is iarv ruelav al dnerP


)d <c ( & & )b<a ( !

n o n t e ) t o n( u o ,)
||

&&

: elpmexe raP .) ton( ton( te : seuqissalc seuqigol sruetarpo siort ed esopsid ++C

5.1 Rle

5 Les oprateurs logiques


5 - Les oprateurs logiques

47

& & e u q el r e m m e l t n a u o j )| t e &( sr u et ar p o s ert u a x u e d e d t n e m e l a g es o psi d l i si a M .|| te && ruop tiucric-truoc ed noiton al ceva ,seuqigol sruetarpo semm sed esopsid avaJ
avaJ n E

: noitatnemrcnid te noitatce ffad sruetarpo sel idut zerua suov euqsrol euq selbisnehrp moc sio fetuot tnores en iuq selpmexe xued iciov nE .)ruelav enu redssop ed sulp ne( noitca enu esilar sednarpo sed nul selleuqsel snad snoitcurtsnoc sed resirtam ruop elbasnepsidni tse tirporp ettec ed ecnassiannoc a L . ) ( x u a f r u e l a v a l ar u a et l p m o c n o iss er p x e l , n o a f e t u o t e d reulavd elituni tse li ,) ( xua f tse tatlusr el iS . reulav rap ecnem moc no ,euqsiup
d< c 0 b<a

: euq ellet noisserpxe enu snad ,elp mexe raP .essuaf uo eiarv tse etnadnopserroc noisserpxel is redicd ruop elbasnepsidni tse ruelav as ed ecnassiannoc al is euq ulav tsen )ruet -arpol ed etiord erugi f iuq iulec( ednarpo dnoces ruel : tiucric-truoc ed mon el ruos tnevuos eunnoc etnassertni tirporp enud ++C ne tnessiuoj te sruetarpo xued se L
|| &&

: se s ht n erap sn as se tir c er t ,t i a f ne , up tn ei ar ua e hpar gar ap e c e d t u b d n e s el p m e x e e m m o c s e s il i t u s n ois s er p x e s e l ,is n i A .s l e n n o i t a l er u o s e u qi t m ht ir a sr u e t -arpo xua erueir fni tiroirp ed tnos xued suoT . euq eriatiroirp sniom tse ruetarpoL
&& ||

: e d er i ar t n o c n o it i d n o c al erir c r u o p ,i s n i A .s l e n n oi t a l er sr u e t ar p o x u a te serianib seuqitmhtira sruetarpo sel suot ed ellec erueirpus tiroirp enu a ruetarpoL
!

: erutircl tnemmeuqr f ertnocner nol euq zetoN .ruetalipmoc el rap setpecca tnos : euq sellet snoisserpxe sed ,sreitne sed tnos te is ,++C ne ,isniA
p n

48

5.2 Court-circuit dans lvaluation de && et ||

: t n a v ir c n e s es h t n er a p s e d r es il it u d eri ass e c n t s e l i
a == b

: euq )elbisil sulp tnemcro f sap sia m( esicnoc sulp


if (!n)

Oprateurs et expressions CHAPITRE 4

if ( i<max && (j++ == 10)) ... if ( ok && (i=j)) ... a<b && c<d a<b && c<d a<b || c<d ( ! a ) == b ! a == b ! ( a == b ) if ( n == 0 ) n && p quivant quivaut n || p

(a<b) && (c<d) (a<b) || (c<d)

// j++ (incrmentation de j) ne se fera que si i<max // laffectation i=j naura lieu que si ok est vrai !n

: e m m o c e t r pr e t n i t i ar e s : n ois s er p x e l , t e f f e n E

eu lav l

eula vl

eulav l

.rtnocner jd esab ed ep yt l e u q etr o p m i n e d s e l b a ir a v s e l t n e ts er s n oss i a n n o c s u o n e u q se l ues se l ,t n ats n il ru oP . e m m o c s s i li t u n o n u o ert t n e v u e p sl is s n or esi c r p s u o n ,s t n e m l x u a e v u o n e d s n or er t n o c n er s u o n e u q er u s e m te ru f ua ,trap ertuad ; enu rinevretni tno f = euq sruetarpo sertuad ++C neuq snorrev suon ,trap enud ,tia f nE .noita mrofni enucua etroppan e nu er t arappa t i od noitatce ffad ruetarpo nud ehcuag uq erid euq revuort zevuop suov ,tnatsnil ruop ,setreC . no i ta tc e f fa d r ue tar po nud ehcuag ertarappa tuep iuq ec tuot erid--tsec , ehcuag ruelav enu engisd emret e C . e u l a v l a l : u a e v u o n t o m n u er i u d or t ni t u a f l I . esi c r p z e ss a s a p ts e n el b air a v e d n oi t o n et te c e u q el l et ts e e g a g n al u d e xa t n ys al ,t n a d n e pe c , + + C n E . er u tc ur ts e n u d s e t n as o p m oc sel uo xuaelbat ed stne ml sel elpmexe rap ervuocer emret ec euq tnemelarng esicrp no ; elbairav ed mon el rap ecnerfr ellet enu tnevuos engisd no ,segagnal sertua sel snaD .ruelav al rei fido m tnemevitce ffe arruop no tnod erio m m tnemecalpme nu ecner fr enu ert tiod reinred ec ,te ffe nE .ednarpo r e i m er p n o s r u s s n o i t c irts er s e d es o p m i n o i t a t c e f f a d r u e t ar p o t e c e u q c n o d s n o y o v s u o N
eulav l

3 + b

: snes ed sap tiaruan etnavius noisserpxel ,isniA . ruetarpo tec ed ednar -po rei merp emmoc noisserpxe enu ertarappa eria f ed elbissop sap tsen li ,ehcnaver nE . e tc e f fa et i us ne t se e u ne tbo i sn ia r ue la v a L . noisserpxel ed noitaulav drobad a y liuq tia f )nosiarapmoc ed te seuqit - m ht ir a sr u et ar p o s el s u ot e d e l l e c er u e ir f ni ts e el l e( r u et ar p o t e c e d tir oir p el b i a f a L
= =

: snad e mmoc snoisserpxe sertuad rinevretni eria f tuep ) ( noitatce ffad ruetarpo teC . erid--tsec ,noitatce f fa srpa ed ellec : ruelav enu tiadssop ; ruelav al ed noitatce f fal : noitca enu tiasilar : iuq noisserpxe enu tiat
i 5

: euq reuqramer ed noisaccol ue jd snova suoN

.s ed -narpo xued sed euqitamts ys noitaulav ceva erid--tsec ,tiucric-truoc snas siam ,|| te
49

6.1 Notion de lvalue

6 Loprateur daffectation ordinaire

c + 5 = x c = b + 3 i = 5

6 - Loprateur daffectation ordinaire

eu la vl

.) e n u d tne melarng sulp uo( elbairav enud ruelav al ed tnetnemrcd iuq uo tnetnemrcni iuq
1

: euq sellet )snoitcurtsni sed uo( snoisserpxe sed tnevuos ertnocner no ,)C uo( ++C euq ertua egagnal nu snad stirc sem margorp sed snaD

tn i

e lbuod

eu la v l

eula vl

eu lav l

.9 ehpargarap el snad snoitatceffa sel rap sesopmi snoisrevnoc ed stilibissop setner ffid sec rus tniop el snoref suoN .)erbmon ud elamicd eitrap al dr e p n o , n e nu titrevnoc nol euqsrol elp mexe rap( noitamrofnil ed etnatropmi s n i o m u o s u l p n o it a d ar g d e n u ,s a c s e l t n a v i us , er i u d n o c c n o d t u e p e ll E .s et i c il p mi s n oi s -revnoc sed sac el snad rueugir ed tse iuq sep yt sed eihcrarih al tnemeriassecn sulp etcepser e n e s o p m i n oi sr e v n o c el l e t e n U . al ed ep yt el snad )selleutibah selgr sel tnavius eul -av tse iuq( noisserpxel ed ruelav al ed euqitamtsys noisrevnoc a y li ,ehcuag tnarugi f al euq ep yt e mm ud sap tsen etiord tnarugif noisserpxel ed ep yt el euqsrol ,tia f nE .snes ed sap an iuq ec ,ruet - ar p o t ec e d e h c ua g t nar u gi f al ed ep yt el regnahc tiardneiver noisrevnoc ellet enU .ruetarpo tec ed ehcuag tarappa iuq al e d n o isr e v n o c e u q n o cl e u q e n u re u tce f f e d ,ici ,noitseuq sulp tsen li ,seticilpmi snoisrevnoc sed uej ne tneiattem iuq te tnemmedc -rp srtnocner sruetarpo sel ruop tiasiudorp es iuq ec tne meriartnoc ,tnadnepec ,sio f etteC .s t n er f fi d s e p yt e d s e d n ar p o s e d n o it a t c e f f a d r u e t ar p o t e c r i nr u o f e d t i li b iss o p al rap tiudart es sep yt ed egaxim ed erita m ne ++C rap etre ffo trebil ednarg al ,erocne L
eula vl

. erid--tsec ,noitatce ffa srpa ed ellec tse noisserpxe ettec ed elani f ruelav al ,udnetne neiB . elbairav al ruelav al retce ffa ned tnava n ois ser p xel dr o ba d r e ul a v d
j 5 5 = j

: euq ellet noisserpxe enu te mrep iuq ec tseC . e d t iv i ta ic oss a e nu e d ss op n o it at c e f f a d r u et ar p o t e c , i c i u qs uj s rt n o c n er s n o v a s u o n e u q x u e c s u ot t n e m eri art n o C
eh cuag e t iord

50

7.1 Leur rle

7 Oprateurs dincrmentation et de dcrmentation

6.3 Laffectation peut entraner une conversion

6.2 Loprateur daffectation possde une associativit de droite gauche

Oprateurs et expressions CHAPITRE 4

i = i + 1 n = n - 1 i = j = 5

li el le uq al r us li e ll e u q a l r u s

eu lav l

eula vl

, s a c s el t n a v i u s , i u q

. etr op al ed etiord calp tse liuqsrol noitatnemrcdtsop ed ruetarpo nu ; etr op a l e d e h c u a g c a l p t s e l i u q s r o l n oitat ne m rc d r p e d r u et ar p o n u : ares ton noitatnemrcd ed ruetarpo nu etsixe li ,erinam emm al eD
-; i++ ; + +i

eula vl

eu la v l

eu lav l

++

: s et n el a vi u q t n os ) e si li t u n i c n o d evuort es ruelav ruel elugriv-tniop nu rap seni mret tnos snoisserpxe sel rac snoitcurtsnid ne ib ti g as li , ic i( s n oi tc ur ts ni xu e d s ec , is ni A .s rpa u o t na v a ca lp t ne m mer f fi d n i er t tuep ruetarpo tec , e n u d n oi t a t n e m r c n i d t e f f e l etr o p m i l u es e u qsr o l , u d n e t n e n e i B .etrop li e l l e uq a l r us a l e d e t i or d c a l p t s e l i u q sr o l n o i t a t n e m r c n i t s o p e d r u e t a r p o n u ; etr op li el le uq al r us al ed ehcuag calp tse liuqsrol noitatnemrcnirp ed ruetarpo nu : ts e e u q ti d n O n o iss er p x el e d r u el a v a l i ci r a c( r u e l a v al t e r u e l a v a l a r e t c e f f a .) t se
5 ++i 0 n 6 i 5

eula vl

srpa

: n o iss er p x el , t u a v is , is ni A .noitatnemrcni tnava elbairav al ed ellec tse etnadnopserroc noisserpxel ed r u el a v a l , etr op li el le uq al r us al c alp tse r u et arp o t ec e uqsr ol ,e h cn a ver nE . r u e l a v al t e r u e l a v a l a r e t c e f f a
i 1 n 6 i 5 i i

: noisserpxel , tse ed ruelav al is ,isniA .noitatnemrcni srpa ed ellec tse noisserpxe ettec ed ruelav al euq riov ed tnatropmi tse lI .) ed noitatne mrcni( noitca enu esilar ,torcrus ed ,iuq siam ,ruelav enu edssop t n e m el u es n o n i u q n oi ss er p x e e n u eri a f f a s n o v a s u o n , n o i t a t c e f f a l r u o p e m m o c , er o c n e L
i i i 1

.noitat -nemrcni srpa ed ellec tse ruelav as te , ed ruelav al ed retne mrcnid tef fe ruop a : n oi ss er p x e l ,is n i A . ettec rus tnatrop serianu sruetarpo sed rap sesilar ert tnevuep snoitca sec ,++C nE
eu la vl

n = i++ - 5 n = ++i - 5 ++i

7 - Oprateurs dincrmentation et de dcrmentation

51

: recalpmer zerruop suov ,isniA .stnassiup sulp erocne sruetarpod esopsid ++C siaM : t n e me su e ga t na va t i a alp m er : elpmexe raP .snoitatce ffa seniatrec ed erutircl rei filp mis ed tneiatte mrep noitatnemrcnid sruetarpo sel tnem moc riov ed snonev suoN
i++ i = i + 1

. e x el p m o c s u l p t n a t u a d ares et na d n o pserr o c a l e u q e c n atr o p m i d s u l p t n a t u a d ar d n er p t c e ps a t e c , u d n et n e neiB .sti mil uep euqleuq isnia tnevuort nes noitammargorp ed sruerred seuqsir se L
eulav l

sio f xued eriaf el ne ma tse nouq srola enrecnoc

: e u q el l e t n oi t a t o n enu snad ,te ffe nE .segagnal sertua sed trapulp al snad esim ed tse iuq ecnadnoder al retivd egatnava dnarg el tuotrus tner ffo te snoisserpxe seniatrec ed erutircl tneglla sruetarpo seC

.e tr op li e ll euq al ru s al e d r u et ar -pol rehcorppar xueim ruop alec ,eria f el sap en ecnadnet ttulp snova suon ,noitatne m -rcnid sruetarpo sed sac el snad ,tnadnepeC .snoitcurtsni son ed tilibisil al ertorcca ruop edutital ettec tnevuos snosilitu suoN .etrop li sleuqsel rus sednarpo sel te ruetarpo nu ertne secapse srueisulp uo nu recalp ed )eriotagilbo non siam( elbissop sruojuot tse lI
eu lav l

.)snes ed ue sap srola tiaruan noisserpxel ; e n u s a p t s e n i u q n oi s s e r p x e l uqilppa t tiarua reinred ec ,noitatnemrcnitsop al euq eriatiroirp sulp t tiava * is(
eu lav l i*3

: s n es n u a et n a v i us n o iss er p x e l ,is n i A .t n etr o p s l i e l l e u q a l r us al relosi ruop sesht -nerap sed re yolpmed eriassecn tios liuq snas seuqilpmoc zessa snoisserpxe sed erircd tnettemrep )51ehpargarap ua uaelbat riov( serianu sruetarpo sec ed sevel stiroirp se L
eula vl

52

8 Les oprateurs daffectation largie

eu lav l

: n oi t a t o n a l s n a d al sio f elues enuuq etic en no


i++

7.3 Leur intrt

7.2 Leurs priorits

Oprateurs et expressions CHAPITRE 4

i += k i = i + k i = i + 1 3 * i++ * j-- + k++

: r ap

e uqrameR

u o s u l p ts e n e t a t l u s r el s i a m r u e t a li p m o c el r a p s e t p e c c a t n o s ) e u qir m u n e p y t ert u a n u sr e v euqir mun ep yt nud( snoisrevnoc sel setuot ,noitatce ffa enud srol ,elarng erina m enuD . etcef fa ert riovuop ruop ne eitrevnoc etiusne ares erinred ettec ; ep y t ed ruelav enu arinruo f iuq ec ,etiord eutis noisserpxel ed noitaulavl drobad tuot arenartne
n tn i tao lf taolf x tn i n

: n oi ta tc e f fa l , ep yt ed te ep yt ed tse is ,elp mexe raP .etnad - nopserroc n oisserpxel ed iulec ed tner f fid ep yt nud tse erinre d ettec euq srol sd ,ecirt -pecr al ed ep yt el snad eci ffod noisrevnoc enu tiudortni noitatce ffa enu ,sruellia raP .ep yt ed tnemetsujad te seuqirmun snoit -omorp ed selgr sel euqilppa li ,sac ec snaD .snoisserpxe sed noitaulavl snad seticilp mi s n o isre v n oc se d eri u d ort n i n e m a er t t u e p r ue ta li p mo c el t n e m m o c u v j d s n o va s uo N
eulavl

.) n g is n o n r ei t n e e p yt n u c u a( s e ll e us u s n o it a u t is s el dr o b a d t u o t s n or e n i m a x e s u o n , s e ti ci l p m i s n o isr e v n o c s e l r u o p ti a f s n o v a l s u o n e m m o c , er o c n e L

.tilibissop ettec rap snrecnoc sap tnos en nosiarapmoc ed sruetarpo sel euq neib zetoN .eigral noitatce ffad ruetarpo nu ceva nosiarap moc ed ruetarpol sap zedno fnoc eN
=<

.euqissalc noitatce ffad ruetarpol rap tne mmeuqr f etiudortni ecnadnoder al retiv tneubirtnoc te snoitcurtsni sen -iatrec ed erutircl resnednoc ed tnette mrep ,noitatne mrcnid xuec em moc ,sruetarpo seC = > > = < < = & = ^ = | = % = / =* =- = + : )41 ehpargarap uauq snoredroban suon euq stib ed sruetarpo sed tia f ne tnednopserroc sreinred qnic sel( eigral noitatce ffad sruetarpo s mmon sruetarpo xuaevuon sec suot ed etlp moc etsil al icioV .stib ed noitalupinam ed te seuqitmhtira serianib sruetarpo sel suot enrecnoc tilibissop etteC
lvalue oprateur= expression

: emrof al ed snoitatce ffa sel resnednoc ed temrep ++C ,elarng erinam enuD
a *= b

: er oc ne xu e i m , uo
53

9.1 Cas usuels

9 Les conversions forces par une affectation

n = x + 5.3 ; lvalue a = a * b =

e uqrameR

: ne

lvalue

oprateur

9 - Les conversions forces par une affectation

expression

: rap

emm ud

C egagnaL

.ruetid emm el zehc ,ruetua egarvuol snad snoisrevnoc setnerffid sec rus selliatd srt snoitamrofni sed zerevuort suoV .1
e lbuod

)e lbuod (

-po tec euq neib zetoN .etrop li elleuqal rus noisserpxel ed e p y t e l s n a d n oisr e v n o c al reutce ffed tse elr el tnod erianu ruetarpo nu tia f ne dnopserroc n oi ta t o n a L . ne eitrevnoc eritne noisserpxel ed ellec ruelav e mmoc arua
e lbuod p /n

: n oi sserp xe l ,ser i t ne se lba ira v s e d t no s te , elp me x e rap , iS .)sianar f ne "noiticreoc " sio frap( "tsac " sialgna ne mmon reilucitrap uep nu ruetarpo nud edial ,xiohc nos ed ep yt nu snad euqnocleuq noisserpxe enud noisrevnoc al recro f tuep ruemmargorp el ,etiahuos el liS
p n

.s e p yt s e d e i h cr ar i h a l t n e t c e ps er i u q s el l e c t n os s e l a g l s n o it at c e f f a s e l u es s e L
avaJ n E

... erianib fito m ud tnevuep selleuq ec tnevresrp selle ,larng nE .sennod sed tirgtnil tnetcepser selleuq itnarag tnemellun tsen lI .emron al rap sesirotua sia m ,selliesnocd t n os s el le , n g is sr e v n g is n o n e d u o , n gis n o n sre v n g is e d s ecr o f s n o isre v n oc x u a t n a u Q .)e v it is op ti os r u el a v as euq ,ertuo ne ,noitidnoc ( ngis non reitne srev tnattol f ed snoisrevnoc sel ruop emm ed ari n e l I . e virr a d e p y t e l s n a d e l b a t n e s r p er t s e e n i gir o d r u el a v al i s t n a s i a f s it a s t s e t a tl u s r ruel ,ngis non reitne ertua nu srev ngis non reitne nud snoisrevnoc sed tse iuq ec ruoP

rahc

tni

. n oi t u c x e d r u err e e n u si a m aj si a m e u d n e tt a ni r u el a v e n u u q , si p u a ,t n e s -iudnoc en reitne ep yt ertua nu srev reitne ep yt nud snoisrevnoc sel euq ,sio fetuot ,zehcaS .ertcarac nud edoc nu dnopserroc r ei t n e l e d r u el a v al i s e t n a s i a f s it a s ar e s ne nud noisrevnoc al ,erinam emm al eD .noitucxed ruerre enu ,sac sniatrec snad ,rituoba arruop no ,torcrus ed ,sia m ertua nu tnemennorivne nud tner ffid ert arruop unetbo tatlusr el tnemelues non ,esilar sap tsen noitidnoc ellet enu iS . ep yt el snad elbatnesrper ts e e t n a tt o l f r u e l a v a l e d er i t n e ei tr a p al i s e u q el b at p e c c a t a t l u s r n u ari nr u o f e n ) et n e d c r p noitcurtsnil snad uej ne esim tse iuq ellec euq ellet( n o isr e v n o c a l , el p m e x e r a P . s a c s ert u a s el s n a d e m m e d s ul p a v n e n l i ,s e p y t s e d e i h cr ar i h a l e d s n e s n o b e l t n a v i us u ei l t n a y a n o isr e v n o c e d s a c el s n a d ) n ois i c r p ed etrep elleutnev enuuq ertua( esop es en e mlborp nucua is ,te ffe nE .tnasia fsitas snio m
tn i tni >- taolf
1

54

10 Loprateur de cast

9.2 Prise en compte dun attribut de signe

Oprateurs et expressions CHAPITRE 4

(double) ( n/p )

-ttil euqserp eriudart ed ,

l enn o itidn o c rueta rp o l

: etnavius erinam al ed sussed-ic esarhp al tnemelar e d e d i a l e c r g , e l bi s s o p t s e l i , + + C n E


Si a>b alors a sinon b if ( a>b ) max = a ; else max = b ;
n p

: esarhp ettec rap eini fd ert tiarruop xam ed ruelav a L .b ed te a ed sruelav xued sed ednarg sulp al xam elbairav al eubirtta ellE

: e t n a v i us n oi t c ur ts ni l s n or d is n o C

.edna med n o isr e v n o c a l e d e c n a l b m es i ar v e d s n o i t a c i f ir v s e n i a tr e c r e u t c e f f e d r u e t al i p m o c u a te mrep n oitaci filauq ettec ,elar ng erina m enuD .tsac_cimanyd te tsac_terpretnier , t s a c _ t s n o c : t s a c e d r u e t ar p o n u r e i f i l a u q e d s n o a f s e r t u a d e t s i x e l i u q s n or r e v s u o N : sr o la t ne t o n es s et n e d cr p s n o isre v n oc se L . n o it at n e m l p m il ed setnadnepdni isauq tnos selleuq ei fingis iuq ec ,tsac_citats rap sei filauq tnos euq -irmun ep yt ertua nu srev euqirmun ep yt nud snoisrevnoc se L .erutan al resicrp ned nifa ,tsac ed ruetarpo nu rei filauq ed ruem margorp ua temrep ++C ,rueugir etuot nE
seriatnemlpmoc snoitamrofnI
static_cast<double> (n/p) // attention parenthses obligatoires

33333 .3

e lbuod

.)tnedcrp ehpargarap el tne melleutnev ze yover( tnasiafsitas sniom uo sulp tse ne tatlusr el siam , tsac ed ruetarpo nu rap selbasilar tnos seuqir mun snoisrevnoc sel setuot ,noitatce ffa enu rap secro f snoisrevnoc sel ruop em moc ,udnetne neiB .). .. e d er dr o l e d r u e l a v e n u ti ar d n ei t b o n o , e d t e e d sr ue la v se m m sel ceva( ehpargarap ec ed tubd ne esoporp noisserpxel rap unetbo iulec ed tner ffid srola tiares tatlusr e L .) ne( n o is iv i d al u e il t ia uq t n a va n e ri tre v n oc sr o la t n e i ar e n m a s e t i c il p m i s n oi sr e v n o c e d s e l g r s el ; n e ri tre v n oc dr o b a d t iar i u d n oc
p e lbuod elbuod n

01

e lbuod

tn i

: noisserpxel ,isniA .enrecnoc noisserpxel seshtnerap ertne rec -alp ed eriassecn tne melarng tse liuq tia f )41 ehpargarap ua uaelbat riov( evel tiroirp rue L .)tnemerueirtlu snorertnocner suon euq sruetniop sel emmoc svird sep yt sel sirpmoc y( stner ffid sep yt ed euq tsac ed sruetarpod tnatua etsixe li ,elarng erinam enuD . ru el a v e m m o c aru a n oi sserp xe e tt ec , t u a v e uq te t u a v iS . ne itrevnoc ares tatlusr el euq etiusne tnemelues tsec ; rap ed tneit -ouq ud , ep yt el snad ,luclac drobad a y li ,ici ,tid tnemertuA .noitaulav nos tneruocnoc iuq sruelav setner ffid sed ellec non te noisserpxel ed ud noisrevnoc al ecro f ruetar
3 p p n ta t lu sr

11 Loprateur conditionnel
(double) n/p

11 - Loprateur conditionnel

55

: elpmexe raP .noisserpxe emm enud nies ua sfisseccus sluclac srueisulp remirpxed ,etros euqleuq ne ,temrep ic-iulec ,te ffe nE .noisserpxed noiton ettec sulp uep nu erocne rigral av leitneuqs tid ruetarpoL .segagnal sertua sed trapulp al snad euq elarng sulp puocuaeb tiat noisserpxed noiton al ++C neuq uv jd snova suoN

.i elbairav al aretnemrcd no uo aretnemrcni no ,essua f uo eiarv tse b>a noitidnoc al euq tnavius ,icI : n o it c ur ts n i e t t e c s n a d e m m o c e s il it u t i o s r u el a v as e u q s n as e u l a v t i os e l l e n n o i ti d n o c n oi ss er p x e l e u q e h c p m e n n eir , e m m e D : b e d t e a e d sr ue la v se d e d nar g s u l p al z tnatcef fa )elugriv-tniop nu rap enimret es elle rac ,noitcurtsni enud tne mevitce ffe tigas liuq zeton( noitcurtsni enu ,elpmexe rap ,icioV .exelp moc sulp noisserpxe enu snad ruot nos ertarappa ,noisserpxe etuot em moc ,tuep ellennoitidnoc noisserpxe enu ,udnetne neiB : e m m oc e u la v ti ares e ll e uqa l : ed e t ner f fi d ts e n ois serp xe e tt ec e uq r ia lc ts e l I . z b e d r u e l a v a l et c e f f a n o , e l l u n t s e r u e l a v e t t e c , e r i a r t n o c u a , i S . z a e d r u el a v al e t c e f f a n o , e ll u n n o n ts e r u el a v ettec is ,siuP .x y ed ruelav al retce ffa drobad tuot enma noisserpxe ettec ed luclac e L : selbasnepsidni tnos seshtnerap sel o sac nu ,siofetuot ,icioV .)em margorp ud tilibisil al reroilma sio frap essiup alec euq neib( sednarpo stner - f fi d s e l r e ti mi l d n e r u o p s es h t n er a p s e d r e y o l p m e d er i as s e c n t n e m er ar ts e li u q e tr o s ed ,)noitatceffal tnava etsuj evirra li( tiroirp elbia f enud esopsid lennoitidnoc ruetarpoL : 1 + a*3 ed eulosba ruelav al tnaluclac noisserpxe enud elp mexe ertua nu icioV . ta tl us r el t i nr u o f i u q e c , e d n ar p o e m is i ort u d n o i t a ul a v a y l i , e h c n a v er n e , e ll u n ts e r u e l a v as i s ; tatlusr el tinruo f iuq ec ,ednarpo dnoces ud noitaulav a y li ,orz ed etner ffid tse ruelav as iS .ep yt leuq etropmin ed tia f ne ert tuep ic-ellec ,++C ne sruojuot emmoC .noitidnoc enud elr el euoj iuq noisserpxe erimerp al eulav ruetarpo tec ,elarng erinam enuD .: t e ? : srap s s elobm ys xued r ap e si la ir ta m es leuqel ,lennoitidnoc ruetarpol ed sednarpo siort sel tnos iuq )b te a ,b>a( snoisserpxe siort ed eutitsnoc tia f ne tse noitatce ffad ruetarpol ed etiord tnarugi f noisserpxeL
max = a>b ? a : b 3*a+1 > 0 ? 3*a+1 : -3*a-1 z = (x=y) ? a : b z = x = y ? a : b z = x = ( y ? a : b ) z = ( a>b ? a : b ) ; a>b ? i++ : i-- ;

56

12 Loprateur squentiel
Oprateurs et expressions CHAPITRE 4

.elpmis tnelaviuqd sap tnadssop en snoitcurtsnoc sed resilar ed temrep ruetarpo tec ,sellennoitidnoc selcuob sed sac el snad ,euq emm snorrev suoN
i=1 ; for (k=0 ; ... ; ... ) ...... for (i=1, k=0 ; ... ; ... ) .......
;

: ecalpmer : te

: selpmexe xued iciov nE .snoitca srueisulp uo sluclac srueisulp resilar yd cnod te ,srueisulp recalp ned artte mrep leitneuqs ruetar -pol ,noisserpxe elues enu revuort tnednettas ic-sellec o l ; selcuob sel snad uo xiohc ed snoitcurtsni sel snad rinevretni tnemmeuqr f arruop reinred ec ,ehcnaver nE .leitneuqs ruetarpo tec ed are f nol euq egasu lapicnirp el l sap tnadnepec tsen ec ,euqitarp al snaD : setnelaviuq tnos snoitalumro f xued sec ,elpmexe rap ,isniA .elues enu ne snoitcurtsni srueisulp rinur ruop silitu ert tuep ruetarpo let nu ,setreC : )seshtnerap ed egasul etiv tiroirp elbia f as( snoisserpxe srueisulp rinevretni eriaf tnemelica f tuep ,etiord ehcuag ed tivitaicossa enud esopsid iuq ,leitneuqs ruetarpo teC .etnedcrp noisserpxel rap noitat - n e m r c n i s r p a i e d r u e l a v a l es il it u n o sr o l a u q z et o N . k + i = j n o i t a t c e f f a l e d n o i t a u l a v + + i n o iss er p x el e d n o it a ul a v : a y l i , e ll e u q a l s n a d : e t n a v i u s n ois s er p x e l e d e m m e d ts e n e lI .i elbairav al ed noitatne mrcni enu tia f ne esilar )esilitu sap ares en ruelav al tnod( noisserpxe erimerp al euqsiup trtni nu retnesrp tuep : euq ellet noisserpxe enu ,ehcnaver nE .n o it ca enucua esilar en liuq te elabolg noisserpxel ed ruelav al snad sap tneivretnin liuqsiup elit -uni tse b*a ed elbalarp luclac el ,elocd sac ec snad ,setreC .) j+i ed ellec ici cnod( eluclac erinred al ruelav e mmoc dnerp iuq te j+i siup ,b*a drobad eulav iuq noisserpxe enu tse
a * b , i + j i++, a + b i++, j = i + k i++, j = i+k, j-i++ ; j = i+k ; j-- ; i++, j = i+k, j-- ;

i++ ; if (k>0) ...... if (i++, k>0) ......

: ecalpmer

12 - Loprateur squentiel

57

. er i a n u r u et ar p o n u d t e s er -ianib sruetarpo qnic ed tnesopmoc es iuq sruetarpo sec ed etsil al tinruof srpa-ic uaelbat e L . ) r ei t n e a r e s n e t at l u s r e l s i a m ( sertcarac sed reuqilppas tnemelag tnorruop sli ,eticilpmi noisrevnoc ed selgr sed unet etp moc ,sio fetuoT . , ir oir p A .ruelb messa egagnal ne noita m - margorp al sevresr tne mellennoitidart stilibissop sed isnia tnerucorp iul ic-xueC .ruelav enud erianib fitom el rus tnemetcerid relliavart ed tnatte mrep sruetarpod esopsid ++C
s re itne s epyt sed rus e uq ret r op t nevu ep en s rueta rp o s ec

.s t e j b o s e d u o s er u t c ur ts s e d s a c e l t n e m m at o n ar es e C .r u et a li p m o c el ra p t ne m l p m i ares li t n o d er i na m a l e d n ia tre c s a p ts e n n o le u q el r u o p exelpmoc tnemevitaler ep yt nud stejbod elliat al e m m-ios reluclac riovad retiv ruop ; st ne m l s ni atr ec e d e tca x e el li a t a l ert a n -noc ed eriassecn tse li sleuqsel snad selbatrop se mmargorp sed erirc etiahuos nol euqsrol : t r t ni n u er f f o r ue tar po t e C .) e tr o s euqleuq ne ,noitini fd rap( 1 sruojuot arduav )rahc(foezis ,noitatnemlp mil tios euq elleuQ .8 arduav )elbuod(foezis ; 2 ar d ua v ) t n i ( f o e z i s : etic tne mmedcrp noit - at n e m l p m il s n a d , is ni A . n n o d m o n e d e p yt n u re u qi l p pas t ne me la g t ue p r u et ar p o t e C .8 arduav )z(foezis noisserpxel ; 2 arduav )n(foezis noisserpxel : snoitaralcd sec eria ffa a nol euq esoppus nol is ,stetco 8 rus elbuod ep yt el te stetco 2 rus tnesrper tse tni ep yt el o noitatnemlp mi enu snad ,elp mexe raP .)eriom m al ed elbasserda eitrap etitep sulp al ,tia f ne ,tse tetcol euq sap zeilbuon( stetco ne elliat al tinruo f ,noitcno f enud iulec elb messer iolp mel tnod ,foezis ruetarpoL
double z ; int n ;

58

14.1 Prsentation des oprateurs de manipulation de bits

14 Les oprateurs de manipulation de bits 13 Loprateur sizeof


Oprateurs et expressions CHAPITRE 4

ini fd evuort es tiudorp tatlusr ud emm ep yt el ,tnadnepeC .sruetarpo sec rap rc erianib f it a c i f i l a u q e l e u q z e t o N f it o m e l r us ec ne d ic n i d sa p a n s e d n ar p o s e d
dengisnu/d engis

tib tib snoitarpod selpmexE


n n n ~ n p
p n &

: ela micd te elamicdaxeh ,erianib semro f suos sruelav sel uqidni tnemeuqita mts ys snova suoN .stib 61 tiasilitu reinred ec euq te ep yt ud xued setuot tneiat te selbairav sel euq soppus snova suoN .sruetarpo sec ed edial sunetbo statlusr ed selpmexe seuqleuq icioV
tni

tib tib sruetarpo sed tirv ed elbaT


ET (&) OU inclusif (|) OU exclusif (^) 0 0 0 0 1 1 0 1 1 1 1 0

.) ennod te ennod ( ednarpo euqinu nos ed stib sed nucahc resrevnid etnetnoc es lI . tib tib ep yt ud tnemelag tse ) nu tne mlpmoc ed tid( erianu ruetarpoL .srpa-ic uaelbat el rap einruo f tse elbat etteC .sednarpo xued sed nucahc ed g n ar e m m e d st i b x u e d r us r etr o p t i a f a l n o u qsr ol n o it ar p o et t e c e d t a t l u s r el t n as si nr u o f ) tirv ed elbat etid( elbat enud ritrap ini fd ert isnia tuep tatlusr rue L .sednarpo xued sed stib sed nucahc noitarpo e m m al tia f ne tneuqilppa te , sruetarpo siort se L
~ ^ |

stib ed noitalupinam ed sruetarpO


unaire ~ Complment un (bit bit)

14.2 Les oprateurs bit bit

binaire

TYPE

OPRANDE 1 OPRANDE 2

& p | p ^ p n

OPRATEUR

0000000100100010 0000011111111111 0000011011011101 1111101010010001 0000010101101110 0000001110110011 & | ^ << >> 0 0 0 1

ET (bit bit) OU inclusif (bit bit) OU exclusif (bit bit) Dcalage gauche Dcalage droite

SIGNIFICATION

14 - Les oprateurs de manipulation de bits

0122 07FF 06DD FA91 056E 03B3 1 0

290 2047 1757 -1391 1390 947 1 1

59

- i ul ec o n o it at n e m l p m i e n u s na d

tni

.stib 61 dnopserroc ic e p y t e d s o p p u s , e d e n gi s ti b e l er i ar t x e d t e mr e p
n

tni

trohs rahc

: e m m e D .) uo ep y t ed ti os euq( ed e t ior d e d st ib 4 se l e uq etp mo c n e er dn erp e n ed te mr ep


gnol n n &

: noisserpxel ,elp mexe raP .sertua sel tnauqsam ne ruelav enud stib sed eitrap enu redccad temrep ruetarpoL

tni d engi snu

dengis

. esoppus tse elbairav al euq sidnat , esoppus tse elb -airav a L .egalacd ed sruetarpo sec ed edial sunetbo statlusr ed selpmexe seuqleuq icioV .)engis tib ud noitagaporp ,erocne ici ,a y li( engis tib ua xuag tnores src isnia stib sel , e d ti g as l i S . or z t n os e h c u a g s r c i s n i a st i b s el , ed tigas liS .ednarpo reimerp ud fitacifilauq ud tnednepd sreinred seC .ehcuag tnessiarappa stib sed euq sidnat ,sudrep tnos etiord ed stib sel ,sio f etteC .etiord al sr e v s ti b e d e d e r i a n i b f i t o m e l t n a l a c d n e e u n e t b o r u e l a v a l t a t l u s r e m m o c t i n r u o f
p tni dengis n dengisnu d engi snu/dengis 3 n

: e m m e D .etiord tnessiarappa orz stib sed te sudrep tnos ehcuag ed stib sel ; ehcuag al sr e v s ti b e d e d e r i a n i b f i t o m e l t n a l a c d n e e u n e t b o r u e l a v a l t a t l u s r e m m o c t i n r u o f
2 n

: elpmexe raP .ednarpo dnoces el rap ein -ruo f tse ,stib ed erbmon ne emirpxe ,egalacd ud edutilpmaL .ednarpo rei merp ruel tnad -nopserroc erianib fito m el rus ehcuag uo etiord segalacd sed resilar ed tnettemrep slI

n~

.)erianib fitom nos sap egnahc en iuq ec( r al c d t t i a v a i s t iare s ed elamicd ruelav al ,selp mexe stnedcrp son snad ,isniA .selleutibah selgr sel rap
tni d engi snu n 54146

60

14.4 Exemples dutilisation des oprateurs de bits

egalacd ed snoiitarpod selpmexE


n << 2 n >> 3 p >> 3 0001010110111000 0000000010101101 0000000010101101 1011011101111000 1111011011101111 0001010110111011

14.3 Les oprateurs de dcalage

Oprateurs et expressions CHAPITRE 4

n & 0x8000 n & 0xF n >> 3 n << 2

(signed) n (unsigned) p

0000010101101110 0000010101101110

1010110111011110 1010110111011110

.soporp uaelbat el snad tnerugi f sli ,sniomnaN .stnadnopserroc sertipahc sel snad tne merueirtlu sidut tnores sruetarpo seC .):: ruetarpo( etrop ed snoitulosr sel ; *. te *>- ,. ,>- sruetarpo : tejbo nud uo erutcurts enud spmahc sed secner fr sel ; & te * : egasserdad sruetarpo sel ; ][ rap se s il ar u ae lba t n u d s t ne m l se d s ec n er fr se l : tnemelleitnesse tnos eC .tiroirp ed selgr sed sesi muos ,slet euq tnat ne ,te sruetarpo sed emmoc serdisnoc tnos stne ml sed recner fr tnavres snoitaton ed erb mon niatrec nu ,++C neuq areton nO .tivitaicossad edo m ruel ed sngapmocca ,etnassiorcd tiroirp ed erdro rap sssalc ,++C egagnal ud sruetarpo sed etlpmoc etsil al tinruo f srpa-ic uaelbat e L

: erianib noitatnesrper as ed tib reinred el tnemelp mis tnani maxe ne ,riapmi uo riap tse reitne nu is edicd iuq emmargorp ed elpmexe nu icioV
61

15 Rcapitulatif des priorits de tous les oprateurs


reitne nud tirap al ed tseT
donnez il est donnez il est un entier : 124 pair un entier : 25 impair #include <iostream> using namespace std ; main() { int n ; cout << "donnez un entier : " ; cin >> n ; if ( n & 1 == 1 ) cout << "il est impair" ; else cout << "il est pair" ; }

15 - Rcapitulatif des priorits de tous les oprateurs

++C ed sruetarpo seL


>-- - --< >-- >-- >-- >-- >-- >-- >-- >-- >-- >-- >-- --< , =>> =<< =| =^ =& =% =/ =* =- =+ = :? || && | ^ & =! == => > =< < >> << - + % / * *. *>][ eteled eteled ][wen wen ts ac_ tsnoc tsac_ terp retnier ts ac_ci tat s tsa c_cima nyd tsac foezis & * ~ ! -- ++ - + . > - ][ )( )erianib - e ssalc ed etro p( :: )erianu - elabolg etrop( :: leitne uqS noita tce ffA )erianret( lennoitidnoC euqigoL euqigoL stib ed noitalupinaM stib ed noitalupinaM stib ed noitalupinaM slennoitaleR slennoitaleR egalacD euqitmhtirA euqitmhtirA noit celS

- --< >- >- --<

erianU ecner fR et rop e d noi tulosR

tiv ita icossA

sruetarpO

eirogtaC

62

Oprateurs et expressions CHAPITRE 4

: e u q s e ll et e g a h c i f f a d s n o it c ur ts ni s e d rtnocner jd snova suon ,2 ertipahc ud 1 ehpargarap ud elp mexe e mmargorp erton snaD

.em margorp ua tner - a ps n art t n e m e l a t o t sr o l a e ts er t c e ps a t e c s i a m ,sr ei h ci f s e d sr e v s t i n u s e c e d n oi t c eri d er e n u reutce ffed tnette mrep stnemennorivne sed trapulp a L .)narcl ed ertne f enu tnemsicrp sulp( narcl dradnats eitros al te reivalc ua dnopserroc dradnats ertnel ,tnemelarnG .dradnats eitros al rus erutircl ; dradnats ertnel rus erutcel al : ri o va s ,lennoitasrevnoc tcepsal snommon suon euq ec tnati mil suon ne ,elle mro fni zessa erinam ed ,seitros-sertned stilibissop sec snotnesrp suov suon ertipahc ec snad ,iouqruop tseC .stelp moc semmargorp sed erirc recne mmoc ruop stniop stner ffid sec idut ze ya suov e u q er d n e t t a d t n a d n e p e c x u e i c i d u j s a p t i ar es e n l I . t n e m er u e ir tl u u q s n or e dr o b a n s u o n euq ruetarpod noitini fdrus ed te tol f ed snoiton sel rus tnesoper seitros-sertne sel ,++C nE

1 Affichage lcran

cout << "Bonjour\n" ; cout << "Je vais vous calculer " << NFOIS << " racines carrees\n" ;

Les entres-sorties conversationnelles de C++

: st ni o p x u e d s n a d e d is r e ll e u q er i d s n o v u o p s u o n , j d t e serod siam ,tnemerueirtlu einruo f ares tilibissop ettec ed etcaxe noitatrpretnil ,erocne L : el u es e n u ne r es ne d n oc es t n e v u e p : s n o it c urts n i x u e d s e l ,t i a f n E . t u o c t o l f u a e s i m s n a r t n o i t -amro fni euqahc ruop etner ffid noitcurtsni enu silitu snova suon ,tnedcrp elpmexel snaD
cout << "valeur :" ; cout << n ; cout << "valeur :" << n ; valeur : 25 int n = 25 ; cout << "valeur : " ; cout << n ;

.)51 ertipahc ua liatd ne snoredroba suon euq( ruetar -pod noitini fdrus al ++C ne e mmon nol euq ec dnopserroc ruetarpo emm nu snoitac - i fi n gi s sr u eis u l p r e u b irt t a d t i li b iss o p et t e C .s er t c ar a c e d e t i u s e n u n e er i t n e eri a ni b r u el a v e n u r itr e v n o c r u o p e g at a mr o f n u d c or p a li , d n oc es e l s na d , e n a hc al e d s er tc ara c sel si msnart a li ,reimerp el snad : sac xued sel snad tner ffid tne metse finam tse << ruet -arpol ed elr e L .reitne ep yt ed noita mro fni enu etiusne ,)etnatsnoc( enahc ep yt ed noita m -r o f ni e n u dr o b a d , t u o c t o l f el r us r e y o v n e r u o p < < r u et ar p o e m m el si li t u s n o va y s u o N : t n a v i us t a tl us r el t n e h ci f f a s e ll E

: s n oi t c ur ts ni s e c s n or d is n o C

.selpmexe seuqleuq rus alec sno yoV . et i or d e h c u a g e d t i v i t a i c oss a e n u e d ss o p li ; t a tl us r n u ti nr u o f li ; snoita mro fnid sep yt stnerf fid ruop ini fd tse li : ri o va s ,setnassertni stirporp ed tiuoj ruetarpo tec ,selpmexe son resoppus tneiassial el e mmoC .noisserpxe enu dnopserroc etiord ed ednarpol ; ) n o it a mr o f n il e d r i o v e c er e d el b it p e cs us erid--tsec ,eitros ed tol f nu tnemsicrp sulp( tol f nu dnopserroc ehcuag ed ednarpol : s e d n ar p o x ue d e d es o psi d r u et ar -po tec euq tiov no ,tnemsicrp sulP .narcl tnadnopserroc ,tuoc tol f el rus noitamro fnil ed re yovned tnatte mrep ruetarpo nu tiat << euq erid ed stnetnoc snoit suon suoN
64
Les entres-sorties conversationnelles de C++ CHAPITRE 5

1.2 Exemple 2 1.1 Exemple 1

.)l -xuec tnemelues te( stnatsixe sruetarpo sel suot rinifdrus ed temrep ++C euq tnemelag snorrev suoN .stib ed noitalupinam ed ruetarpo nu tse << euq uv jd snova suoN .1

: c e v a , e h c n a v er n E .s e u q it m ht ir a s n ois s er p x e s e l e u q e nr e c n o c e n n o i s r e v n o c e d e r n e g e c r a c , e u q i r m u n n o i t o m o r p e n u e s i m u o s s a p t s e n c e d r u el a v a l : )rahc ep yt ed tnat c( euq ellet noitcurtsni enu snad euq neib areton no ; tnadnopserroc ertcar -ac el neib tneitbo no ,sac sel suot snad : )engis ed stubirtta sed non uo edssop liuq( rahc : euqnocleuq esab ed ep yt nud noisserpxe enud ruelav al tuoc rus re yovne ruop << ruetarpol resilitu zevuop suov ,elarng erinam enuD
cout << c ;

: rap se m margorp s ov s uot recne m moc cn od te ,gnisu noitcurtsni enu er i u d or t n i t i a e g i l b o s u o v e l l e u q u q i d n i a s u o v n o o 2 er t i p a h c u d 9 . 1 e h p a r g ar a p u a t n e m er i a m m o s e t n e s r p t a n o i t o n e t t e C . d t s s m o n e d e c a p s e l s n a d s i n i f d t n os stnadn opserroc selob m ys sel euq te >maertsoi< m on ed ett-ne rei hci f nu s na d tner - u g i f > > t e < < s r u e t ar p o s e d n o i t a s i l i t u l s er i a s s e c n s n o i t a r al c d s e l e u q s n o l e p p a R 2 . t n e ss i ar a p p a s e l l e o er dr o l s n a d , s t i ar t s e d r a p s e s i l o b m ys s n o i t a mr o f n i s e l t u o c t o l f e l r u s r e y o v n e d t e mr e p : euq ellet noitcurtsni enuuq tnatsnil ruop erttemdad ti ffus suov li ,etnediv sap tarap suov en etnedcrp noitatrpretnil iS 1
cout << ----- << ----- << ----- << ----- ;

.n ed ruelav al tioer ,": ruelav" ed tne mgua tuoc tol f el erid--tsec , ": ruelav" << tuoc tol f el ,spmet e mixued nu snad ; ": ruelav" enahc al tioer tuoc tolf el ,spmet reimerp nu snad : icec em moc retrpretnis tuep ic-elleC
(cout << "valeur :") << n ;

: etnelaviuq tse etnedcrp noitcurtsnil ,isniA .enrecnoc noitamro fnil uer a liuq srpa tol f em m ec tse ,ednarpo rei merp ne tol f nu tioer li dnauq ,<< ruetarpol rap inruo f tatlusr el ; enigirod ruetarpol em moc etiord ehcuag ed fitaicossa tse << ruetarpol
1

1.3 Les possibilits dcriture sur cout


#include <iostream> using namespace std ; /* on utilisera les symboles dfinis dans */ /* lespace de noms standard sappelant std */

se uqrameR

1 - Affichage lcran

65

p e d r u e l a v a l , et i u s n e ; n i c t o l f u d e t i a r t x e d r o b a d t s e n e d r u e l a v a l e u q e r i d s n o v u o p s u o n ,tuoc ruop einruo f ellec eugolana )ellemro f uep te( egami noitatrpretni enu rennod ruoP
(cin >> n) >> p ; cin >> n >> p ; cin << c ; int n ; char c ; ..... cin << n ; cout << c + 1 ; // lit une suite de caractres reprsentant un entier, // la convertit en int et range le rsultat dans n // lit un caractre et le range dans c

: t n el a v i u q ar e s

: euq stirporp serinred xued sec ecrg tseC.etiord ehcuag ed tivitaicossa enu edssop li ; t a tl us r n u ti nr u o f li

: elpmexe tec snad em moc ,snoita mro fnid sep yt stnerf fid ruop ini fd tse li : riovas ,setnassertni stirporp ed tiuoj ruetarpo tec ,erocne L .)...noitatce f fad ruetarpo nud ehcuag ed ednarpol ruop tiaf el en nouq sulp sap ,noisserpxe enu ici rinruof ed elbissop sap tiares en li ,sio f ettec ; << ruetarpol ceva ecnerf fid al zeton( eulavl enu dnopserroc etiord ed ednarpol ; ) n oi t a mr o f n il e d r i nr u o f e d el b it p e cs us erid--tsec ,ertned tol f nu tne msicrp sulp( tol f nu dnopserroc ehcuag ed ednarpol : sednarpo xued ed ,<< em moc ,esopsid li ,tne msicrp sulP .reivalc ua tnadnopserroc nic tol f el rus noita mro fnil ed eril ed tnattemrep ruetarpo nu tiat >> euq erid ed stnetnoc snoit suon suon ,2 ertipahc ud 1 ehpargarap ud elp mexe em margorp erton snad ,erocne L

. fi t a l ut i p a c r n u ar e s o p or p suov 22 ertipahc ud 1.1 ehpargarap el te etius al rap stilbissop sertuad snorertnocner suoN .)"ruojnob" e mro f al ed( etnatsnoc enahc ; elbuod gnol uo elbuod uo taolf : tnattol f ; 1 e d u o 0 e d e g a h c i f f al ar d n e it b o n o : n e l o o b ; ) e n g is e d st u bir tt a s n as u o c e v a( g n o l u o t n i , t r o h s : r ei t n e ; t n i e p y t e d n e i b a r e s 1 + c n ois s er p x e l e d r u el a v al

66

2.1 Introduction

2 Lecture au clavier
Les entres-sorties conversationnelles de C++ CHAPITRE 5

-nocner al uqsuj stnavius sertcarac sel suot etpmoc ne dnerp no siuP .ruetaraps nud tner - ffid ertcarac rei merp uauqsuj ruetniop el recnava rap ecnem moc erutcel etuot ,tuafd raP

.)f\( egap ed tne megnahc el te )v\( elacitrev noital -ubat al ,)t\ ( elatnoziroh noitalubat al : tneuqr f sniom puocuaeb egasu nud sertua siort etsixe ne lI .)n\( engil ed ni f al te ecapsel tnos xuapicnirp xued se L .sennod sel snad reilucitrap elr nu tneuoj ) scnalb secapse uo( sruetaraps stid sertcarac sniatrec ,trap ertuaD .nop mat uaevuon nu snad ruot nos ecalp erdnerp ardneiv iuq sertcarac ed engil ellevuon enu essinruof ruetasilitul euq ardnetta >> ruetarpol ,seuluov sruelav sel setuot eril ruop sap tnesi ffus en nop mat el snad setnesrp snoita mro fni sel is ,tnemeuqorpicR .erutcel eniahcorp enu ruop s el b i n o ps i d t n et s er s t i ol p x e n o n s er t c ar a c s el , er u t c el e n u r a p e t i ol p x e s a p ts e n n o p m at u d ei tr a p e n u i S . e t p m o c n e er d n er p er t c ar a c ni a h c or p e l e n g is d i u q r u e t ni o p n u et si x e lI .)setnavius selleutnev sed uo erutcel erimerp al ed essigas liuq( snioseb sed erusem te ru f ua >> ruetarpol rap ertcarac rap ertcarac ,rolpxe tse reinred eC . nopmat m mon eriomm tne mecalpme nu snad tnemeriosivorp egnar tse )esirpmoc engil ed ni f( sertcarac ed etius etteC .engil ed ni f enu dnopserroc iuq ertne ehcuot al tnappar f ne edilav li u q s er t c ar a c e d e ti us e n u ri nr u o f e d r u et as il it u l e d n a m e d r e i v al c u a er ut c e l er i m er p a L

. fitalutipacr nu aresoporp suov 22 ert -ipahc ud 1.2 ehpargarap el te etius al rap stilbissop sertuad snorertnocner suon ,erocne L . s e t p e c c a t n os 1 u o 0 s er i t n e sr u e l a v s e l s el u es : n e l o o b ; )e m m arg orp n u snad tnarugi f etnatsnoc enu ruop euq noitaci fingis ed tnon iuq L uo l , F ,f sruetaci fidom sel resilitu sap tuep en no ,noitnetta( E uo e ceva ,elleitnenopxe uo ela micd noitaton ne tnattol f nud ,reitne nud emro f al suos rinruo f el tuep no : elbuod gnol uo elbuod uo taolf : tnattol f ; )engis ed stubirtta snas uo ceva( gnol uo tni ,trohs : reitne ; t na d n o pserr oc er t cara c u d edoc el neib tneitbo no ,sac sel suot snad : )engis ed stubirtta sed non uo edssop liuq( rahc : euqnocleuq esab ed ep yt ed snoitamro fni sed redcca ruop >> ruetarpol resilitu zevuop suov ,elarng erinam enuD

.n ed ruelav al tiartxe a ne nouq srpa ,nic tolf el uneved tseuq ec ed erid- -tsec ,)tolf nu tse >> ruetarpol ed tatlusr el ,<< ruop e mmoc( n >> nic tol f ud etiartxe tse
67

2.4 Premires rgles utilises par >> 2.3 Notions de tampon et de caractres sparateurs 2.2 Les diffrentes possibilits de lecture sur cin
2 - Lecture au clavier

. e d il a v ni er t c ar a c e d n oi t o n e t t e c e d f it al er t c e ps al n ei b z e t o N .). .. t n a tt o l f n u r u o p e u o E e u q ert u a ert t e l e n u ,r e it n e n u r u o p t n i o p nu elpmexe rap( eria f ne tuev nouq egasul troppar rap ,edilavni ertcarac nud ertnocner ,ruetaraps ertcarac nud ertnocner : et i a fs i t as ts e s n o it i d n o c x u e d s e d e n ul e u q s d n o p m a t u d n o it ar -olpxe nos etrra >> ruetarpol ,noitamro fni enud erutcel al ed srol ,elarng erinam enuD .)a( tnaruoc ertcarac ec ed ritrap nopmat ud noitarolpxel erviusruop ruetarpol en ma )c( etnavius ruelav al ed erutcel a L .n ruop 21 ruelav al cnod tinruo f te noitarolpxe nos tp morretni ruetarpol ,eritne ruelav enud noitacirbaf al sap tnanevnoc en a ert -carac eC .a siup ,2 siup ,1 sertcarac sel ertnocner >> ruetarpol ,n ed erutcel al ed srol ,icI : senrecnoc selbairav sel snad seunetbo sruelav sed ngap mocca ,elpmexe tec ze yoV
cin >> n >> c ; 12a@ cin >> n >> c ; 12 a@ cin >> c >> n ; a25@ a^^25@ ^a25@ n = 12 n = 12 c = a c = a c = a c = a c = a n = 25 n = 25 n = 25

: eri at n e m m o c n u t n e m e ll e u t n e v t e s e u l t n e m e v it c e f f e sr u el a v s e l , dr a g er n e , c e v a ) e n gi l e d ni f e n u @ te ec a pse n u e n g is d ^ ( s e l b -issop sesnopr ed selpmexe sed ,erutcel euqahc ruop ,snossinruo f suoN .rahc ep yt ed tse c euq sidnat ,tni ep yt ed tnos p te n euq snosoppus suon sleuqsel snad selpmexe seuqleuq icioV .) 6. 2 e h p ar g ar a p u a s n or d n e i v er y s u o n( e n n o d al s n a d t n es r p tsen edilavni ertcarac nucua euqsrol snio m ud ,)ruetniop el tnaalp y ne( ruetaraps nud ert
68
Les entres-sorties conversationnelles de C++ CHAPITRE 5

2.5 Prsence dun caractre invalide dans une donne


cin >> n >> p ; 12^25@ n = 12 p = 25 // faon la plus naturelle de fournir les informations voulues. ^12^^25^^@ n = 12 p = 25 // on a introduit quelques espaces supplmentaires dans les donnes. 12@ @ ^25@ n = 12 p = 25 // on a fourni trois lignes dinformation, dont une "vide". // loprateur >> a aliment trois fois le tampon 12^25^48^8@ n = 12 p = 25 // lexploration du tampon sest arrte sur lespace suivant 25 // les caractres non exploits ici pourront tre utliss // par une prochaine lecture

ssinorhcnys lam tnelbmes narcl te reivalc el dnauQ


donnez une valeur pour n : 12 25 merci pour 12 donnez une valeur pour p : merci pour 25

.engil e misiort al esop noitseuq al erdnopr sap an ruetasilitul ,icI .etnedcrp al rap etiolpxe non noitam -ro fni enu resilitu tuep erutcel enu tne mmoc tiov y nO .nop mat ud elr el ertsulli elpmexe teC .edilavni ertcarac nud ecnesrp al eud eini fni elcuob enu , e d il a v n i er t c ar a c n u r a p er ut c e l al e d e g a c ol b n u ,narcl te reivalc el ertne tnerappa emsinorhcn ys ed euqnam nu : r i t u o b a t u e p n o ,s a c s n i a tr e c s n a d ,euq tnartno m ,sussed-ic setnesrp selgr sel tnartsulli selp mexe siort snosoporp suov suoN
2.6.1 Manque de synchronisme entre clavier et cran

.noitautis al reuqolbd tnemmoc te tolf nud tatl retset tnem -moc 22 ertipahc ud 3 ehpargarap ua ,snorrev suoN .)edilavni ertcarac ua tnadnopserroc ruelav al sap ardneitbon no ,ertcarac nud erutcel al ed tigas lis emm( areuohc erutcel ed erueirtlu evitatnet etuot : euqolb tse tol f el rus erutcel al te egnahcni etser eulavl al ed ruelav al ,sac ec snaD .etnadnopserroc eulavl al ruop ruelav ed reuqirba f up sap an nO . e di l a v n i er t c ar a c e c e d ri tr a p ar e u ni t n o c t ol f e l r us e t n a vi us er u t c e l a l , s a c e c s n a D .) er - i a f n e t i a l u o v n o u q e gs ul t n a n e v n o c s er t c ar a c sr u e is ul p u o n u r e v u ort u p a n o , e d il a v n i ertcarac el tnava ,tid tnemertua( etnadnopserroc eulavl al ruop ruelav enu reuqirba f up a nO : r u et ar p ol e d r u eir t l u t n e m etr o p m o c el r us t n e ul f ni iuq setner ffid secnatsnocric xued reugnitsid tua f li ,edilavni ertcarac ed sac ne ,sio fetuoT
69

2.6 Les risques induits par la lecture au clavier

#include <iostream> using namespace std ; main() { int n, p ; cout << "donnez une cin >> n ; cout << "merci pour cout << "donnez une cin >> p ; cout << "merci pour }

" << p << "\n" ; " << n << "\n" ; valeur pour p : " ; valeur pour n : " ;

2 - Lecture au clavier

: )ellun non tse n ed ruelav al euq tnat ueil a noititpr al : elih w ...od elrtnoc ed erut -curts al tnasilitu ne tnavius ertipahc el rus snopicitna suon ,ici( emmargorp nud egalcuob el renartne tuep noitucxel ed srol esserdalam enu tnem moc tnartno m elpmexe ertua nu icioV .) e tr o s al ed setiart tneiares erutcel ed sevitatnet sertuad te uqolb tser tse tolf el( egnahcni et -ser tse c ed ruelav al ,euqolb tnat erutcel al : noitautis al uqolbd sap an ,c snad ertcarac n u d er u eir t l u er u t c el e d e v i t a t n e t a l ,is n i A . er ut c e l al u q o l b a li t e e g n a h c n i n e d r u el a v al ssial a li ,eritne ruelav enu reuqirba f ed elbapac sap srola tiatn li e mmoC .edilavni tne metse fina m ,x ertcarac el rtnocner a >> ruetarpol ,n ed erutcel eri merp al ed sro L
edilavni ertcarac nu rap uqolb reivalC
donnez un entier et un caractere : x 25 merci pour 4467164 et a donnez un caractere : merci pour a

: e mmargorp ud tnatrecnocd tne metrop moc nu renartne tuep )er ffihc nud ueil ua ert -tel enud eppar f ici( ruetasilitul ed esserdalam enu tnem moc ertno m iuq elp mexe tec ze yoV
2.6.2 Blocage de la lecture

70

2.6.3 Boucle infinie sur un caractre invalide

Les entres-sorties conversationnelles de C++ CHAPITRE 5

#include <iostream> using namespace std ; main() { int n ; do { cout << "donnez un nombre entier : " ; cin >> n ; cout << "voici son carre : " << n*n << "\n" ; } while (n) ; } #include <iostream> using namespace std ; main() { int n = 12 ; char c = a ; cout << "donnez un entier et un caractere :\n" ; cin >> n >> c ; cout << "merci pour " << n << " et " << c << "\n" ; cout << "donnez un caractere : " ; cin >> c ; cout << "merci pour " << c ; }

.82 ert ipa h c u d 2.7 e hpar gar ap ua , eri o m m ne egata mrof nu tnasilitu ne serutcel sel tne melbanevnoc rerg ,emm te 22 ertipahc ud 3 ehpargarap ua reuqolbd el te tol f nud tatl retset tne mmoc snorrev suoN .egarvuo tec snad drat sulp stnesrp tnores iuq stne ml sed leppa eria f ed eriassecn tse li ,eriaf ec ruoP .stnedcrp sem margorp sed tnemetropmoc el reroil mad elbissop tse lI

e uqrameR

. t ne m e n n or i v n el ed tnadnepd eirporppa ehcramd enu tnavius em margorp ud noitucxel erpmorretni arduaf lI ...eini fni elcuob al od ,uohc cnod tno setnavius serutcel sel setuoT .euq - ol b t a er u tc el a l te ) 3 ic i( el b air a v al e d r u el a v al re i fi d o m s nas , e u p m orre t n i ts es n e d er ut -cel a L .reitne nud noitacirba f al ruop edilavni em moc rdisnoc t a ertcarac el ,icI
e di l a v n i e r t c a r a c n u r u s e i nif ni e l c u o B
: : : : voici voici voici voici son son son son carre carre carre carre : : : : 9 9 9 9

donnez un voici son donnez un voici son donnez un donnez un donnez un donnez un ...

nombre entier carre : 9 nombre entier carre : 9 nombre entier nombre entier nombre entier nombre entier

: : 3

2 - Lecture au clavier

71

r of

eli h w

eli h w... od

h cti ws

esl e...fi

. te , s n oi t cur ts ni : s el cu ob se d ; te s n oi t c ur ts ni : x i o h c s e d : r es il a r e d t n a tt e mr e p s e r ut c ur ts s n oit -curtsnid esopsid li ,trap enud ,teffe nE .edirb yh uep euqleuq tse ++C egagnal el ,tniop ec ruS . O T O G l e n n oi ti d n o c n i t n e m e h c n ar b e d n o it c ur ts ni e n u d t s o ps i d r e i nr e d e c ,r u e u g ir e t u o t n e , e u q n ei b l a cs a P e g a g n a l u d , e l p m e x e r a p ,s a c el ti at a l e c ; e r u t c ur ts noita mmargorp al ed selatne madno f serutcurts sed eldi f noitcudart enu ,eriartnoc ua ,uo ; cisaB sreimerp sed ,elp mexe rap ,sac el tiatc ; )lennoitidnocni uo lennoitidnoc( tnemehcnarb ed noiton al rus tne melleitnesse sesab : ert tnevuep ic-sellec ,sac el tnaviuS .selcuob sec uo xiohc sec resilar ed tn at t e mrep , sem mon ,snoitcurtsnid tnesopsid segagnal sel suoT .s n oi tc urt s ni d n n o d elbmesne nu siof srueisulp retpr ed tid tnemertua ,selcuob sed reutcef fed tilibissop al ed ; ) .. .l u c l a c ed tatlusr nu ,ruetasilitul ed esnopr enu ,elpmexe rap ,ert tnavuop ic-sellec( sec -natsnocric sel tnavius tnemmer f fid retropmoc es ed ,xiohc sed reutce f fed tilibissop al ed : tnemelleitnesse tnenneivorp em margorp nud tnegilletni tne metrop moc el te ecnassiup al rO .tnessiarappa selle o erdrol snad erid--tsec ,tnemelleitneuqs setucxe tnos snoitcurtsni sel ,em margorp nu snad ,iroirp A
elr tno c ed sno it cur tsni

Les instructions de contrle

. tc erro c t ne me uq -ixatn ys tse iuq ec ,ediv noitcurtsni elues enud utitsnoc colb nu tse } ; { euq erocne zetoN .ediv sproc nu tna ya selcuob ed sac el snad tilibisil eruelliem enu aretroppa )neir ...rap calpmer ert iroirp a tiarruop leuqel( colb reimerp el euq snorrev suon ,ehcnaver nE .tneitnoc liuq elpmis noitcurtsnil rap calp mer ert sruojuot arruop liuqsiup ,euqitarp ne trtni nucua etnesrp en colb dnoces e L : stcerroc scolb ed selp mexe xued icioV .ediv ert eriov ,noitcurtsni elues enu eriudr es tuep colb nU . c o l b n u u o e r ut c u rts , e l p m i s : + + C n o it c ur ts ni e l l e u q etr o p m i n sr u oj u ot ar e n g is d i c-i u le c , t o n j d s n o va l s u o n e m m o C . n o i t c u r t s n i d e mr e t e c r e n n oi t n e m s n e m a t n e v u os s n or es s u o n ,s n o i t c urt s n i s e t n er f f i d s e d e x a t n ys al e d n oi t -pircsed al snaD .evisrucr etros euqleuq ne tse noitcurtsnid noiton al ,++C neuq snoleppaR .scolb sertuad re mre fner ruot ruel srola tnevuep selleuqsel ,)selcuob ,xiohc( serutcurts snoitcurtsnid euq )elugriv-tniop nu rap seni mret( selpmis snoitcurtsnid neib issua rigas tuep lI .seuqnocleuq tnemulosba tnos colb nu snad tnarugi f snoitcurtsni se L .} te { ertne secalp snoitcurtsnid etius enu tse colb nU
{ } { i = 1 ; }

.e lar n g er i na m e n u d colb nu tseuq ec ici resicrp ed snosoporp suov suoN .colb nu rinevretni eria f tneiavuop serinred sec euq tatsnoc snova suoN . te : serilucitrap elrtnoc ed snoitcurtsni sed rtnocner jd snova suon ,2 ertipahc ud 1 ehpargarap ud noitcudortnid elpmexe erton snaD
rof fi

. er ti p a h c e c s n a d r ei d -utd snosoporp suon suon euq ++C egagnal ud elrtnoc ed snoitcurtsni setnerffid sec tnos eC .)nartroF snad e mmoc( elpitlu m egalliugia nu te )lacsaP snad e mmoc( rutcurts tnemetia frap elpitlum xiohc nu ertne eriaidmretni tia f ne tse hctiws noitcurtsnil : lennoitidnocni tnemehcnarb ed snoitcurtsnid esopsid li ; te , : s n orr e v e l s u o n em moc ,euqsiup etnesba tnemelatot sap tse nen tnemehcnarb ed noiton al ,trap ertuad ,siaM
e u nit n o c k a erb ot og

74

1.1 Blocs dinstructions

1 Les blocs dinstructions


Les instructions de contrle CHAPITRE 6

fi

b < a

.xua f tneived lun te iarv tneived lun non : seuqigol sruetarpo sel ruop ertnocner jd elgr al tnavius neloob ne tnemeticilpmi eitrevnoc tse iuq )etnattol f uo eritne elpmexe rap( euqnocleuq noisserpxe enu tse snad tnarugif noitidnoc al ,rueugir etuot ne ,siaM .) elp mexe rap( enneloob tiat xiohc el tnassigr noitidnoc al o erusem al snad ,slerutan ed rei filauq tiarruop nouq snoitcurtsnid selp mexe sed rtnocner jd snova suoN
fi

. n oi t c n o f e n u s e l a c ol s e l b a ir a v s e l e u q s p m et e m m ne liatd ne sulp nimaxe ares iuq tcepsa tec rus sulp sap snoretsisnin suon ,tnatsnil ruoP
..... { int p ; ..... // ici, on peut utiliser p } ..... // mais, ici, p nest plus connu

: s n ad emmoc ,colb nud rueirtnil selbairav sed reralcd tne melag esirotua suov ++C siaM
int n ; ..... { // ici, on peut utiliser n }

: colb ec snad elbasilitu tse colb nu tnava eralcd elbairav etuot ,udnetne neiB .em margorp nud nies ua noitasilitu nos tnava elbairav enu reralcd ed eriassecn tiat liuq uv snova suoN

. c o lb n ud etius al s fitsep metni sel ugri v-st niop sed retuojad cnod zetiv .)sirp moc elu griv - t n i o p( e l p m i s n o i t c ur t s n i e n u u q e u q i x a t n y s el r e m m e l e u o j c o l b n u , tr a p er t u a D . n o i t c ur t s n i e d n o c e s a l e d n i f a l e l u gr i v- t n i o p n u e u q n a m l i r a c t c er r o c n i t s e : c o l b ec , is ni A .elugriv-tniop nu rap eni mret sruojuot tse elp mis noitcurtsni etuot euq sap zeilbuoN
{ i = 5 ; k = 3 }

2 Linstruction if
1.2 Dclarations dans un bloc
e uqrameR
2 - Linstruction if

75

: t ne lav iuq sap

ts e n

: enneloob erocne tse noisserpxe ettec o selpmexe sed icioV .snoitca seniatrec resilar e m m-elle tuep ic-ellec euq tia f ++C ne noisserpxed noiton al ed essehcir a L .euqnocleuq tse xiohc el tnannoitidnoc noisserpxeL

. t ner u gi f y i uq se lp mi s s n o it cur ts ni s el t ne me ll er ut a n tn e ni mre t iuq xuec tsen ec is ,elugriv-tniop nucua ios ne esopmin noitcurtsni ettec ed exatn ys a L

;)

loob

. e r u t c ur ts n o it c ur ts n i ; c o lb ; )elugriv-tniop nu rap enimret( elp mis : erid--tsec ,seuqnocleuq snoitcurtsni : 2_noitcurtsni te 1_noitcurtsni ne tnemeticilp mi eitrevnoc tnemelleutnev( euqnocleuq noisserpxe : noisserpxe fi
noi tcur tsn iL

: s e mr o f x u e d et n e s -rp fi noitcurtsni ettec euq etros ed ,sfitatluca f tnos tiudortni liuq noitcurtsnil te esle to m e L

76

2.2 Exemples

2.1 Syntaxe de linstruction if

Les instructions de contrle CHAPITRE 6

if ( i<max && ( j++ == 10) ) ...... i = i + 1 ; if ( i-1 < limite ) ...... if ( i++ < limite ) ...... i = i + 1 ; if ( i < limite ) cout << "OK" ; if ( ++i < limite) cout << "OK" ;

: e hc n a ver n E

: tnelaviuq tse : sr u el li a r a P

: tnelaviuq tse

e uqrameR

if (expression)

else instruction_1 if (expression) instruction_1

instruction_2

; s or u e 0 0 0 1 r u eir f n i t n a t n o m n u r u o p % 0 : r i o v as , e u n et b o is ni a r u el a v al ed dnepd xuat el tnod esimer enu etiusne tilbat lI .)% 6,91 ed tnatsnoc AVT ed xuat nu ceva( tnadnopserroc CTT xirp el eluclac te sexat sroh xirp elp mis nu ennod ne til lI .esimer ceva noitarutca f ed e mmargorp nud tigas lI .suqirb mi fi ed noitasilitud elp mexe nu icioV .essap es iuq ec xueim el erggus iuq noitatnesrp ednoces al tsec ,elp mexe erton snaD
Un se rapporte toujours au dernier t attribu.
esle

: et n av i us al t se t u gib ma e ll et e n u r ev e l r uop + +C e g a g n a l e l r a p e t p o d a e l g r a L .s a c e c s n a d n e ir t i ar e h c i f f a n e d n o c es a l e u q si d n at , ess u a f tse b=<a noitidnoc al euqsrol "nnodro non" rehciffa tiariudnoc noitatrpretni erimerp a L
if (a<=b) if (b<=c) cout << "ordonn" ; else cout << "non ordonn" ;

? noitatnesrp ettec erggus el emmoc trpretni li-tsE : e lp m e xe t ec s na d s ac el tseC .tarappa tugib ma enu o snoitautis seniatrec etsixe li ,esle ed retrop moc sap en uo retropmoc tuep noitcurtsni ettec euq ec ed unet etp moc ,rO .fi snoitcurtsni sertuad remre fner ,ruot ruel ,tnevuep selle ,reilucitrap nE .seuqnocleuq tnemulosba ert tneiavuop noitcurtsni e n u d xi o h c u d e itr a p e u q a h c s n a d t n ar u g i f s n o i t c urt s n i s e l e u q n n oi t n e m j d s n o v a s u o N
if (a<=b) if (b<=c) cout << "ordonn" ; else cout << "non ordonn" ;

fi

: enneloob s u l p ts e n noitcurtsnil tnassigr noisserpxel o selpmexe sed tnanetniam icioV . n o it al u m -ro f emixued al snad ,ehcnaver ne ,tsel elle ; essua f tse xam<i noitidnoc al euqsrol eulav s a p ts e n noisserpxel ,noitalu mro f eri merp al snad ,tid tnemertuA .eriassecn tse alec euqsrol euq ednarpo dnoces nos eulavn & & ruetarpol ,tid jd snoval suon emmoc ,rac
++j

2.3 Imbrication des instructions if

// // if (a = b) { ..... } // // //

if (a) { ..... }

if (a<=b) if (b<=c) cout << "ordonn" ; else cout << "non ordonn" ;

j++ ; if ( i<max && ( j == 10 ) ) ......

excut si a non nul, quel que soit le type de a (entier, flottant, et mme pointeur) affecte b a et excute le bloc si a est non nul on obtient parfois un avertissement du compilateur li au risque de confusion entre a=b et a==b

rencontr auquel un

esle

fi

2 - Linstruction if

na pas encore

? ic-ellec erggus el e mmoc neib uo

77

78

Les instructions de contrle CHAPITRE 6

.22 ertipahc ud 5.5.1 ehpargarap ua e mmargorp tnedcrp ud eroilma noisrev enu zerevuort suoV .tnemerueirtluuq stnesrp tnores en iuq stol f ed sruetalupina m stner ffid resilitu tuaf li ,tnadnepeC .sruelav setner ffid sel tnemelbanevnoc tnangila ne ,statlusr sed noitatnesrp al reroilmad elbissop tse lI

.s oru e 000 5 la g u o r ue irp us t na t n o m n u r u op % 5 ; s or ue 000 5 r u eir f n i te s oru e 000 2 la g u o r ue irp us t na t n o m n u r u op % 3 ; s or ue 000 2 r u eir f n i te s oru e 000 1 la g u o r ue irp us t na t n o m n u r u op % 1
#include <iostream> using namespace std ; main() { const double TAUX_TVA = 19.6 ; double ht, ttc, net, tauxr, remise ; cout << "donnez le prix hors taxes : " ; cin >> ht ; ttc = ht * ( 1. + TAUX_TVA/100.) ; if ( ttc < 1000.) tauxr = 0 ; else if ( ttc < 2000 ) tauxr = 1. ; else if ( ttc < 5000 ) tauxr = 3. ; else tauxr = 5. ; remise = ttc * tauxr / 100. ; net = ttc - remise ; cout << "prix ttc = " << ttc << "\n" ; cout << "remise = " << remise << "\n" ; cout << "net payer = " << net << "\n" ; } donnez le prix prix ttc = remise = net payer = donnez le prix prix ttc = remise = net payer = hors taxes : 500 598 0 598 hors taxes : 4000 4784 143.52 4640.48

esimer ceva noitarutcaf : suqirbmi fi ed elpmexE


e uqrameR

.colb el tius iuq noitcurtsnil essap no ,eriartnoc sac el snaD .etteuqit ettec srpa tnarugi f noit -curtsnil ehcnarb es no ,sac el tsec iS .eunetbo isnia ruelav al tnadnopserroc x esac emro f al ed etteuqit enu etsixe lis tius iuq colb el snad ehcrehcer no ,siuP .)n ici( hctiws tom el srpa tnarugif noisserpxel reulav rap drobad tuot ecnemmoc nO .tius emmoc eluord es noitucxe noS .)hctiws tom ua ecnemmoc elle( sengil tiuh rus ici dnets hctiws noitcurtsniL hctiws noitcurtsnid elpmexe reimer P
donnez un entier : 5 au revoir

.noitucxed selpmexe siort ed ngapmocca emmargorp ed elp mexe reimerp ec ze yoV

3.1 Exemples dintroduction de linstruction switch

3 Linstruction switch

donnez un entier : 2 deux au revoir donnez un entier : 0 nul au revoir #include <iostream> using namespace std ; main() { int n ; cout << "donnez un entier : " ; cin >> n ; switch (n) { case 0 : cout << "nul\n" ; break ; case 1 : cout << "un\n" ; break ; case 2 : cout << "deux\n" ; break ; } cout << "au revoir\n" ; }

elp mexe rei m er P )a

3 - Linstruction switch

79

: elp mexe nu iciov nE .tnavarapua ertnocner t tiaruan etnasiafsitas ruelav enucua o sac el snad arehc -narb es em margorp el elleuqal etteuqit e mmoc tluafed lc-to m el resilitud elbissop tse lI
tl u afe d e t t e u q i t ) b

kaerb snoitcurtsnid ecnesbal nE


donnez un entier : 5 au revoir

: s n o i t c urt s n i d ecnesbal ne e mmargorp emm ec tiariudorp euq ec ,elp mexed ertit ,ze yoV .latnemad -no f tse noitcurtsni ettec ed elr el euq neib zetoN .colb ud ritros ed tia f ne edna med ic-elleC
ka erb

: ici ,riovas ,etnavius noitcurtsnil ,tnemellerutan ,etiusne essap nO


cout << "nul\n" ;

et u c x e n o l t e

0 esa c

: erid--tsec ,etnadnopserroc noitcurtsnil etteuqit enu tnemevitcef fe evuort no ,0 tuav n dnauq ,elpmexe raP
80
Les instructions de contrle CHAPITRE 6

donnez un entier : 2 deux au revoir donnez un entier : 0 nul un deux au revoir #include <iostream> using namespace std ; main() { int n ; cout << "donnez un entier : " ; cin >> n ; switch (n) { case 0 : cout << "nul\n" ; case 1 : cout << "un\n" ; case 2 : cout << "deux\n" ; } cout << "au revoir\n" ; } break ;

3 - Linstruction switch

81

#include <iostream> using namespace std ; main() { int n ; cout << "donnez un entier : " ; cin >> n ; switch (n) { case 0 : cout << "nul\n" ; break ; case 1 : cout << "un\n" ; break ; case 2 : cout << "deux\n" ; break ; default : cout << "grand\n" ; } cout << "au revoir\n" ; } donnez un entier : 2 deux au revoir donnez un entier : 25 grand au revoir

sniatrec si mo tnemeriatnolov snova suon leuqel snad ,elpmexe tec ze yoV . .)stniop-xued sruel ed sengap mocca( sevisseccus setteuqit srueisulp ,evitini fd ne ,erid--tsec ,snoitcurtsni snas setteuqit sed ; et t e u q it e n u d et i us a l s n oi t c ur ts ni sr u e is ul p : revuort tuep no ,elarng erinam enuD
#include <iostream> using namespace std ; main() { int n ; cout << "donnez un entier : " ; cin >> n ; switch (n) { case 0 : cout << "nul\n" ; break ; case 1 : case 2 : cout << "petit\n" ;
ka erb

tlua fed etteuqitL

la r ng sulp elpmex E )c

e n u d r u el a v a l e d t i l a g d n o s i a r a p m o c a l e u q r e i l b u o s a p t u a f e n l i , t e f f e n e ; s e r i t n e sr u e l a v s e d s e t t e u q i t s e d sr u e l a v s e l e t i m i l n o i t c ur t s n i e t t e c e u q l a mr o n t a r a p l I 1

: seriatnemmoC
snoit cu rtsnid_etius tni

ar e s l i r a c t p e c c a t s e

rah c

.seuqnocleuq snoitcurtsnid ecneuqs : ; ) ne i tre v n oc ( euqnocleuq reitne ep yt nud etnatsnoc noisserpxe : ; e u q n o c l e u q e r i t n e n o i s s e r p x e : n oi s s e r p x e


etnatsnoc

hctiws noitcurtsniL
}

: ) fi t a tl u c a f t s e t n e m r e f -ner sliuq ec euq tnei fingis ] te [ stehcorc sel( noitcurtsni ettec ed elarng exatn ys al icioV

hctiws noitcurtsnid larng elpmexE


donnez un entier : 25 grand

82

3.2 Syntaxe de linstruction switch

Les instructions de contrle CHAPITRE 6

donnez un entier : 3 moyen

donnez un entier : 1 petit moyen

switch (expression)

case 3 : case 4 : case 5 : cout << "moyen\n" ; break ; default : cout << "grand\n" ;

{ case constante_1 : [ suite_dinstructions_1 ]

[ default ..............

case constante_n : [ suite_dinstructions_n ] case constante_2 : [ suite_dinstructions_2 ]

: suite_dinstructions ]

.ruessecorprp ud enifed# evitcerid al riruocer tialla f li ,selbar -ap moc stilibissop sed rinetbo ruoP .laglli tiat tnedcrp elp mexeL .setnatsnoc snois -serpxe sed snad rinevretni sap tneiavuop en tsnoc tubirttal ceva seralcd selbairav se L
C nE

n o i t ar a l c d a s e d u a e v i n u a n o i t - nevretni elues enu e m usr es ETIMIL e d ruelav al ed noitaci fid o m en u ,elp mexe tec s n a d , i s n i A . s e m m a r g or p s e d e g ar t m ar a p n i a t r e c n u t e mr e p r e d c or p e d n o a f e t t e C
const int LIMITE = 20 ..... switch (n) { ..... case LIMITE-1 : ...... case LIMITE : ...... case LIMITE+1 : ...... }

: elpmexe tec s nad em moc t s n o c t u b ir t t a l c e v a s e i n i f d s e l b a i r a v s e d l e p p a e r i a f t n e m e l a g t u e p a l e c s i a M .e mm - i o s l u c l a c e l e r i a f e d e l b i s s o p sr u o j u o t sr o l a t s e l i u q s i u p t i m i l e t s er n e t r t n i l s i a m


5 + 2
n c

: e u q s e l l e t s n o i ss er p x e s e d ,rs neib ,ert tuep aleC .ruetlalip moc el rap selbaluclac s noisserp xe sed is nia e m mon n O . s e t n a ts n o c s e d t n e m e l u e s n o n t e s e t n a ts n o c s n o i ss er p x e s e d e s ir o t u a e x a t n ys a L 2 . ep y t u d ts e o
tni

: er o c n e u o ,

: e p y t u d s n o i t c ur t s n o c s e d es i r o t u a a l e C . n e n o i sr e v n o c t n e m e u q i t a m ts ys a r u a y l i u q n n o d t n a t , er t c ar a c e p y t e d s e t n a t s n o c s e d r e y o l p m e d e l b i ss o p ts e l i , e h c n a v er n E . s l u c l a c s e d e t i m i l n o i s i c r p a l e d u n e t e t p m o c , er i o t a l a t n e m e v i t a l er t s e e t n a t t o l f e t n a t s n o c e n u d e l l e c e t n a t t o l f n o is s er p x e
tni

switch (n) { case A : ..... case 559 : ..... ....... }

switch(c) { case a : ...... case 132 : ..... ...... }

3 * 8 - 2

r ah c

e p y t e d ts e o

3 - Linstruction switch

83

: egahciffad noitcurtsnil ed noitucxe a y li ,elbanevnoc esnopr enu inruo f a ruet -asilitul euq srpa emm ,ici ,isniA .essua f tneived ennoitnem noitidnoc al euq sd non te sn o it c urts n i s es e d te lp m oc sr uo crap n u srpa uq ti a f es e n el cu ob e d ei tro s al e uq ne ib ze t oN .)ni f ne erugi f elihw eitrap al euq tia f el sruelliad erggus el e mmoc( noititpr euqahc ed ni f al uq eni maxe tsen elcuob ettec tigr iuq noitidnoc al ,te ffe nE .sio f enu sniom ua euruocrap sruojuot tse elle ,emm erutan as rap ed ,sio fetuoT .etpr ares elcuob ellet enu siof ed neib moc iroirp a sap tias en nO .evitisop ruelav enu sap tinruof en liuq tnat )eul ruelav al tnahci ffa ne( ruet -asilitul erbmon nu edna med elle ,ici ,tid tne mertuA .)ellun non ,++C ne ,erid--tsec( eiarv tse )0=<n( ennoitne m noitidnoc al euq tnat )colb nu ici( tneitnoc elleuq noitcurtsnil etpr
do { ....... } while (n<=0)

el i h w .. . o d n o i t c u r t s n i d e l p m e x E
donnez un nb >0 : -3 vous avez fourni : -3 donnez un nb >0 : -5 vous avez fourni : -5 donnez un nb >0 : 10 vous avez fourni : 10 reponse correcte

. el i h w . .. o d noitcurtsnil riovas ,++C ne elcuob enu resilar ed noa f erimerp al tnanetniam snodrobA

84

4.1 Exemple dintroduction de linstruction do... while

4 Linstruction do... while

Les instructions de contrle CHAPITRE 6

printf ("vous avez fourni %d", n) ;

: noitcurtsniL

#include <iostream> using namespace std ; main() { int n ; do { cout << "donnez un nb >0 : " ; cin >> n ; cout << "vous avez fourni : " << n << "\n" ; } while (n <= 0) ; cout << "reponse correcte" ; }

: e r ir c s t n e m e l a g t u e p 1 . 3 e h p ar g a r a p u a s o p or p e l p m e x e L 5 . n o i t c ur t s n i e n u r a p t n e m e l l e u t n e v r i tr o s n e d e l b i ss o p a r es l i , s n o rr e v e l s u o n e m m o c , o e r u s e m a l s n a d t r t n i n u r e t n e s r p ar r u o p
ka erb

: e h c n a v er n E . t r t n i n u c u a e u q i t a r p n e e t n es - r p e n e l l e u q n e i b , e t c e rr o c t n e m e u q i x a t n y s ts e e l l e ; e i n i f n i e l c u o b e n u e t n e s r p er
do { } while (1) ;

: s e t c err o c t n os s n o i t c ur ts n o c s e C .)elu griv-tniop nu rap eni mret e m m d nauq sia m( ediv ert tuep retpr noitcurtsniL 3 : er ir c t n e m u l o s b a t u a f l I . e t c er r o c n i t s e : isni A .eni mret al iuq elu griv-tniop e l s a p z e t t e m o n , e l p m is n o i t c u r ts n i e l u es e n u e t i m i l es r e t p r n o i t c u r ts n i l e u q sr o L 2 . n o i t c ur t - s n i e t t e c e d n i f a l e l u g r i v- t n i o p n u d e c n es r p a l t r a p er t u a d , e l c u o b a l e d e ti us r u o p a l t i g r i u q n o i s s e r p x e l e d r u o t u a s e s h t n e r a p e d e c n e s r p a l , t r a p e n u d , n e i b z e t o N 1
do cin >> c while ( c != x) ; do cin >> c ; while ( c != x) ;

.) l o o b ne e itr e v n o c t ne m el l e u t ne v ar es i u q( e u q n oc le u q n o isser p xe : n o i s s e r p x e elihw ...od noitcurtsniL


do instruction while (expression) ;

4.2 Syntaxe de linstruction do... while

cout << "vous avez fourni : " << n << "\n" ; do { cout << "donnez un nb >0 : " ; cin >> n ; } while (cout << "vous avez fourni : " << n << "\n", n <= 0) ; do instruction while (1) ; do { } while ( ... ) ; do ; while ( ... ) ;

: n o i t c ur t s n i l e u q s a p z e i l b u o N

: n o i t c u r ts n o c a L 4

seriatnemmoC

4 - Linstruction do... while

85

. n oi t c ur t -snil riovas ,ellennoitidnoc elcuob enu resilar ed noa f emixued al tnanetnia m sno yoV
elih w

. l e i t n e u q s r u e t ar p o l e d t n e m e n n oi t c n o f u d u n e t e t p m o c , e u l a v n o i s s er p x e er i n r e d a l er t t i o d e t i u sr u o p e d n o i t i d n o c a l e u q n e i b z e t o N
do { } while (cout << "donnez un nb >0 : ", cin >> n, cout << "vous avez fourni : " << n << "\n", n <= 0 ) ;

: e r ir c s e r o c n e t i arr u o p e l p m e x e er t o N . t r t n i n u r i o v a sr o l a e v u or t e s n o i t c a e l l e u t - n e v l e l u e s t n o d s er t u a s e l u l a v r i o v a s r p a , e d n ar p o r e i nr e d n o s e d r u e l a v a l r i n -ruo f ed etnetnoc es leitne uqs ruetarpol ,trap ertuaD .elu gri v-tniop nu rap e nimret
cout << "vous avez fourni : " << n << "\n"

86

5.1 Exemple dintroduction de linstruction while

5 Linstruction while

: e m m u o
do { cout << "donnez un nb >0 : " ; } while (cin >> n, cout << "vous avez fourni : " << n << "\n", n <= 0) ;

: n o i s s er p x e e n u , t i a f n e , t s e
Les instructions de contrle CHAPITRE 6

donnez donnez donnez donnez

#include <iostream> using namespace std ; main() { int n, som ; som = 0 ; while (som<100) { cout << "donnez un nombre : " ; cin >> n ; som += n ; } cout << "somme obtenue : " << som ; }

un un un un

nombre nombre nombre nombre

: : : :

25 17 42 9

: n o i t c u r ts n o c a L 4 . n o i t c u d or t n i d e l p m e x e l e d e l l e c e t n e l a v i u q s a p t s e n : n o i t c u r t s n o c e t t e c , i s n i A . e l c u o b a l e d e t i u sr u o p e d t s e t e l t n a v a s e u l - a v t n o r es t n e u t i t s n o c a l i u q s n o is s er p x e s e l s e t u o t sr o l a u q s a p z e i l b u o n , l e i t n e u q s r u e t a r p o l l e p p a t i a f i u q n o is s er p x e e n u ts e e t i us r u o p e d n o i t i d n o c a l e u q sr o L 3 . t n e m o m e c e i n i f d t i o s r u e l a v a s e u q er i a s s e c n c n o d t s e l I . e l c u o b e d r uot reimerp el tnava eula v tse etiusru op ed noiti dnoc e m moc esilitu noisserpxeL 2 . ) e l p m i s t s e i c- e l l e c i s , t i u s i u q n o i t c ur t s n i l e d n i f a l n u t n e m e l l er u t a n a r e v u or t n e s l i( n i f e d e l u gr i v- t n i o p n u c u a e s o p m i n e x a t n ys a l , er t n o c r a p , e u q z e u qr a m e R . e t i us - r u o p e d n o i t i d n o c a l r et i m i l d r u o p s e s h t n e r a p e d e c n e s r p a l n e i b z e t o n , e r o c n e L 1
while ( cout << "donnez un nombre : " , cin >> n, som<=100 ) som += n ;

.) l o o b ne e itr e v n o c t ne m el l e u t ne v ar es i u q( e u q n oc le u q n o isser p xe : n o i s s e r p x e elihw noitcurtsniL


instruction

.) i c i s a c e l s a p t s e n i u q e c( e dr o b al n o u q s d e s s u a f t s e n oi t i d -noc al is siof enucua euruocrap ertn neib srt tuep elcuob ellet enu , ceva tiassap es iuq ec tne meriartnoc ,isni A .srpa non te elcuob al ed sruocrap euqahc tnava eni maxe ts e et i usr u o p e d n o i ti d n o c a l ,s i o f et t e c , e h c n a v er n E . tiare f el emmoc ,)orz ed etner ffid( eiarv tse ennoitnem noitidnoc al euq tnat )colb nu ici( tius iuq noitcurtsnil etpr
elih w ...od elih w ...od

elihw noitcurtsnid elpmexE


donnez un nombre : 21 somme obtenue : 114

5.2 Syntaxe de linstruction while

while (som<100)

while ( expression1, expression2 ) ;

while ( expression2 ) ;

1 n o i ss e r p x e o d : e t ne l a v i uq ts e

seriatnemmoC

while (expression)

: n oi t c ur ts n o c a L

5 - Linstruction while

87

elih w elcuob enu rap ro f elcuob enud tnemecalpmeR


#include <iostream> using namespace std ; main() { int i ; i = 1 ; while (i<=5) { cout << "bonjour " ; cout << i << " fois\n" ; i++ ; } }
tnava

: tnavius ua tnelaviuq tse tnedcrp em margorp e L .sr uo crap e uqa hc e d n i f al e u l av ts e , n i fn e ,e m isi or t a L .sr u ocrap e uqa h c e u l a v t s e el l E . el c u o b a l e d e ti usr u o p al e n n o i ti d n o c e m i x u e d a L . e l c u o b a l s n a d rertned tnava )siof elues enu( eulav tse eri merp a L .snoisserpxe siort tia f ne etropmoc
for ( i=1 ; i<=5 ; i++ )

: en g il a L

ro f noitcurtsnid elpmexE
bonjour bonjour bonjour bonjour bonjour
rof

. n oi t c ur t -snil riovas ,selcuob sed resilar ed tnattemrep noitcurtsni erinred al tnanetnia m snoidut

88

6.1 Exemple dintroduction de linstruction for

6 Linstruction for

Les instructions de contrle CHAPITRE 6

#include <iostream> using namespace std ; main() { int i ; for ( i=1 ; i<=5 ; i++ ) { cout << "bonjour " ; cout << i << " fois\n" ; } }

: em margorp ec zerdisnoC

1 2 3 4 5

fois fois fois fois fois

)2( rof noitcurtsnid elpmexE


#include <iostream> using namespace std ; main() { for (int i=1 , j=3 ; i<=5 ; i++, j+=i) { cout << "i = " << i << " j = " << j << "\n" ; } } }

: n o a f e t t e c e d t n e d c r p e l p m e x e l er ir c d te mrep iuq ec ,noitaralcd enu ert tne melag tuep rof noitcurtsnil ed eitrap eri merp a L
)1( ro f noitcurtsnid elpmexE
i i i i i = = = = = 1 2 3 4 5 j j j j j = = = = = 3 5 8 12 17
elih w rof

: e lp m e xe t ec ert n o m el emmoc ,trebil ed sulp te mrep suov ++C ne noisserpxed noiton al ed tilarng al siaM .r u et p m o c u d n oi t at ne mr c n i l d n o ps err o c ei tra p e m i si ort a l ; ) 5 = <i( t rr a d n o i ti d n o c a l d n o ps err o c ei tr a p e m i x u e d a l ; )i ici( ruetpmoc nud noitasilaitinil dnopserroc eitrap erimerp al : ruetpmoc ceva elcuob tnevuos em mon nol euq ec ed noitasilar al riovas ,rof noitcurtsni enud tneuqr f sulp el egasul dnopserroc tnedcrp elpmexeL

.) ( e d n o c es a l s n a d n oi t c ur ts ni t n e i v e d ) ( n o i t a l u m r o f e r i m e r p a l snad noisserpxe tiat iuq ec euq tiaf ++C ne noisserpxed noiton al ed tilarng al ,erocne L
89

6.2 Linstruction for en gnral

#include <iostream> using namespace std ; main() { int i, j ; for (i=1 , j=3 ; i<=5 ; i++, j+=i) { cout << "i = " << i << " j = " << j << "\n" ; } }

6 - Linstruction for

: e m m ar g or p e d e l p m e x e r e i m er p er t o n e d n o i t c u r t s n i l s e t n e l a v i u q t n o s s n o i t c ur t s n o c s e c , i s n i A . e v i t a t l u c a f ts e s n o i s s e r p x e s i or t s e d e n u c a h C 2
r of

: e u q er i d s n o v u o p s u o n , e l ar n g e r i n a m e n u D 1

. e u q n o c l e u q n o i s s e r p x e : 3 _ n oi s s e r p x e ; )loob ne eitrevnoc tnemelleutnev ares iuq( euqnocleuq noisserpxe : 2_noisserpxe ; non uo sesilaitini ,ep yt em m nud selbairav srueisulp ed uo enud noitaralcd enu tios ; ) + + C u d s nes ua( n o isser p xe e n u t i o s : t s e 1 _ n o i t a r al c d _ n oi s s e r p x e . f it at l u c a f t s e u n et n o c r u e l e u q t n e i fi n g is ] t e [ st e h c or c s e L ro f noitcurtsniL
for ( [ expression_dclaration_1 ] ; [ expression_2 ] ; [ expression_3 ] ) instruction

. el c -uob al ed eitros srpa erocne tnetsixe j te i ,te ffe ne ,sac rei merp el snaD .setnelaviuq tne m - es u er u o gir s a p s el l e- t n os e n s t n e d c r p s e m m ar g or p x u e d s e d s n o it al u mr o f x u e d s e l is n i A .ni f al tarapsid li te rof noitcurtsnil snad ertnel uolla tse tnadnopserroc tne mecalpmeL .rof noitcurtsnil rap igr colb ua selacol tnos j te i selbairav sel ,sac ec snaD
90
Les instructions de contrle CHAPITRE 6

6.3 Syntaxe de linstruction for

i = 1 ; for ( ; i<=5 ; )

i = 1 ; for ( ; i<=5 ; i++ ) { cout << "bonjour ") ; cout << i << " fois\n" ; }

expression_1 ; while (expression_2) { instruction expression_3 ; }

for ( expression_1 ; expression_2 ; expression_3) instruction

{ cout << "bonjour " ; cout << i << " fois\n" ; i++ ; }

: t n e l a v i uq t s e

seriatnemmoC

.) t n a v i u s e h p a r g ar a p e l s n a d s n orr e v e l s u o n e m m o c( n o i t c ur t s n i e n u r a p r i t r os t n e m e l l e u t n e v a rr u o p n o t n o d e i n i f n i i r o ir p a e l c u o b e n u ts e
ka erb

: n o i t c u r ts n o c e t t e c , e h c n a v er n E . t r t n i n u c u a t n e t n e s r p e n s e l l e , e u q i t ar p n E . ) e i a r v e m m o c e r d i s n o c t s e e l l e , e t n e s b a t s e n o i ss er p x e e d n o c e s a l e u q sr o l , e u q s a p z e i l b u o n( e d i v s pr o c e d s e i n i f n i s e l c u o b s e d t n e t n e s r p er s e l l E . s e t c e rr o c t n e m e u q i x a t n ys t n os
for ( ; ; ) ; for ( ; ; ) { }

r e i nr e d e l s r p a h c i f f a ts e

ru ot ed t ub d

: s n o i t c u r ts n o c x u e d s e L 5 .noitcurts noc e dnoces al snad sap tsel en li uq sid nat ,ruot egasse m el ,noitcurtsn oc eri merp al snad ,rac
cout << "on commence\n" ; for ( i=1 ; i<=5 ; i++ ) { cout << "dbut de tour\n" ; instructions }

: i s n i A . n o is s er p x e e n u s n a d s n o i t c a sr u e i s u l p r e p u or g e d t e mr e p + + C n e n o i ss e r p x e d n o i t o n a l e d es s e h c ir a l , e r o c n e L 4 . e i a r v e m m o c e r d is n o c t s e e l l e , e t n e s b a ts e l e uq sr o L 3
2 _noi s s erp x e

for ( ; ; ) instruction i=0 ; j=1 ; k=5 ; for ( ; ... ; ...) j=1 ; k=5 ; for ( i=0 ; ... ; ... )

: t n e l a v i u q s a p t s e n : e h c n a v er n E

for ( i=1, cout << "on commence\n" ; cout << "debut de tour\n", i<=5 ; i++) { instructions } for ( i=1 ; i<=5 ; i++ ) { instructions cout << "fin de tour\n" ; } for ( i=1 ; i <= 5 ; cout << "fin de tour\n", i++ ) { instructions } for ( i=0, j=1, k=5 ; ... ; ... )

: t ne l a v i uq ts e : e m m eD

: erocne uo

: t ne l a v i uq ts e

6 - Linstruction for

91

.rof noitcurtsnil snad noitaralcd enu reutce ffed elbissop sap tsen lI
C nE

. er i a f e l e d l l i e s - n o c d t n e m e v i v u d n e t n e n e i b ts e l I . e l c u o b a l s n a d )s r u e is u l p e d er i o v( r u e t p m o c n u d r u e l a v a l r e i f i d o m e d e r i dr e t n i s u o v s a p t u e p e n r u e t a l i p m o c e l ,s n o i t i d n o c s e c s n a D .isnia esilitu tuotrus tse elle tne melani f is e m m ,)ni f ed r uela v as te tubd e d ruelav as ,ruetp moc n ud mo n e l r e t i c e d t i ar e t n e t n o c e s n o e l l e u q a l s n a d ( r u et p m o c c e v a e l c u o b e i ar v e n u d s a p t i g a s e n l I .) a v a J e d e l l e c e m m o c( e l l e n n o i t i d n o c e l c u o b e n u t e f f e ts e + + C e d r o f n o i t c u r t -s n i l , n ar tr o F u o l a cs a P e m m o c s e g a g n a l s n i a tr e c s n a d e s s a p es i u q e c t n e m e r i ar t n o C . ei n i f n i e l c u o b e n u t i t u o b a n o , e l c u o b e d s p r o c e l s n a d sr u e l l i a e i f i d o m s a p t s e n i e d r u e l a v a l i S
for (i=1 ; i<=5 ; i++) { ..... i-- ; ..... }

: es i m re p ts e n o i t c u r ts n o c e t te C 9 . . .01 e la g t ne mesuer uogir sap tsen x ed ruela v al ,sru ot 01 srpa ,rac eini fni elcuob en u tneitbo n o : c e v a , e r i P .s l u c l a c s e d i d n orr a d r u err e l e d d n e p d sr u o t e d er b m o n e l : e uq ellet noitcurtsnoc enu ceva ,isniA .reitne ep yt ed sap tnos e n i u q s r u e t p m o c s e l c e v a s n o i t u a c r p s e d er d n e r p t u a f l i , s e g a g n a l s e l s u o t s n a d e m m o C 8 .rof noitcurtsnil e d n o i s s er p x e e r i m e r p a l s n a d e u q e s i mr e p ts e n n o i t a r a l c d e n u u q n e i b z e t o N 7
float x ; for (int i=4, j=0, x=5 ; ... ; ... ) { // ici x est un int, initialis 5, de porte limite au bloc for (double x=0. ; x <=1.0 ; x+=0.1) for (double x=0. ; x !=1.0 ; x+=0.1)

: n o i t c ur t s n o c e t t e c e d r a g n e i b ar d n er p n O

: l a g l l i t i ar e s i ce C . ruetaralcd nu uq tior d an no ,1noitaralced_noisserpxe s nad euq neib areton nO 6


92
Les instructions de contrle CHAPITRE 6

for (int i=4, j=0, float x=5.2 ; ... ; ... ) // erreur

kaerb noitcurtsnid elpmexE


dbut tour 1 bonjour fin tour 1 dbut tour 2 bonjour fin tour 2 dbut tour 3 bonjour aprs la boucle
ka erb

: ed tne mennoitcno f el tnartnom elpmexe nu icioV .elituni elcuob al tiardner iuq ec ,elcuob e d r u ot r ei m er p e l s d e t u c x e t i ar es e ll e , t e f f e n e , eri art n o c s a c el s n a d ; x i o h c n u r a p e n -noitidnoc tse noitucxe nos is euq trtnid an noitcurtsni ettec ,udnetne neiB .elcuob ettec tius iuq noitcurtsnil tnassap ne ,elcuob al ed tne meluord el erp morretni tres elle ,sac e c s n a D . e l c u o b e n u s n a d n oi t c ur ts ni et t e c e d i ol p m e l t n e m e l a g esir o t u a + + C e g a g n a l e L . noitcurtsni enu rap igr colb ud nies ua e d el r e l u v j d s n o v a s u o N
hcti ws ka erb

.sem margorp ses uep euqleuq rerutcurts ehcrehc nol o tnemom ud ritrap ,udnapr uep sia m erbil egasu nud tse erinred al euq sidnat selcuob ed nies ua tne melapicnirp tneiolp mes serimerp xued se L .l e n n o it i d n o c ni t n e m e h c n ar b e d s esr e v i d s t i li b iss o p s e d t n ess i nr u o f s n oi t c ur ts ni si or t s e C

7.1 Linstruction break

7 Les instructions de branchement inconditionnel : break, continue et goto

#include <iostream> using namespace std ; main() { int i ; for ( i=1 ; i<=10 ; i++ ) { cout << "dbut tour " << i << "\n" ; cout << "bonjour\n" ; if ( i==3 ) break ; cout << "fin tour " << i << "\n" ; } cout << "aprs la boucle\n" ; }

7 - Les instructions de branchement inconditionnel : break, continue et goto

93

94

Les instructions de contrle CHAPITRE 6

7.2 Linstruction continue


: c e va e lp me x e r ei merp n u ic i ov nE . tn a v -ius elcuob ed ruot ua tnemruta mrp ressap ed temrep ,elle tnauq , noitcurtsniL
rof eunitno c

.hctiws ud euq ritros tiaf en elle ,elcuob enu snad uqirbmi hctiws nu snad tarappa kaerb is em m eD .enretni sulp al elcuob al ed ritros tia f kaerb ,seuqirb mi selcuob ed sac nE
#include <iostream> using namespace std ; main() { int i ; for ( i=1 ; i<=5 ; i++ ) { printf ("dbut tour %d\n", i) ; if (i<4) continue ; printf ("bonjour\n") ; } } dbut tour dbut tour dbut tour dbut tour bonjour dbut tour bonjour 1 2 3 4 5 #include <iostream> using namespace std ; main() { int n ; do { cout << "donnez un nb>0 : " ; cin >> n ; if (n<0) { cout << "svp >0\n" ; continue ; } cout << "son carr est : " << n*n << "\n" ; } while(n) ; }

ro f elcuob enu snad eunitnoc noitcurtsnid elpmexE

elih w ...od

c e v a el p m e x e d n o c es n u i c i o v t E

e uqrameR

ka erb

.) n o i t c u rt s n i l ed elp mexe e mmoc tnesrp iulec euq statlusr semm sel tinruo f em margorp ec( n o it - c ur ts ni l e d e d i a l noitcurtsnil , elcuob enu snad ,elumis iuq elpmexe tec ze yoV .e m mar g orp u d euq n oc le uq t ne me ca lp m e n u ne t n e m eh c narb el t n e m euq iss al c te mrep el lE
otog ka erb rof

. e nr e t n i s u l p a l e l c u o b a l e u q e nr e c n o c e n e u n i t n o c n o i t c ur t s n i l , s e u q i r b m i s e l c u o b e d s a c n E 2 .srpa non te ,)exatn ys as ed noitatnesrp al snad 2_noisserpxe emmon( elcuob ed sruocrap ed ni f ed noisserpxel ed noitaulavl rus tnemehcnarb nu neib eutce ffe eunitnoc noitcurtsni ettec rof elcuob enu snad esilitu tse elleuqsro L 1
,

elihw ...od elcuob enu snad eunitnoc noitcurtsnid elpmexE


nb>0 : 11 est : 121 nb>0 : 0 est : 0

7.3 Linstruction goto

dbut tour 1 bonjour fin tour 1 dbut tour 2 #include <iostream> using namespace std ; main() { int i ; for ( i=1 ; i<=10 ; i++ ) { cout << "dbut tour " << i << "\n" ; cout << "bonjour\n" ; if ( i==3 ) goto sortie ; cout << "fin tour " << i << "\n" ; } sortie : cout << "aprs la boucle" ; }

se uqrameR

donnez un son carr donnez un svp >0 donnez un svp >0 donnez un son carr donnez un son carr

7 - Les instructions de branchement inconditionnel : break, continue et goto

nb>0 : -5 nb>0 : 3 est : 9 nb>0 : -2

95

: e u o l l a n o n , i el b air a v e n u d n oi t a s - il i t u d e vi t a t n e t e n u ar i u d n o c , n o it al i p m o c n e t p e c c a ts e l is , t n a v i us e l p m e x el , e m m e D
main () { int n=0 ; int i ; goto ici ; for (i=0 ; i<5 ; i++) { cout << "hello\n" ; ici : cout << i << "\n" ; } }

: )ruerre enu tnetcetd sruetalipmoc sniatrec( eini fdni i ed ruelav enu tiudnoc iuq elp mexe tec snad emmoc ,colb nud rueirtnil srev tnemehcnarb tuot retivd te sellennoit -pecxe secnatsnocric sed snad euq noitcurtsni ettec resilitun ed dna mmocer tne metro f tse lI otog noitcurtsnid elpmexE
bonjour fin tour 2 dbut tour 3 bonjour aprs la boucle

96

Les instructions de contrle CHAPITRE 6

main () { int n=0 ; goto ici ; for (int i=0 ; i<5 ; i++) { cout << "hello\n" ; ici : cout << i << "\n" ; } }

; s i m s n art a i u l n o u q st n e m u gr a s e d s ni atr e c e d sr u el a v s el r ei f i d o m : is su a arru op e ll e , e uqi ta m h ta m noitcno f enud elr el reuoj ,trqs emmoc ,tnemevitce ffe tuep noitcno f enu is ,++C ne ,rO .)x(trqs*2 + y em -moc euqit mhtira noisserpxe enu snad tne metcerid resilitul tuep no ; noitcno f al rap inruo f tatlusr el engisd )x(trqs : leppa nos rap tnemelp mis ngisd )erialacs( tatlusr nu tinruo f ; )2.5 (t rqs s n ad 2.5 u o )x(trqs snad x ,elp mexe rap( leppal ed srol ruelav al tinruo f no tnod stnemugra sed edssop : e u qi t a m h t a m n oi t c n o f e n u , t e f f e n E . e u qi t a m h t a m n oi t c n o f al euq larng sulp elr nu edssop noitcno f al ,)avaJ ne uo C ne e mmoc( ++C neuq areton nO .i ci i d ut s n or u a s u o n e u q e c e d l e it n ess el r es il it u s n e m a srola snores suon euq etros ed ,snoitcno f sed elbarap moc noa f ed segidr tnores sedohtm sec euq snorrev suon ; sedohtm sed te sennod sed areicossa ,etnadnepdni noa f ed eini fd ,essalc euqahC .noitisopmocd ed sussecorp ec snad epat ednoces enu areutitsnoc .O.O.P a L . sertmarap sed tnas -sinruo f iul ne ,tnemelleutnev ,te mon nos tnatic ne em margorp nu snad risiol resilitu tuep nouq snoitcurtsnid colb nud tigas li : ertipahc ec snad redroba snolla suon euq noitcnof ed noiton al ecrg ,snes ec snad sap reimerp nu temrep elarudcorp noitam margorp a L .edoc ud elbmesnel renimaxe riova snas ,elr el tnemelica f erdnerpmoc arruop no tnod setnadnepdni tne mevitaler seitrap sed ne resop -mocd el riovuop ed euqitarp tse li ,etxet ed segap seuqleuq essapd em margorp nuuq sD

Les fonctions

.ruelav enu tnassinruo f te stnemugra sed tnavecer erid--tsec ,euqitamhta m noitcno f enu tia f ne tnadnopserroc elp mis elp mexe nu r a p s n or e c n e m m o c s u o n , + + C n e n oi t c n o f e n u r es il it u t e ri n i f d t n e m m o c r er t n o m s u o v r u o P

. e n gi l n e s n oi t c n o f se d ri ni f d tne mmoc snorrev suon ,ni fnE .++C ed eraps noitalip moc ed stilibissop sel tnanrecnoc st n e m l s e u q l e u q sr ol a s n or e n n o d s u o N .s t n er f fi d s t n e m u gr a s e d t n a y a si a m , m o n e m m ed snoitcno f srueisulp rini fd ed temrep iuq noitini fdrus ed noiton etnatropmil snoreid -ut suon siuP .noitcno f enud stnemugra sniatrec ruop tua fd rap sruelav sed rini fd snord -nerppa suoN .selacol selbairav sed noitasilaitinil te noitacollad essalc al rus tniop el etiusne s n or e f s u o N . n oi t a si li t ul r e ll i e s n o c d n e r u o p t u o tr u s ,s e l a b o l g s el b air a v s e d t n e m e t c n i c c u s snorelrap suoN .ecnerfr rap noissi msnart enu tnemeticilpxe rednamed snordnerppa suon te ruelav rap simsnart tnos stne mugra sel ,tua fd rap ,euq etiusne snorrev suoN .noitaralcd ruel te noitasilitu ruel ,snoitcnof sed erutircl tnanrecnoc selarng selgr seuqleuq snor - e n n o d s u o n t e , el p m e xe n u r u s n o it c n o f e d n o i t o n al r et ne sr p s u o v r a p s n or ec n e m m o c s u o N . t u ot u d r u el a v e d ri nr u o f s a p e n ; sap aresilitun nouq ruelav enu rinruo f ; ) .. . st ej b o , s er u t c ur t s( eri al a c s n o n e p yt n u d t at l u s r n u r i nr u o f .. . n o i x e n n o c e n u ri l b a t ,r ei h c i f n u r ir v u o ,sr u e l a v s e d r e h c i f f a ,sr u e l a v s e d eri l : e l p m e x e r a p ,) l u c l a c e l p m is n u u q er t u a( n o i t c a e n u r es il a r
98
Les fonctions CHAPITRE 7

1 Exemple de dfinition et dutilisation dune fonction

} #include <iostream> using namespace std ; /***** le programme principal (fonction main) *****/ main() { float fexple (float, int, int) ; // dclaration de fonction fexple float x = 1.5 ; float y, z ; int n = 3, p = 5, q = 10 ; /* appel de fexple avec les arguments x+0.5, q et n-1 */ z = fexple (x+0.5, q, n-1) ; cout << "valeur de z : " << z << "\n" ; /* appel de fexple avec les arguments x, n et p */ y = fexple (x, n, p) ; cout << "valeur de y : " << y << "\n" ;

: e l p m e x e r a p , c e v a n oi t c n o f e d n oi ti n i f d e m m a l ti ar d -neitbo no ; stnemugra sed mon ud eriartibra tcepsal neib zetoN .c + xb + 2x noisserpxel ed ruelav al tinruo f )c ,b ,x( elpxef euq ellet noitcno f enu tse elpxef euq erid tuep no ,evitini fd nE .liavart nos ed ni f al noitcno f al arinruo f euq ruelav al esicrp lav nruter noitcurtsnil ,ni fnE .)p te n ,x stne mugra sed sruelav sel rinevretni sio fetuot tnasiaf( euqissalc noitatce ffa enu tse elpxef noitcno f erton ed etnavius noitcurtsniL . e h c a tt a y s i u q e tr o p e d e ll e c t e e l a c ol elbairav ed noiton ettec liatd ne sulp snorenimaxe suon ,niol sulp uep nU .)elitu sap tiatn noitcnitsid ettec ,noitcno f elues enud utitsnoc em margorp nu eria ffa snoiva suon iciuqsuj emmoc siam( niam noitcno f al selacol selbairav sed tnos ...y ,p ,n euq sellet selbairav sel euq emm ed ,elpxef noitcno f al elacol elbairav enu tse lav euq tid nO .lav em mon taolf ep yt ed elbairav enud nioseb a noitcno f erton ,liavart nos reutce ffe ruop ,euq esicrp ic-elleC : noitaralcd enu drobad tuot ertnocner y no ,noitcnof al ed sproc ua essertnis no iS .sr u el av siort tnassinruo f iul ne arelleppal no dnauq noitcno f al reutce ffe arved euq liavart el erircd tnevres slI .noitcno f al ed sproc ud nies uauq ecnatropmid tnon stnemugra sed s mon se L
float | type de la "valeur de retour" fexple | nom de la fonction (float x, | premier argument (type float) int b, | deuxime argument (type int) int c) | troisime argument (type int) float val ;

: ) .. . r u o t er e d r u el a v , n o it c n o f a l e d r u e l a v , tatlusr tnem mer ffidni e mmon al no( noitcno f al rap einruo f ares iuq ruelav al ed ep yt el euq isnia ,)ep yt + mon( stne mugrad etsil enu evuort y no ,) elpxef( noitcno f al ed mon el ertuo ,euqsiup niam noitcno f al ed iulec euq robal sulp tse ett-nel siaM .)} te {( sedalocca sed rap timild sproc nu te ett-ne nu riovas ,niam noitcno f al ed enisiov erutcurts enu e d ss o p i c- el l e C . al tarappa ,etius as ,siof ettec ,siaM .colb nud mro f lapicnirp em margorp nu ,euqissalc sia mrosd noa f ed ,drobad tuot snovuort y suoN
n oit cn o f e nud n o it in i fd

noitcnof enud noitasilitud te noitinifd ed elpmexE


valeur de y : 11.75 valeur de z : 26 /*************** la fonction fexple ****************/ float fexple (float x, int b, int c) { float val ; // dclaration dune variable "locale" fexple val = x * x + b * x + c ; return val ; }

1 - Exemple de dfinition et dutilisation dune fonction

99

: erina m ettec ed etnedcrp elpxef noitcno f al rini fd up snoirua suon ,isniA .noisserpxe elleuq etrop min rennoitnem tuep nruter noitcurtsni L .noitcurtsni ettec tnanrecnoc selarng selgr seuqleuq icioV

! 5 = )y + x( f rap f noitcno f enu zeirini fd en suov seuqitamhtam neuq sulp sap ,)... ,b+a taolf( elpxef taolf emro f al suos elpxef ed ett-ne nu erircd elbissop mi tiares li : slemro f sertmarap sed sac el snad snes nucua tiaruan trebil ellet enuuq zetoN .leppa nos ed srol noitcno f al esi msnart ares iuq noisserpxe ettec ed ruelav al tsec ,etpmoc ud tuob ua ; fitce ffe tne mugra em moc noisserpxe elleuq etropmin resilitu tuep no ,tnedcrp elpmexel renived essial el e mmoC .) s fitce ffe sertmarap erocne uo( s fitce ffe stnemugra sed tnem mon es noitcno f al ed )leppal( noitasilitul ed srol sinruo f stnemugra se L . eri a f t i o d elleuq ec erircd ed ,noitcno f al ed sproc ud nies ua ,ertte mrep ed tse elr rue L .)retemarap lamrof : sialgnal ed( sle mro f sert marap uo sle mro f stnemugra erocne uo , steu m stne mugra sed tnemmon es noitcno f al ed ett-nel snad tnarugi f stnemugra sed smon se L

.stner ffid stne mugra sed ceva sesirper xued noitcno f erton releppad stnetnoc se mmos suon suon ,icI .trqs euq ellet eini fdrp noitcno f enud ellec elbarapmoc te euqissalc tse elle ,niam noitcno f al ed nies ua elpxef noitcno f erton ed noitasilitul tnauQ . n oi t ar al c d e ll et e n u d e l r el rus liatd ne niol sulp snordneiver suoN .ruoter ed ruelav as ed iulec euq isnia stnemugra ses ed ep yt el esicrp iul elle te ,noitcnof enu tse elpxef euq ruetalipmoc el rinevrp tres ellE : noitaralcd enu evuort y nouq zetatsnoc suoV .niam noitcno f al tnanetnia m snonimaxE
float fexple (float z, int coef, int n) { float val ; // dclaration dune variable "locale" fexple val = z * z + coef * z + n ; return val ; } float fexple (float, int, int) ;

100

2.2 Linstruction return

2.1 Arguments muets et arguments effectifs

2 Quelques rgles

Les fonctions CHAPITRE 7

float fexple (float x, int b, int c) { return (x * x + b * x + c) ; }

: )! eriotala erb mon nu tnassinruo f noitcno f enud ,elp mexe rap ,rigas tiarruop li( taolf ep yt ed ruelav enu tna yovner te tnemugra nucua tnavecer en noitcno f enud ett-nel icioV .stne mugrad etsil al snad rennoitne m neir en ed aretnetnoc es no ,tne mugra nucua tioer en noitcno f enu dnauQ .ruerrel sap sio fetuot tnoretcetd en sruetalipmoc sniatreC .nruter noit -curtsni enucua rinetnoc ,epicnirp ne ,tiod en noitcno f ellet enud noitini fd al ,tnemellerutaN : noitaralcd as tiares elleuq iciov te : ruelav enucua tnassinruo f en te tni ep yt ed tnemugra nu tnavecer noitcno f enud ett-nel iciov ,elpmexe raP .diov lc-tom ud edial ,noitaralcd as s n a d t e e t t- n e l s n a d s i o f al , e si c r p e l n o ,t at l us r e d s a p e i o v n er e n n o it c n o f e n u d n a u Q
void sansval (int n) void sansval (int) ;

.) ! er i o t a l a ruelav enu ,noitucxel ed srol ,zerdneitbo suov ,tnetpeccal sruetalipmoc sniatrec is( tatlus - r e d s a p t n ass i nr u o f e n n o it c n o f e n u d r u e l a v a l r e si li t u d t i dr et n i ts e l i , e h c n a v er n E . t a t -lusr nu reluclac euq esohc ertua tia f noitcnof al is euq trtnid an alec ,udnetne neiB .nu tiudorp ne elle is emm ,noitcno f enud tatlusr el resilitu sap en ed elbissop sruojuot tse lI . n oi sre v no c e d s n oi t c ur ts ni s e d e c al p n e t n e m e u qi t a m ot u a ar tt e m r u et a li p m o c el , e t t- n e l s n a d r al c d t a liuq let tatlusr ud ep yt ud tner f fid tse nruter snad tnarugi f noisserpxel ed ep yt el iS . n o it c n o f a l e d ni f a l r u e t a li p m o c el r a p tnemeuqita motua ecalp ne sim srola tnat ruoter el ,nruter noitcurtsni enucua retrop moc en ,sac ec snad ,issua tuep elle sia m ; noitcno f al ed noitucxel tne melpmis tnapmorretni , nruter snoitcurtsni srueisulp ed resopsid srola tuep elle : ruelav enucua rinruo f en tuep noitcno f enuuq snorrev suoN .)niam no itc n o f al , ici , ec nerr uc co l ne( e leppa a l iuq noitcno f al snad tnanever ne noitcno f al ed noitucxel tp morretni elle ,spmet emm ne ,siam ,tatlusr ud ruelav al tini fd nruter noitcurtsnil tnemelues non euq neib zetoN
n o is -s erp x e snas

: elp me xe er tu a tec snad emmoc ,noitcno f enu snad sesirper srueisulp ertarappa tuep nruter noitcurtsni L
101

2.3 Cas des fonctions sans valeur de retour ou sans arguments

float tirage ()

double absom (double u, double v) { double s ; s = a + b ; if (s>0) return (s) ; else return (-s) }

2 - Quelques rgles

. t i c i l p m i s e d i c u o s r a p , i c i u q s u j e s i l i t u s n o v a s u o n e u q e i f i l p m is e mr o f a l t n e t p e c c a sr u e t a l i p m o c s e d tr a p u l p a l , e p i c n ir p n E . n i a m u d n o i t u c x e l e d n i f a l : n o i t c ur t s n i l r er t n o c n er t i ar v e d n o t e : ert cnod tiarved niam ed ett-neL .emmargorp ud tne meluord nob nu reuqidni ruop 0 ed rigas tiarved lI .noitam margorp ed tnemennorivnel rap esilitu ertd elbitpecsus ruoter ed ruelav enu rinruof tiarved niam noitcnof al ,rueugir etuot nE
int main () return 0 ;

e uqrameR

.)snoitcno f xued ed sulp tnanetnoc ecruos e mmargorp ed elpmexe rei merp erton ed tigas li( ruerred egasse m nu rehci ffad etnetnoc es iuq ruerre noitcno f enu te ,stne mugra ne seinruo f setimil xued ertne sirp moc sreitne serb mon sed srrac sel ehci ffa iuq serrac_ehciffa noitcno f enu snossini fd y suoN .seuqov snoitautis sed xued tnartsulli elpmexe nu icioV : ar e s n oi t ar al c d as t e : e mr o f al e d ares e t t- ne n os ,s ac e c s n aD .ruoter ed ruelav in tne mugra in tnadssop en noitcno f enu resilar ed ehcp men neir ,nifnE : )! elugriv-tniop ud ecnesrp al rap euq er ffid en elle( enisiov srt tiares noitaralcd aS
102
Les fonctions CHAPITRE 7
float tirage () ; void message () void message () ;

#include <iostream> using namespace std ; main() { void affiche_carres (int, int) ; // prototype de affiche_carres void erreur () ; // prototype de erreur int debut = 5, fin = 10 ; ..... affiche_carres (debut, fin) ; ..... if (...) erreur () ; } void affiche_carres (int d, int f) { int i ; for (i=d ; i<=f ; i++) cout << i << " a pour carr " << i*i << "\n" ; } void erreur () { cout << "*** erreur ***\n" ; }

-rus ed ,tE .iciuqsuj tia f snova suon euq ec tsec ; tnasilitul noitcno f etuot ed snoitaralcd sed rueirtnil noitcno f enud noitaralcd al recalp etsisnoc ellerutan sulp al ecnadnet a L

: isnia eralcd ert up tiarua elpxef noitcno f erton ,1 ehpargarap ud elp mexe erton snaD .euqita motua noitarc al retilica f ne tuep iuq ec ,)srp elugriv-tniop ua( noitcnof al ed ett-nel seuqitnedi tnos iuq sep ytotorp sed erirc riovuop ed trtni lues ruop a tilib -issop ettec ; seriartibra tne melatot srola tnos sleuqsel ,stne mugrad s mon sed rerugi f eria f ed ,ep ytotorp nu snad ,elbissop tse lI .epytotorp ed mon el etrop noitcno f enud noitaralcd a L .++C ed eraps noitalipmoc ed stilibissop sel tnesirotual em moc ecruos sreihci f srueisulp ne retalcl em m uo ecruos emmargorp ertov rei fidom nema ze yos suov tnemerueirtluuq elbissop tiaf tuot tse li ,te ffe ne ; sac ec snad elpxef ed noitaralcd al erttemod snolliesnocd suov suon ,snio mnaN .elpxef noitcno f al jd tannoc ruetalipmoc el ,niam noitcno f al tiudart liuqsrol ,rac evit -atluca f tse )niam snad ,ici( elpxef noitcno f al ed noitaralcd al ,sac ec snad ,rueugir etuot nE
float fexple (float x, int b, int c) { .... } main() { float fexple (float, int, int) ; // dclaration de la fonction fexple ..... y = fexple (x, n, p) ; ..... }

: esrevnil eria f neib issua tuot up snoirua suon siaM .niam noitcno f al ed ellec srpa elpxef noitcno f al ed noitini fd al inruof snoiva suon ,1 ehpargarap ud elp mexe erton snaD

.ediv etsil enu ednamed ++C o l ,diov tom el esilitu C : tne mugra snas snoit - c n o f s e d s a c el s n a d ets i x e ti li b it a p m o c n i el u e s e n U . C n e )s e l li es n o c e m m t e( s e di l a v tnetser ++C rap se yolp me selgr sel siaM .)tni nud tigas lis( ruoter ed ruelav al ed iulec uo )sep yt sruel tneios euq sleuq( stnemugra sed ep yt el erttemo tuep no ; snoitcno f ed snoitaralcd sel snad ++C euq )trot ( tnarlot sulp puocuaeb tse C egagnal e L
C nE

3.2 O placer la dclaration dune fonction 3.1 Les diffrentes faons de dclarer une fonction

3 Les fonctions et leurs dclarations

float fexple (float x, int b, int c) ;

3 - Les fonctions et leurs dclarations

103

: elpmexe tec ze yoV .tneluocd ne iuq snoitati mil sel te ,tnemetcaxe ei fingis alec euq ec ici riov ed snosoporp suov suoN .leppa nos ed tnemom ua noitcno f al si msnart tneiat stnemugra sed sruelav sel euq erid ed stnetnoc sem mos suon suon ,iciuqsuJ

.)etnadargd noisrevnoc( tni ne noisrevnoc as te )taolf ne( x*2 noisserpxel ed ruelav al ed noitaulavl ; taolf ne noisrevnoc as te )tni ne( 1+n noisserpxel ed ruelav al ed noitaulavl : r a p t i u d ar t ar e s : euq let leppa nu ,1 ehpargarap ud elpxef noitcno f erton ceva ,elpmexe raP .ep ytotorp el snad uqidni ep yt el snad s fitce f fe stnemugra sed sruelav s e d s n o isr e v n o c s e l l e u t n e v d e c al p n e t e m l i , n o it c n o f a l e d l e p p a n u er t n o c n er l i u qsr o L 2 .ruerre enu elangis li ,eriartnoc sac el snaD .ep ytotorp el snad inifd ep yt el neib tno steu m stnemugra sel euq erussas li ,)noitaralcd al srpa u o t n a v a t i os e c e u q( e cr u os r e i h c i f e m m e l s n a d e v u ort es n o it c n o f al e d n oi t i n i f d a l i S 1 .s e t n er f fi d t n e m -etlp moc snoa f xued ed ,ruetalipmoc el rap esilitu ert tuep noitcno f enud noitaralcd a L
fexple (n+1, 2*x, p)

: ceva ,elpmexe raP .noitcnof erimerp al ed noitinifd al tnava ertarappa tnasia f sel ne ,selabolg snoitaralcd sed resilitud elbissop tnemelag tse li siaM .t i a s si ar a p p a e ll e o n o it c n o f a l e ti mi l t i a t e tr o p a l t n o d e l a c ol n o it ar a l c d e n u eri a f f a s n o i v a s u o n ,s n o it i d n o c s e c s n a D ! e m m -elle niam noitcno f al tiat ecirtasilitu noitcnof al ,stnedcrp selpmexe son suot snad ,torc
104
Les fonctions CHAPITRE 7

4 Transmission des arguments par valeur

3.3 Contrles et conversions induites par le prototype

.1f ed te niam ed siof al eunnoc tse elpxef ed noitaralcd al


float fexple (float, int, int) ; main() { ..... } void f1 (...) { ..... }

#include <iostream> using namespace std ;

: e u q e l l e t ) ! e l l i e s n o c d t n e m e tr o f( n o i t - a u t is e n u s n a d t p e c x e , e c n a tr o p m i d u e p e d ts e i c e c , l ar n g n E . l e p p a n os e d s r o l n o i t -c no f enud st nem ugra stner f fid sed noitaula vl ruop erdr o nucua es op min e mro n a L 2 .eulavl sed tnemelp mis sia m ,snoisserpxe sed ert sulp tnorruop en s fitce ffe stne mugra sel ,ecner fr rap noissimsnart al cevauq snorrev suon ,sruelliad ,tE .euqnocleuq noisserpxe enud e mro f al erdnerp tnevuep s fitce ffe stnem -ugra sel euq ruelav rap tiaf es stnemugra sed noissi msnart al euq ecrap neib tseC 1

se uqrameR

.egnahce noitcno f erton tne metcerroc resilar ed arttem -rep ecner fr rap noissi msnart enud eticilpxe xiohc el ,ttneib riov el snolla suon em moC . + + C r a p t u a f d r a p si li t u e d o m el e u q ts e n r u el a v r a p n o iss i ms n art e d e d o m e c ,t i a f n E . t at sn o c ta tl us r el e uqi lp xe i uq ec ts eC .sei fido m t sap ,selle tnauq ,tnon p te n selbairav sed sruelav sel euq etros ed ,egnahce noitcno f al lliavart auq seipoc sec rus tnemevitce ffe tseC .b te a sm mon stne mecalpme sed snad egnahce noitcno f al snad tne melacol seipocer t tno sruelav sec euq erid tuep nO .p te n snoisserpxe sed ruelav al ed noissimsnart ue a y li ,egnahce ed leppal ed srol ,te ffe nE .p te n s fitce ffe stnemugra sel rus etsisbus en egnahc tec ed ecart enucua ,lapicnirp e mmarg -orp el snad unever tse nol euqsrol ,siaM .sruelav xued sec ed egnahc nu eutce ffe ellE .b te a steum stne mugra xued ses tnadnopserroc sruelav xued tioer egnahce noitcno f a L
stnemugra sed ruelav rap noissimsnart al ed secneuqsnoC
avant appel dbut echange fin echange apres appel : : : : 10 10 20 10 20 20 10 20 " << a << " " << b << "\n" ; "<< a << " " << b << "\n" ; " << n << " " << p << "\n" ; " << n << " " << p << "\n" ; b) ;

main() { void echange (int a, int int n=10, p=20 ; cout << "avant appel : echange (n, p) ; cout << "apres appel : } void echange (int a, int b) { int c ; cout << "dbut echange : c = a ; a = b ; b = c ; cout << "fin echange : }

4 - Transmission des arguments par valeur

105

: e g n a h c e n oi t c n o f et n e d c r p ert o n s na d e c ner fr ra p no iss i m sn art e nu r esi l it u t n e m m o c er tn o m s uo sse d- ic e m m arg or p e L

.ruoter ed ruelav al ruop noitasilitu nos rus reilucitrap ne ,ecner fr ed noiton ettec rus lliatd sulp tniop nu snore f suon ,)2.31 ehpargarap ua( etius al raP .elapicnirp noitac -ilppa nos niol ed eutitsnoc iuq ec ,stne mugrad noissi msnart al ruop ecner fr ed noiton ettec resilitu tnem moc riov rap snorecne mmoc suoN .ruelav as sulp non te ,esserda nos rerdisnoc tneiver elbairav enud ecner fr al rerdisnoc : esserdad ellec dnopserroc elleuqal ,ecner -fr ed noiton al ed esopsid ++C ,rO .tne mugra nud ruelav al rei fidom ed noitcno f enu sap t e mr e p e n n oi s si m s n ar t e d e d o m e c , e g n a h c e n o i t c n o f a l c e v a t a t s n o c s n o v a l s u o n e m m o C .ruelav rap simsnart tnos noitcno f enud stne mugra sel ,tua fd rap ,euq riov ed snonev suoN

. e c n er f r r a p n o i s s i m s n ar t e n u r ir u o c er ar d u a f l i , er o c n e l , o t e l a t n e m a d n o f er v a s l i o s e c n a t s n o c r i c s e d e ts i x e l i u q dr a t s u l p s n orr e v s u o n s i a m , n i d o n a r e l b m e s t u e p t n i o p e C . e t n a l e p p a n o i t c n o f al snad eleppa noitcno f al e d eipocer enud tejbol tia f elleuq eri d--tsec ,r uela v rap esi msnart iss ua elle tse )etsi xe elleuqsrol( ruoter e d ruelav al ,r ue ugir etu ot nE 3
int i = 10 ; ... f (i++, i) ; // i++ peut se trouver caclul avant i - lappel sera : f (10, 11) // ou aprs i - lappel sera : f (10, 10)

106

5.1 Exemple de transmission dargument par rfrence

5 Transmission par rfrence

Les fonctions CHAPITRE 7

avant appel : 10 20 dbut echange : 10 20 #include <iostream> using namespace std ; main() { void echange (int &, int &) ; int n=10, p=20 ; cout << "avant appel : " << n << " " << echange (n, p) ; // attention, ici cout << "apres appel : " << n << " " << } void echange (int & a, int & b) { int c ; cout << "debut echange : " << a << " " << c = a ; a = b ; b = c ; cout << "fin echange : " << a << " " << } b << "\n" ; b << "\n" ; p << "\n" ; pas de &n, &p p << "\n" ;

. e m m- e ll e n oi t c n o f al e d e u qs ir s ul p te et ac il d s ul p n oi ta m mar g or p e n u d ei tra p ert n oc n e , t n ess iar a psi d t n e m -medcrp suqov seuqsir sel : sesserda sed tnemeticilpxe erttemsnart arved noitcno f al ed ruetasilitul ,sac ec snaD .sruetniop ed siaib el rap ,ecner fr rap noissimsnart enu relu mis ed elbissop tnemelag tse liuq )8 ertipahc ud 5 ehpargarap ua( snorrev suoN

e uqrameR

.ruelav al ed eipoc enuuq si msnart riovan tiasnep li t n o d e l b a ir a v e n u r ei f i d o m e d c n o d e u qs ir l I .)s t il i biss o p x u e d s e d ert u al u o e n u l r e n g is d t na v u o p n o it at o n e m m al( t ne m u gra n u d e sser da l u o r ue la v al ,e t p m o c u d t u o b ua , te m -snart lis sulp tias en ruetasilitul ,noitcno f enu elleppa liuqsrol ,te ffe nE .srisd non drob ed ste ffe d seuqsir sel torcca ecner fr rap noissimsnart al ed iolp mel ,eitrapertnoc nE .) et t- n e re i hc i f n ud l ar n g ne ardneivorp ep ytotorp ec ,sruelliad( noitcno f al ed ep ytotorp ud noitaralcd al ed uaevin ua tsen ec is ,etiusne reicuos nes sulp an noitcno f al ed ruetasilituL .enrecnoc noit -cno f al ed erutircl ed tne mo m ua tia f tse ecnerfr rap noissi msnart ed edom ud xiohc e L .ruelav rap noissi msnart al ed sac el snad sap tneiatsixen iuq secneuqsnoc ed erb mon niatrec nu enartne tne mugra nud ecner fr rap noissimsnart a L
5.2.1 Induction de risques indirects

.eganolc ed etid eirporppa edohtm enu tnasilitu ne tejbo nud eipoc enu tnem -eticilpxe rerc ed elbissop tnadnepec etser lI .ecner fr rap si msnart tnos stejbo sel euq sidnat ,ruelav rap sesimsnart tnos esab ed ep yt nud selbairav sel ,tnemsicrp sulP .ruem -margorp ua etnerapsnart tnemeritne tse elle sia m ,avaJ ne etsixe ecner fr ed noiton a L
avaJ n E

. e ss er d a l t n e m e vi t c e f f e u er ar u a n oi t c n o f al t n o d el b air a v e tt e c rengisd ruop a elob m ys el tnemelp mis esilitu no ,egnahce noitcno f al snad ,euq neib zetoN .ecner fr rap esi msnart tni ep yt ed noitamro fni enu tse a euq eifingis a & tni noitaton al
void echange (int & a, int & b) ;

5.2 Proprits de la transmission par rfrence dun argument


: n o i t c u rt s n i l s n a D
++C ne ecnerfr rap tnemugrad noissimsnart al ed noitasilitU
fin echange aprs appel : 20 10 : 20 10

5 - Transmission par rfrence

107

tn i * tsnoc

.snes nu neib arua euq ellet noitaton enuuq ,ehcnaver ne ,snorrev suon ,sruetniop sel snoreidut suon dnauQ .exif esserda enu etnesrper ecnerfr enu ,noitinifd rap ,euqsiup esilitu ertd nosiar enucua an elle ; nu etnatsnoc ecner fr tiareifingis noitaton aL .2 .etnatsnoc enu rus relliavart ed ett-ne nos snad uvrp tnemevitceffe a noitcnof al is esirotua ares noissimsnart ellet enuuq 4.2.5 ehpargarap ua tnadnepec arrev nO .1
tni tn i & tsnoc

stnavius sleppa se L . etnatsnoc enu ecnerfr enu dnopserroc


2

: e p yt o t or p e d n oi tc n o f e n u s n or d is n o c ,e hc n a ver n E
5.2.4 Cas dun argument muet constant
c t cf

. ruelav al rei fidom neib srt tiarruop elle tnod ) uo 3( etnatsnoc enud esserdal rinruo f tneiariudnoc sli ,stpecca tneiat stnedcrp sleppa sel is ,tef fe nE .seugigol tnos su fer seC
1

:)

tn i

e p y t e d t n a t ( e t n a vi us e mr o f a l e d l e p p a n u sr o l a ar es u f er r u et al i p m o c e L
n

: ep ytotorp ruop tia

.selbissop tnores snoisrevnoc sed ,sac ec snad ,euq te elgr ettec noitpecxe tnore f stnatsnoc steum stnemugra sel euq 4.2.5 ehpargarap ua tnadnepec snorrev suoN .teum tnemugral ruop uvrp epyt ...evuort ys iuq ruelav al ed noisrevnoc euqnocleuq enu reutce ffed elbissop sulp tsen liuq ios ed av li ,rei fido m tnemelleutnev tuep elleuq reitne nu tnanetnoc em moc erdisnoc elleuq tne mecalpme nud esserdal tnemetcerid tioer noitcno f al o tnemo m ud ritrap
void f (int & n) ; // f reoit la rfrence un entier float x ; ..... f(x) ; // appel illgal

ud eulavl enu ertd fitceffe tnemugra nu cnod esopmi ecnerfr rap noissimsnart aL

: elpmexe tec ze yoV .tnessiarapsid ruelav rap noissi msnart ed sac ne seuvrp nois -revnoc ed stilibissop sel ,ecner fr rap noissi msnart enu uvrp a noitcno f enuuq srol sD
5.2.2 Absence de conversion

108

5.2.3 Cas dun argument effectif constant

Les fonctions CHAPITRE 7

const int c = 15 ; ..... fct1 (3) ; // correct ici fct1 (c) ; // correct ici
& tn i t sno c t cf

: st cerr oc t n ore s noitaralcd a L

void fct1 (const int &) ; fct (3) ; void fct (int &) ;

const int c = 15 ; ..... fct (c) ; // incorrect : f ne peut pas modifier une constante // incorrect : f ne peut pas modifier une constante

: r u o p e m m e d ari n e l I

n oi tc n o f e n u u q s n os o p p u S

.erialacs epyt nud setnatsnoc sel ruop euq etiaf tsen eipoc al ,tnemelarnG .eipoc enu non uo eriaf ned erbil noitatnemlpmil essial emron al ,epyt emm ud etnatsnoc enud sac el snaD .1

: srpa ic emmargorp ed elpmexel ze yoV

.es sa lc e tt ec e d se d o ht m )selues( sel ruop labolg tne metrop moc nu tnorua sennod ed spmahc sel ,essalc enu snad ; te jbo e t xe t no c n u snad ecnatrop mi nos etuot ardnerp elleuqal ,euqiman yd noitacollad essalc te euqitats noitac -ollad essalc ertne ecner f fid al erdnerp moc xueim ed te mrep elabolg elbairav ed noiton al ; tnaruocer y edoc ud rertnocner ed zeuqsir suov : rac ici tnadnepec snoretnesrp al suov suoN .mumixa m ua retiv arduaf liuq euqsir euqitarp enud l tnad -nepec tigas lI .selabolg ed srola ei filauq nouq senum moc selbairav sed regatrap tnevuep )niam lapicnirp emmargorp el udnetne neib ,tnod( snoitcno f srueisulp ,++C ne ,eiroht nE .ruoter ed ruelav enud noitarpucr al te stnemugrad noissimsnart al ecrg snoitcno f setner ffid ertne snoita mro fni sed regnahc tne mmoc uv snova suoN

. te jbo nu ares noitseuq ne tnemugral o sac el snad tiucad sulp erocne ardnerp euqra mer etteC . u d n e tt a i ul e c e d t n er f f i d e p y t n u d t e t n ats n o c ts e r e i nr e d e c e u q sr o l s d ) n o isr e v n o c e n u d e d c r p( f it c e f f e t n e m u gr al e d e i p o c e n u d noitarc al esirotua no ,torcrus ed ,siaM .noitcno f al ed nies ua nrecnoc tnemugral ed ecnat -s n o c a l r e i fir e v r u et a li p m o c e l e n m a al e c , d n e tt a ys n o e m m o c ,s e tr e C .s e c n e u q s n o c e d edruol tse ecner fr rap si msnart teu m tne mugra nu ruop e d n o it a s il it u l , e v it i ni f d n E
1

tni

: elp mexe raP . ne ed noisrevnoc al ed tatlusr el arvecer iuq ) ep yt ed( eriaropmet elbairav enud noitarc a y li ,sac ec snad ,te ffe nE . ed ep yt el tios euq leuq tpecca ares )euqnocleuq noisserpxe enu tnangisd ( let leppa nu ,tse sulp iuQ . s u l p c n o d e tsi x e n tnem medcrp uqov noitaci fidom ed euqsir el ; tnatsnoc ed esohc euqleuq ecnerfr enu riovecer ed uvrp a euq tia f el rap sio f ettec ei fitsuj es snoitcurtsni sec ed noitatpeccaL
p xe tn i p xe p xe )p xe ( 1t cf t cf

6.1 Exemple dutilisation de variables globales

6 Les variables globales


tsno c

void fct1 (const int &) ; float x ; ..... fct1 (x) ; // correct : f reoit la rfrence une variable temporaire // contenant le rsultat de la conversion de x en int

6 - Les variables globales

109

: s n oi tc ur ts ni se c ,e lp me x e rap , ze y o v , is n i A .)sio f elues enu ne lip moc tse emmargorp ud elb mesnel o sac ua snoti mil suon suon ,tnatsnil ruop( noitaralcd ruel tius iuq ecruos e mmargorp ud eitrap al eti mil tse )tidilav ed ecapse ruel erocne uo( etrop ruel euq tid nO .noitaralcd ruel tnavius ecruos em margorp ud eitrap al snad euq ruetalipmoc ud seunnoc tnos en selabolg selbairav se L

.s e i f i d o m ert d s el b it p e cs us s e l b -airav selues sel tnos selleuq tne merialc euqidni noitcnof al ed leppal ,sac ec snaD .)drat sulp arrev el no emmoc ,ruetniop rap tios ,eria f el sirppa snova suon emmoc ,ecner fr rap tios( tne mugra ne esserdal erttemsnart ned xueiciduj sulp puocuaeb tse li ,elbairav enud ruelav al ei fidom noitcno f enuuq etiahuos nouqsro L .noitcno f elleuq etrop min rap tnemesueidisni ei fidom ert tuep elabolg elbairav etuot ,te ffe nE .stimil sac sed snad euq selabolg selbairav sel resilitun reticni suov tiod iuq euqra mer ed erneg ec tnemsicrp tseC .reifidom al ed ehcpmel en neir sia m i ed ruelav al resilitud etnetnoc es tsimtpo noitcno f al iciuq zetoN .tsimitpo noitcno f al rap sesilitu tnevuort es iuq sruelav sed i etce ffa lapicnirp e mmargorp el ,ici ,isniA .ecruos e mmargorp emm ud nies ua etius al rap selip moc tnores iuq snoitcno f sel setuot ed eunnoc srola tse ellE .niam noitcno f al ed srohed ne eralcd t a i elbairav a L
elabolg elbairav ed noitasilitud elpmexE
il il il il il fait fait fait fait fait beau beau beau beau beau 1 2 3 4 5 fois fois fois fois fois

110

6.2 La porte des variables globales

Les fonctions CHAPITRE 7

#include <iostream> using namespace std ; int i ; main() { void optimist (void) ; for (i=1 ; i<=5 ; i++) optimist() ; } void optimist(void) { cout << "il fait beau " << i << " fois\n" ; }

main() { .... } int n ; float x ;

.). .. st ej b o , s erut curt s ,xuae lbat ( sta gr ga s el ru o p t e sru et ni op se l ruo p e si c r p ar e s or z e d n oit on ett eC .2 . ra p s et t - n e r ei h ci f nu s na d uO .1

.s n o i t c n o f s ert u a d s e l a c ol s e l b a ir a v s ert u a d ceva uo mon e mm ed selabolg selbairav sed ceva neil nucua tnon selacol selbairav se L . no itc no f ette c et i mi l cn od ts e et ro p r ue L .se ra lc d tn os selle o noitcno f al ed rueirtnil uq ruetalip moc ud seunnoc tnos en selacol selbairav se L

. s e r a l c d t n o s s el l e e ll e u q a l s n a d noitcno f al selacol setid tnos selbairav sellet eD .)niam ert tiavuop iuq( noitcno f enud nies ua seini fd tneiat selle ,tnemsicrp sulP .selabolg selbairav sed sap tneiatn iciuqsuj sert -nocner snoiva suon euq selbairav sel ,tnedcrp ehpargarap ud elpmexel ed noitpecxel

.noitaralcd ruel ed tnemo m ua elaitini ruelav enu tnemeticilpxe zeubirtta ruel suov is ,rs neib , fuas ,e mmarg -orp ud noitucxel ed tubd el tnava , orz sesilaitini tneiov es selbairav sec ,sulp eD .euqitats noitacollad e s s a l c al e d e itr a p t n o f s e l l e u q t n a s i d n e a l e c t i u d art n O . s n e il e d n o it i d l e d sr o l s i ni f d t n e m et i a fr a p t n os er i o m m n e s t n e m e c a l p m e sr u e L .t n ess i ar a p p a s e ll e l e u q e l s n a d e m m ar g -orp ud noitucxel etuot tnadnep tnetsixe selabolg selbairav sel ,elarng erinam enuD
2

.selabolg selbairav sec setuot ed snoitar - a l c d s e l e m m ar g or p e d t u b d n e t n a p u or g er n e s e d o c s e d ti li b is il a l r e i g l i vir p r u o p ar e g -narras no ,selabolg selbairav sed riruocer tnemulosba tua f lis ,euqitarp nE .isnia tne merar aredcorp no ,snoitcno f xua rueirtxe tios iuq ecruos emmargorp ud tiordne leuq etropmin selabolg selbairav sed reralcd ed tne mevitce ffe elbissop tios liuq neib ,euqitarp nE .lap -icnirp em margorp ua sap sia m ,2tcf te 1tcf snoitcno f xua selbissecca tnos x te n selbairav se L
1

7.1 La porte des variables locales

7 Les variables locales


6.3 La classe dallocation des variables globales
fct1 (...) { .... } fct2 (...) { .... }

7 - Les variables locales

111

; secner fr sruel uo stnemugra sed sruelav sel ; r u ot er e d r u e l a v a l : ruop elip al rus ecapsel ed euolla no ,noit -cno f enud leppal ed sro L .ugitnoc eriomm ed enoz enu snad elu mis )tuO tsriF ,nI tsriF( OFIF ep yt ed elip enu seuqitamotua selbairav sel ruop esilitu no ,tnemelarnG
seriatnemlpmoc snoitamrofnI

. n oi t -cnof al ed ellec tnemelag dnopserroc eiv ed erud rue L .selacol selbairav sel euq erinam emm al ed setiart tnos noitcno f enu stnemugra ne sesimsnart sruelav sel ,trap ertuaD . s el b air a v s e l l e t e d s n oi t a s i l a it i ni s e ll e ut n e v s e l rus )8 ehpargarap( niol sulp uep nu snordneiver suoN .) setnena mr sap tnos en selleuq issua tid no( tnavius ua leppa nud sevresnoc sap tnos en selacol selbairav sed sruelav sel euq tse noitacollad edom ec ed etaidm mi ecneuqsnoc al euq reton ed tnatrop mi tse li ,tnat -s n il r u o P . er i o m m a l e d n o it s e g e d e d o m e c r u s l i a t d n e s ul p ri n e v er e d n o is a c c o l s n or u a suoN .euqitamotua tse selbairav sec ed noitacollad essalc al euq tnasid ne alec tiudart nO . tn a v -ius ua leppa nud tner ffid tnemelarng cnod ares lI .eitros euqahc rbil te noitcno f al s n a d e r t n e e u q a h c u ol l a t s e r u e l eri o m m e c a ps e l e v u o n n U . s e l a b ol g s el b a ir a v s e d x u e c e m m o c et n e n a mr e p er i n a m e d s i ni f d s a p t n os e n s t n e m e c al p m e sr u el ,t n e m si c r p s u l P .t n er u g i f s el l e e ll e u q a l s n a d n oi t c n o f al ed noitucxe enud ellec eti mil eiv ed erud enu tno selacol selbairav sel ,tua fd raP

.n:: tna mmon al ne )::( etrop ed noitulosr ed tid ruetarpol esilitu no ,n elabolg elbairav al 1tcf snad resilitu etiahuos nol is ,rueugir etuot nE .n elabolg elbairav al ceva troppar nucua an 1tcf ed n elbairav al ,emm eD .1tcf ed p elbairav al ceva troppar nucua an niam ed p elbairav a L
int n ; main() { int p ; .... } fct1 () { int p ; int n ; }

112

7.2 Les variables locales automatiques


: elpmexe tec ze yoV
Les fonctions CHAPITRE 7

.8 4 ed tnalla sor mun sed trop tneiarua sleppa son ,sac ec snaD
or z s e si lait ini ,t ua f d rap ,t no s euq itat s essa lc e d se lac ol

s el ba irav s el

: elp mexe rap ,i tnemeticilpxe resilaitini u p s n o ir u a s u o n e u q z e t o N . : )euqitats essalc ed issua tnos selleuqsel( selabolg selbairav sel ruop e mmoc ,tef fe nE .ellun tse ruelav as leppa reimerp uauq eton no ,sulp eD .leppa euqahc 1 ed esserg -orp ruelav as euq neib etatsnoc nO . euqitats essalc ed eralcd t a elacol elbairav a L
i

euqitats elacol elbairav ed noitasilitud elpmexE


appel appel appel appel appel numro numro numro numro numro : : : : : 1 2 3 4 5

: elp mexe nu iciov nE .citats lc-tom ud edial reralcd al ed alec ruop ti ffus lI .tnavius ua leppa nud ruelav as isnia revresnoc ed te elacol elbairav enu tnena mrep tnemecalpme nu reubirttad rednamed ed elbissop tse lI

. . . e t n e n a m r t s e e l a c o l e l b a ir a v e n u u q , tr o t , er i or c t u e p n o , e l b a ir a v er t u a e n u u o l l a t t i a l i u q t n a v a e d c c a y n o , n o i t a m m a r g or p e d r u err e e n u r a p , is euq etr os ed ,r uela v as tne melarng edrag rbil tne mecalp mel ; ruetniop ec ed ruelav a l e d n o i t a c i f i d o m e l p m is e n u r a p t i a f es t n e m e c a l p m e n u d n o i t a r b i l a L . e l b i n o ps i d t n e m e c a l p m e r e i m er p e l t n a n g i s d r u e t n i o p n u d e d i a l t i a f e s e l i p a l e d n o i t s e g a L . s i l it u a r u a l e l l e u q s r p a , e t n a l e p p a n o i t c n o f a l r a p r b i l a r e s i u q r u o t e r e d r u e l a v a l e d i u l e c s i mr o h , e m m - e l l e n o i t c n o f a l r a p s r b i l t n o s s t n e m e c a l p m e s t n er f f i d s e c , n o i t c n o f a l e d e i tr o s a l e d sr o L . n oi t c n o f al s e l a c ol s e l b a ir a v s e t n er f f i d s el
113

7.3 Les variables locales statiques

#include <iostream> using namespace std ; main() { void fct() ; int n ; for ( n=1 ; n<=5 ; n++) fct() ; } void fct() { static int i ; i++ ; cout << "appel numro : " << i << "\n" ; }

static int i = 3 ;

7 - Les variables locales

: snad em moc ,eticilpxe colb nucua tneitnoc en rof noitcurtsnil is emm ,euq areton nO
for (int i=2, j=4 ; ... ; ...) { // i et j sont considres comme deux variables locales ce bloc }

: elp mexe rap ,rof noitcurt -sni enu snad noitaralcd enu reutce ffed elbissop tiat liuq uv jd snova suon ,trap ertuaD .s uss e d-i c f noitcnof erton enretni colb emixued ud sac el tseC .rof ,fi em moc erutcurts noitcurtsni euqnocleuq enud tne mmadnepdni ,colb nu tne melleici fitra rerc tuep nouq zetoN
} ..... { int p ; ..... } ..... // p nest connue que dans ce bloc ; elle est alloue ici // et na aucun rapport avec la variable p ci-dessus // et elle sera dsalloue ici

.tnabolgne colb nud elacol elbairav enuuq mon e m m el etrop elacol elbairav enuuq simrep sap tsen lI .eitros al tarapsid li te colb el snad ertnel uolla tse tne m - e c al p m e r u el ; c o l b e c e t i m il t n e m el l er u t a n t u ot sr ol a ts e e tr o p r u e L . c ol b n u s el a c o l selbairav sed reralcd ed te mrep suov ++C ,tnemetcniccus uqov jd snoival suon e mmoC

.)! tiahuos e mmoc etnemrcni sap tiares en ,ici ,sio fetuot iuq( i ed ecnenamr eniatrec enud noisullil tnannod ,ruelav e m m al sruojuot tiarehci ffa nouq etros ed ,elip al rus i uolla vuort tiares es iuq tnemecalpme e mm el sruojuot tsec ,ici ,sulp eD . er i ot a l a t c n o d t i ar u a r u e l a v a S . e s il ai ti n i n o n , t or cr u s e d , t e e t n e n a m r n o n , e ll e us u elacol elbairav enud tiga tiares es li ,citats tubirttal ceva eralcd t sap tiavan i iS

. ed elbairav al ceva troppar nucua srola tiaruan iuq e m - mon elabolg elbairav enu rini fd snoirruop suon ,elpmexe erton snad ,isniA .einifd tse elle elleuqal snad noitcno f al etimil sruojuot etser elbairav ellet enud etrop al ,te ffe nE .elab -olg elbairav enu ceva euqitats essalc ed elacol elbairav enu erdno fnoc sap en edrag zenerP
t cf i i

114

7.4 Variables locales un bloc

Les fonctions CHAPITRE 7

for (int i=1, j=1 ; i<4 ; i++) cout << i+j ; void f() { int n ; ..... for (...) { int p ; int n ; ..... }

// p nest connue que dans le bloc de for // n masque la variable n de porte "englobante" // attention, on ne peut pas utiliser ::n ici qui ..... // dsignerait une variable globale (inexistante ici) // n est accessible de tout le bloc constituant f

e uqrameR

nruter

caf

caf

tcf

. eri o m m e c a ps el e d r er b il c n o d t e s t n e m e c al p m e s e l t e s l e p p a s e l r el i p d ar e c n e m m o c n ol e u q noitcurtsni erimerp al ed noitucxel ed srol euq tsen eC .noitcno f al ed sleppa sed tnemel -ip me nu tnemelllarap ,selacol selbairav xua suolla secapse sed tnemelipme nu cnod a y lI .s r b il t n e i os st n e d c r p s t n e m -ecalpme sel euq snas ,noitacolla ellet enu euqovorp , ed rueirtnil , ed leppa levuon euqahc rO .)ruoter ed ruelav as riovecer nitsed tnemecalpme nu riovrp tua f iul li ,tilar ne ; elacol elbairav enucua etrop moc en ,tne mmerappa( tnemugra nos ruop te selacol selbairav sel ruop ecapsed noitacolla enu enartne ed leppa euqahc euq riov neib tua f lI
caf

elleuiroitcaf ed luclac ed evisrucr noitcnoF


long fac (int n) { if (n>1) return (fac(n-1)*n) ; else return(1) ; }

: evisrucr erinam ed elleirotca f enu tnaluclac noitcnof enud )noitucxed spmet ud nalp el rus ecaci ffeni sruelliad( euqissalc tro f elp mexe nu icioV .)s n oi t c n o f xued ed sulp rinevretni eria f sruelliad tnavuop elc yc el( elaitini noitcno f al elleppa ,ruot nos ,iuq noitcno f ertua enud iulec enartne noitcnof enud leppal : esiorc tivisrucr ; emm - e l l e l e p p a n u s n i o m u a , n o it i ni f d as s n a d , e tr o p m o c n oi t c n o f e n u : e t c eri d t i visr u c r : st c e ps a x u e d er d n er p t u e p i c- el l e C .s n oi t c n o f e d s l e p p a s e d ti v isr u c r a l es ir o t u a + + C

. e l p m is e p y t n u d s el b air a v x u a u q r e u q il p p as tuep en tilibissop ettec ,udnetne neiB .noitucxed spmet ed sniag seuqleuq renema tuep alec : elbairav al regnar y ruop enihca m al ed ertsiger nu ,elbissop ud erusem al snad ,resilitud ruetalipmoc ua ednamed ic-iuleC .retsiger fitaci filauq el ceva tnemeticilpxe eralcd ert tuep euqita motua essalc al snad iroirp a tnartne elbairav etuot : ertsiger essalc al riovas ,erilucitrap uep nu noitacollad essalc enu etsixe li ,rueugir etuot nE
seriatnemlpmoc snoitamrofnI

tirc tiava nol is e mmoc tnemetcaxe ,etius al rap seunnoc sulp tnores en j te i selbairav sel
115

7.5 Le cas des fonctions rcursives


for (int i=1, j=1 ; i<4 ; i++) { cout << i+j ; }

7 - Les variables locales

- i ni ert t n e v u e p s e ll e , e u qi t a ts ess al c e d s e l b a ir a v s e l e m m o c , e h c n a v er n E . t u a f d r a p s e s -ilaitini sap tnos en selbairav seC .colb nu uo noitcno f enu selacol selbairav sed tigas lI

: el oc d s a c n u i ci o v n E .s ei n i f d t n o s s el l e e ll e u q al s n a d n oi t c n o f al e d l e p p a e u q a h c s e si l ai ti n i srola tnevuort es seuqita motua selbairav sec euq sap zeilbuoN .)! niam noitcno f al ed rigas t ue p l i( et na d n o pserr oc n oitc n o f a l s na d ert nel e d t ne m o m ua ei ni f d ti os r uela v as e u q u e p ruop ,)noitatceffa rap elbitapmoc epyt nud( euqnocleuq noisserpxe enud emro f al suos einruo f ert tuep elaitini ruelav al ,sac ec snaD .noitaralcd ruel ed srol tnemeticilpxe sesilait

.orz sesilaitini tnores selbairav sec ,eticilpxe noitasilaitinid ecnesbal nE


void f (...) { const int NB = 5 ; static int limit = 2 *NB + 1 ; // 2*NB+1 est une static short CTOT = 25 ; // 25 de type int static float XMAX = 5 ; // 5 de type int est static long YTOT = 9.7 ; // 9.7 de type float ..... expression constante est converti en short int converti en float est converti en long (dconseill)

: )selliesnoc uep siam ,setpecca tnos taolf >-- gnol ep yt ud setnadargd snoisrevnoc sel euq areton no( elp mexe tec snad e mmoc ,elbairav al ed iulec ceva noitatceffa rap elbitapmoc nud )ruetalip moc el rap selbaluclac( d u o s e t n a ts n o c e d e d i a l ,noitaralcd ruel ed srol tne meticilpxe sesilaitini ert tnevuep sellE .em margorp ud noituc - x el e d t u b d e l t n a v a s i o f e l u e s e n u s e s il ai t i n i t n o s s e l l E . s e t n e n a mr e p t n o s s e l b a ir a v s e C .citats tubirttal ceva seralcd selacol selbairav sed euq isnia ,selabolg selbairav sed tigas lI
epyt setnatsn o c sn ois serp xe

. e nr e c n o c el b a ir a v a l e d n oi t a c o l l a d ess al c al ed tia f ne tnednepd selleuqsel ,stilibissop sec rus tniop el eria f snolla suon ,icI .noitar -alcd as ed srol elbairav enu tnemeticilpxe resilaitinid elbissop tiat liuq uv snova suoN

116

8.2 Les variables de classe automatique

8.1 Les variables de classe statique

8 Initialisation des variables

Les fonctions CHAPITRE 7

#include <iostream> using namespace std ; int n ; main() { void fct (int r) ; int p ; for (p=1 ; p<=5 ; p++) { n = 2*p ; fct(p) ; } }

9 - Les arguments par dfaut

117

void fct(int r) { int q=n, s=r*n ; cout << r << " " << q << " " << s << "\n" ; } 1 2 3 4 5 2 2 4 8 6 18 8 32 10 50

9 Les arguments par dfaut


9.1 Exemples
.leppal ed srol sinruof non stnemugra sed tuafd rap sruelav ed noitubirttad e ms i n a c m n u e c r g , el g r et t e c e d ei tr a p n e r i h c n ar f f as e d t e mr e p + + C .t n e m e v i t c e f f e ti a d -netta ne noitcno f al euq stnemugrad tnatua tneia mre fner noitcno f ed sleppa son ,iciuqsuJ

Exemple 1

#include <iostream> using namespace std ; main() { int n=10, p=20 ; void fct (int, int=12) ; // prototype avec une valeur par dfaut fct (n, p) ; // appel "normal" fct (n) ; // appel avec un seul argument // fct() serait, ici, rejet */ } void fct (int a, int b) // en-tte "habituelle" { cout << "premier argument : " << a << "\n" ; cout << "second argument : " << b << "\n" ; } premier argument second argument premier argument second argument : : : : 10 20 10 12

tnemugra nu ruop tuafd rap ruelav ed noitinifd ed elpmexE

euqitamotua essalc ed selbairav ed noitasilaitinI

: t na v iu s elp m e xe l zer d is n oC

: euq ellet noitaralcd enu ,elpmexe raP .etsil al ed sreinred sel ert tnemeriotag -ilbo tneviod snrecnoc stne mugra sel ,tua fd rap sruelav sed tiovrp noitaralcd enuuqsro L

stnemugra srueisulp ruop tuafd rap sruelav ed noitinifd ed elpmexE


premier argument second argument premier argument second argument premier argument second argument : : : : : : 10 20 10 12 0 12

: tcf ed stnemugra sel suot ruop tua fd rap sruelav sed uvrp snova suon leuqel snad ,elp mexe dnoces nu icioV .tcf ed tne mugra rei m -erp el ruop tuafd rap ruelav ed uvrp sap tiatn li ici euqsiup noitalipmoc al tejer tiares : euq let leppa nuuq zetoN .enmonhp el tnertsulli tcf ed sleppa xued se L .ruelav ettec ceva utce ffe t tiava leppal is e mmoc eria f ardua f iul li ,tcf ed leppa leut -nev nu snad tne mugra dnoces ec ed ecnesbad sac ne ,euq ruetalip moc ua esicrp ic-elleC : e mro f al suos tarappa tnemugra dnoces ud noitaralcd a L : ep ytotorp el rap esilar tse ,niam noitcnof al snad ici ,tcf ed noitaralcd a L
118
Les fonctions CHAPITRE 7
void fct (int, int = 12) ; int = 12 fct ( )

9.2 Les proprits des arguments par dfaut

Exemple 2

float fexple (int = 5, long, int = 3) ;

#include <iostream> using namespace std ; main() { int n=10, p=20 ; void fct (int=0, int=12) ; // prototype avec deux valeurs par dfaut fct (n, p) ; // appel "normal" fct (n) ; // appel avec un seul argument fct () ; // appel sans argument } void fct (int a, int b) // en-tte "habituelle" { cout << "premier argument : " << a << "\n" ; cout << "second argument : " << b << "\n" ; }

. egrahcrus rap tiudart siofrap ,gnidaolrevo eD .2 .)11 ertipahc ua idut ares siht( serbmem snoitcnof sel ruop siht
rue la v al iN .1

.) n oi t c eri d ni e n u ,sr u e t ni o p s el s n or e i d u t s u o n e u qsr ol snorrev el suon e mm moc ,uo( stnattol f ed ,sreitned noitacilpitlum enu ,etxetnoc el tnavius ,rengisd tuep * elob m ys el ,e m m eD .stnattol f ed noitidda enud uo sreitned noitidda enud rigas arruop li ,sac sel tnavius ; b te a sednarpo sed ep yt ud dnepd + ud noitaci fingis al
a + b

: euq ellet noisserpxe enu snad ,elpmexe raP .sruetarpod erb mon niat -rec nud noitini fdrus al tnesilitu sulov segagnal sed trapulp al euq isnia tseC .etxetnoc ud noitcno f ne tnasia f es snoitaci fingis sed enul ed xiohc el ,setner ffid snoitaci fingis srueisulp edssop elobm ys e m m nuuqsrol noitini fdrus ed elrap no ,elarng erinam enuD
2

. selacol selbairav ed rinevretni eria f sap sio fetuot tnevuep en sellE .setnatsnoc snoisserpxe sed tnemeriassecn sap tnos en tua fd rap sruelav se L
1

el sap tsen ec ,tid tnemertuA .noitinifd as snad non te noitcnof al ed noitaralcd al snad tuafd rap sruelav sel rexif tneiver ++C rap soporp emsinac m el euq neib zetoN
fexple (10, 20, 3) ;

. essalc enud ruetcurtsnoc el em mon nol euq ec reuqirba f ed arigas liuqsrol xueicrp tne merilucitrap tnorelvr es tua fd rap stnemugra sel euq snorrev suoN .ett-ne reihci f nu snad ,setuot ruop sio f enu segi f larng ne tnos snoitcnof ed snoitaralcd sel euq ecrap euq ec-tiares en ,tiolpxe erug ares en tniop ec ,siofetuot euqitarp ne ; ertua enu noitasilitu enud reirav tnevuep setnadnopserroc sruelav sel te e msinacm ec si muos stnemugra sel euq tse tiralucitrap ettec ed etaidm mi ecneuq -snoc enU .ruetasilitul siam ,tua fd rap sruelav sed edicd iuq noitcnof al ed ruetpecnoc

: tnavius leppal ,etpecca tiat noitar -alcd ettec is ,te ffe nE .snes nob rup ud evler noitcidretni ellet enu ,tia f nE .etidretni tse
119

10 Surdfinition de fonctions
.avaJ ne sap tnetsixen tua fd rap stne mugra se L
avaJ n E e uqrameR

: em moc euq

: e mmoc neib issua trpretni ert tiarruop


fexple (10, 20) ;

fexple (5, 10, 20) ;

10 - Surdfinition de fonctions

.)lues nu etiudr ici( stne mugrad etsil al ed uv ua ,eisos noitcno f ennob al ed leppal ecalp ne si m neib a ruetalip moc el euq zetatsnoc suoV
eisos noitcnof al ed noitinifdrus ed elpmexE
sosie numero I a = 5 sosie numero II a = 2.5

. elbuod ep yt ed tnemugra nu ceva sio f ednoces enu ,tni ep yt ed tnemugra nu ceva sio f erimerp enu ,eisos eini fdrus noitcno f al tnemevisseccus releppad snotnetnoc suon suon ,iassed emmarg -orp el snaD .eirporppa egahci ffad noitcurtsni enu enucahc snad snosiudortni suon ,eleppa tne mevitce ffe noitcno f al tnemerialc ertnom e mmargorp ud noitucxel euq ruoP .ertual ed enul neib eicner ffid sel iuq ec ,elbuod ep yt ed tnemugra nu ednoces al ,tni ep yt ed tne m -ugra nu aredssop erimerp a L .eisos semmon snoitcno f xued resilitu te rini fd snolla suoN

. n oi t c n o f e n n o b al e d xi o h c u a t n e d is r p i u q s e ll i a t d s el g r s el r e i d ut d t n a v a ei n i f dr u s noitcno f enud leppad snoitautis setner ffid etiusne snorenimaxe suoN .snoitcno f ed noit -ini fdrus al ervu ne erttem tnem moc tnartnom telp moc elpmexe nu retnesrp suov rap snor -ecnemmoc suoN .stnemugra sed ep yt el rus )elp mexe ne tnem medcrp stic sruetarpo sel ruop e mmoc( sab tse xiohc ec ,++C nE .noitcno f ennob al risiohc ed tnatte mrep )mon el euq ertua( ertirc nu rs neib tua f li ,mon e m m ed snoitcno f srueisulp re yolpme riovuop ruoP .e m m- el le r u o p i ci r e i d u t d s n os o p or p s u o n euq tilibissop erinred ettec tseC .snoitcnof ed noitini fdrus al rus tiaf ne esoper liuq snor -rev suon ,tcepsa tec snoreidut suon euqsro L .)essalc ed noiton al sicossa tnos sliuqsrol( sruetarpo sed trapulp al ed noitini fdrus al ertte mrep ed tse ++C ed stuota sdnarg sed nU
120
Les fonctions CHAPITRE 7

10.1 Mise en uvre de la surdfinition de fonctions

#include <iostream> using namespace std ; void sosie (int) ; void sosie (double) ; main() { int n=5 ; double x=2.5 ; sosie (n) ; sosie (x) ; } void sosie (int a) { cout << "sosie numero I } void sosie (double a) { cout << "sosie numero II }

// la premire fonction a = " << a << "\n" ; // le programme de test // les prototypes

// la deuxime fonction a = " << a << "\n" ;

10 - Surdfinition de fonctions

121

10.2 Exemples de choix dune fonction surdfinie


.sevitiutni zessa snoitautis seuqleuq drobad tuot snonimaxe ,eini fdrus noitcnof enud noitani mretd ed selgr sel retnesrp ed tnavA ...stnemugra srueisulp tnatropmoc snoitcno f sed eriaf fa tiava nol is uo ,gnol uo rahc ep yt ed tnemugra nu ceva elpmexe rap snoileppal suon is tiariudorp es iuq ec rednamed es tuep nO .) elbuod uo tni( sep ytotorp sel snad suvrp sep yt sed nul tnemetcaxe tna ya tne mugra nu ceva eisos noitcno f al sruojuot snoileppa suon o erusem al snad ,elp mis tiat elp mexe tnedcrp ertoN
Exemple 1
void sosie (int) ; void sosie (double) ; char c ; float y ; ..... sosie(c) ; // appelle sosie(y) ; // appelle sosie(d) ; // appelle // sosie I // sosie II sosie I, aprs conversion de c en int sosie II, aprs conversion de y en double sosie I, aprs conversion de d en int

Exemple 2
void essai void essai int n, p ; ..... essai(n,z) essai(c,z) essai(n,p) (int, double) ; // essai I (double, int) ; // essai II double z ; char c ; ; // appelle essai I ; // appelle essai I, aprs conversion de c en int ; // erreur de compilation,

Exemple 3
void test (int n=0, double x=0) ; // test I void test (double y=0, int p=0) ; // test II int n ; double z ; ..... test(n,z) ; // appelle test I test(z,n) ; // appelle test II test(n) ; // appelle test I test(z) ; // appelle test II test() ; // erreur de compilation, compte tenu de lambigut.

Exemple 4

.II iasse releppa te p rei fidom snas elbuod ne n ritrevnoc ,eriartnoc ua ,uo I iasse releppa te n rei fido m snas elbuod ne p ritrevnoc : ici tnetsixe stilibissop xued ,tef fe nE .noitalipmoc ed ruerre enu tiudnoc leppa reinred el ,tugib ma nos ed unet etp moC : snoitaralcd sec cevA
void truc (int) ; void truc (const int) ; // truc I // truc II

.sac ec snad eipoc enu non uo eriaf ed erbil tse noitatnemlpmil ,emron al esirotual emmoC .1

: ) e s o h c e d l e p p a t u o t e d t n e m m a d n e p d n i( t u g i b m a ruel eud noitalipmoc ed ruerre enu tneiariudnoc setnavius snoitaralcd sel ,elp mexe raP .eini fdrus noitcno f enud xiohc el snad sap tneivretnin )ruelav uo ecner fr( nois -simsnart ed edo m el euq areton no ,5 elp mexel snad eni maxe noitautis al ed srohed nE 1

: )4.2.5 ehpargarap el tne m - el le u t ne v z e y ov er( s elp me xe s ec t ner t n o m el e m m o c , se li tb us s u lp s ec n euq s n oc se d e d s -sop secner fr ed noitasilitul siaM .etnatsnoc ecner fr enu rus ertual ,ecner fr enu rus enul ,tnassiga snoitcno f xued reugnitsid tiavuop no tnemmoc rtno m a tnedcrp elpmexeL . n eir t i a f n e n I I esohc euq sidnat ,ecnerfr al tioer elle tnod eulavl al ed ruelav al eifidom I esohc euq renig - a m i n ei b s r t t u e p n o , t e f f e n E . e i f its u j ts e & t n i t s n o c t e & t n i e r t n e n o i t c n i t s i d a l , s i o f e t t e C
void chose (int &) ; // chose I void chose (const int &) ; // chose II int n = 3 ; const int p = 5 ; ..... chose (n) ; // appelle chose I chose (p) ; // appelle chose II

: snoitaralcd sec tnanetniam zerdisnoc ,ehcnaver nE . e uqn o c - l e u q l e p p a n u d t n e m m a d n e p d ni , c u r t e d s n o it ar a l c d s e d e c n es r p e l u es al t n ei t r u err e l iciuq neib zetoN .elanigiro ruelav al rei fido m ed euqsir nucua a yn li ,retiart noita m -ro fnil ed eipoc enu tnavecer curt snoitcno f xued sel ,euq tia f el rap ei fitsuj es aleC .tni tsnoc ed tni reugnitsid ed uvrp sap an ++C ,te ffe nE .noitalipmoc ed ruerre enu zerdneitbo suov
Exemple 5

122

Exemple 6

Les fonctions CHAPITRE 7

void chose (int &) ; // chose I void chose (const int &) // chose II int n : float x ; ..... chose (n) ; // appelle chose I chose (2) ; // appelle chose II, aprs copie ventuelle de 2 dans un entier1 // temporaire dont la rfrence sera transmise chose chose (x) ; // appelle chose II, aprs conversion de la valeur de x en un // entier temporaire dont la rfrence sera transmise chose

void chose (int &) ; void chose (int) ;

se uqrameR

rahc dengisnu

ed te

rahc deng is

ed tnerffid tse

rahc

,++C ne : noitnettA .1

.etpecca tse euqir mun ep yt ertua nu ne euqir mun ep yt nud noisrevnoc etuot ,tnemmaton ,euqsiup setnadargd snoisrevnoc ed rigas tuep li ,sio f ettec ; )tsac ed ruetarpo snas( noitatce f fa enu rap sesopmi ert tnevuep iuq sel -lec ed erid--tsec ,++C ne selagl snoisrevnoc sed tigas li : dradnats setid snoisrevnoC )3 .etnatsnoc enu ecner fr al ed tigas liuqsrol fuas ,noisrevnoc enucua si muos ert tuep en ecner fr rap simsnart tnemugra nuuq snoleppaR elbuod > taolf tn i > trohs te r a h c : tnemelleitnesse erid--tsec ,seuqirmun snoitomorp ceva ecnadnopserroC )2

.)sr ue t ni o p s el r u o p e m m ed ari ne li( secner fr ed sac el snad rinevretni tuep tsnoc tubirttal ,stnedcrp selp mexe sel snad uv al no em moc ,sulp ed ; engis ed tubirtta leutnev ruel ed etpmoc tnanet ne ,esab ed sep yt stner f fid sel sertua sed snu sel neib eugnitsid no : etcaxe ecnadnopserroC )1
1

: ecnadnopserroc ed xuaevin stner ffid uvrp tse li ,eriaf ec ruoP .noitaul - a v d er tir c n u d e s o p si d l i u q t u a f li , e c n a d n o ps err o c er u el li e m et t e c ts e u q e c r i ni f d r i o v -uop ruop ,udnetne neiB .elbissop ecnadnopserroc eruelliem al ehcrehcer ruetalipmoc e L .A exennA ne sesirper tnos selgr sec setuot ed elbmesnel ,sulp eD .seriatnemlp moc snoita mro fni sed retroppa suov snema snores suon ,egarvuo tec ed sruoc uA .stnavius sertipahc sed edutl ruop tnasi ffus ares iuq ec ,elarng eihposolihp al ttulp snoretnesrp suov suon ,tnatsnil ruoP
10.3.1 Cas des fonctions un argument

. s et i c il p mi s n o i s r e v - n o c e d s t il i bi ss o p e d u e p e ts i x e l i r a c , + + C n e u q s e l p m is s u l p p u o c u a e b t n os n o it c n o f e n n o b al e d e h cr e h c er e d s e l g r s el si a M . a v aJ n e ets i x e s n o it c n o f s e d n o it i ni f dr us a L
avaJ n E

.) * t n i t s n o c ( etnatsnoc en u rus r uet niop nu te )* tni( elbaira v enu rus ruetniop nu ertne elbarap moc n o i t c n i ts i d e n u e t s i x e l i u q ) 8 er t i p a h c u d 9 e h p ar g ar a p( s n orr e v s u o n , sr u e t n i o p s e l s n or - e i d u t s u o n e u q sr o L . & t n i t s n o c e d e u g n i t s i d e s & t n i t n e m m o c r i o v e d s n o n e v s u o N 2
123

10.3 Rgles de recherche dune fonction surdfinie


10 - Surdfinition de fonctions

.stnemugra sed nucahc ruop ecnadnopserroc eruelliem al tnasilar snoitcnof sed sutitsnoc selbmesne sed noitcesretnil erdisnoc liuq erid tneiver iuq eC .1

.stne mugrad etsil al ed sruocrap el resilaitinid ,etros euqleuq ne ,temrep iuq exi f tnemugra reinred el tsec ,riov el snolla suon em moc ,tef fe nE .)tnesrp sruojuot erid--tsec( exi f tne mugra nu sniom ua redssop tiod noitcno f al euq tse retcepser etniartnoc elues a L .)gradtsc ett-ne reihcif el snad erugi f ep yt -otorp el tnod( gra_av te trats_av serilucitrap snoitcno f sed edial tneivrap y no ,++C nE .ertua nu leppa nud reirav ed elbitpecsus stnemugrad erbmon nu riovecer ed elbapac noitcno f enu resilar retiahuos tuep no ,secnatsnocric seniatrec snad ,rO .noitcno f ettec ed erutircl ed srol uvrp tiat noitcno f enud leppal ed sruoc ua sinruo f stne mugrad erb mon el ,selpmexe stnedcrp son suot snaD

.stne mugrad t nas si orc erb m o n nu ce v a se i ni f d t t ne ia va se t ner f f i d s n oi tc n o f sr ue is ulp is e m m o c setiart tnos tuafd rap stnemugra srueisulp uo nu tnatropmoc snoitcno f sel euq zetoN . no i ta l -ipmoc ed ruerre arua y li ,tneivnoc en noitcno f enucua is ,emm eD .ertnocner tugib mal eud noitalipmoc ed ruerre enu arua no ,erocne l ,tnenneivnoc snoitcno f srueisulp iS . s n o it c n o f s er t u a s e l setuot ed ellec elag snio m ua ecnadnopserroc enu ,tnemugra euqahc ruop ,esilar iuq )euq - i n u t s e el l e i s t e et si x e e ll e is( el l e c tis i o h c l i , s e n n o it c e l s i s n i a s n oi t c n o f s e d e l b m es n e l imraP .)sussed-ic eini fd eihcrarih al ed snes ua( ecnadnopserroc eruelliem al tnesilar iuq snoitcno f sel uo al ,tnemugra euqahc ruop ,ennoitcels ruetalip moc el ,eria f ec ruoP .sertua sel setuot euq eruelliem noitcno f enu regagd es tiod liuq tse elarng ediL
1

.noitalipmoc ed ruerre issua a y li ,uaevin nucua tneivnoc e n n oi t c n o f e n uc u a is , u d n et n e n ei B . ert n o c n er t u gi b m al e u d n o i ta li p m o c e d r uerr e a y li , e c n a d n o ps err o c e d u a e vi n e m m u a t n e n n e i v n o c s n o i t c n o f sr u e is ul p i S . e u q i n u ert sr ol a tiod iuq ,ecnadnopserroc enu revuort ed simrep tna ya uaevin reimerp ua etrras ehcrehcer a L .etnatsnoc enu ecner fr enud tigas lis fuas ,noisrevnoc enucua simuos ert arruop en ecner fr rap simsnart tne mugra nu ,erocne L . 6 1 e rt i p a h c u a u q s e i d ut t n or es e n i u q ,). U . D. C( r u e t asi li t ul r a p s e i ni f d s n oisr e v n o c s e d em mon nol euq ec rinevretni eria f arruop no reilucitrap ne ; suvrp tnos xuaevin sertuaD )4

124

11 Les arguments variables en nombre


10.3.2 Cas des fonctions plusieurs arguments
Les fonctions CHAPITRE 7

: n oi tar al c d a L .elbairav erb mon ne sert marap ed ecnetsixel ruetalip -moc ua rei ficps tnevres stniop siort sel ; euqissalc erina m ed sralcd ,2rap te 1rap sexif sertmarap sed smon xued sed , iasse noitcno f al ed ett-nel snad ,ecnesrp al zetatsnoc suoV
ellenitnes enu rap stimild ,elbairav erbmon ne stnemugrA
: 6264 : S

.reinred ud noitpecxel ,)selbairav uo sexi f( stnemugra stner ffid sec ed sruelav sel retsil ed ,noitcno f ettec snad ,stnetnoc semmos s u o n s u o n , n oi ta ci f il p m is e d i c u os ra P . e ll e ni t nes e d , etr os e u ql e u q ne , c n o d tr es r u el a v erinred etteC .1- tiat xue ertned reinred el euq soppus a nol te euqnocleuq erbmon ne tnos ,tni ep yt ed ,stnavius stnemugra se L .rahc ep yt ed ertual ,tni ep yt ed tnat nul ,sexif tnos stne mugra srei merp xued sel : selbairav stnemugra noitcno f ed elpmexe rei merp nu icioV

11.1 Premier exemple

va_list adpar ;

premier essai premier parametre second parametre argument variable argument variable argument variable deuxieme essai premier parametre second parametre

main() { cout << "premier essai\n" ; essai (125, a, 15, 30, 40, -1) ; cout << "deuxieme essai\n" ; essai (6264, S, -1) ; }

void essai (int par1, char par2, { va_list adpar ; int parv ; cout << "premier parametre : " cout << "second parametre : " va_start (adpar, par2) ; while ( (parv = va_arg (adpar, cout << "argument variable }

#include <iostream> #include <cstdarg> using namespace std ;

: : : : :

125 a 15 30 40 // pour va_arg et va_list int) ) != -1) : " << parv << "\n" ; << par1 << "\n" ; << par2 << "\n" ; ...)

11 - Les arguments variables en nombre

125

.selbairav stne mugrad erb mon el tnai ficps iulec euq exi f tnemugra ertuad uvrp sap snova yn suoN .euqinhcet ednoces ettec tnasilitu noitcno f ed elpmexe nu icioV .s e l b a ir a v st n e m u gr a d er b m o n u d , e x i f t n e m u gr a n e , n ois si ms n ar t r a p ; elpmexe tnedcrp erton snad em moc ,ellenitnes rap : eriaf es tuep noitseg etteC .s t ne m -ugra sec ed fitce ffe erb mon el ertannoc ed tnatte mrep noitcno f enucua etsixen li ,te ffe ne ; ruetasilitul ed nios nob ua essial tse selbairav stnemugra sed etsil al ed nif al ed noitseg a L

. 1 3 e rt i p a h c ud 2.2 ehpargarap setnesrp tnores ,C neuq ++C ne sesilitu snio m puocuaeb ,sorca m s e L . e vi t c e f f e n oi t a si li t u r u el r u s e c n e d i c n i d u e p e u q a n n o it c ni ts i d e t t e c ; s or c a m sed siam ,snoitcno f selbatirv ed sap tnos en gra_av te trats_av ,rueugir etuot nE
seriatnemlpmoc snoitamrofnI

.ertua enud uo noa f enud ,ertannoc sel ed erusem ne tios noitcno f al euq sio fetuot noitidnoc ,stner ffid sep yt ed ert tnevuep selbairav stnemugra se L

.em margorp ud tnemennoitcno f siavuam nu eriudnoc noitcno f al leppa niahcorp nu riov ed euqsir el zeruoc suov ,elgr ettec zeuqna m suov iS .enrecnoc noitcno f al ed ritros ed tnava eleppa ert tiod dne_av orca m al euq tiovrp ISNA e mron al ,nifnE .1- ruelav ruop a reinred el euq tnahcas ,selbairav stnemugra stner ffid sel rerpucr ed temrep suon elihw noitcurtsni enu ,icI .t na v i us elb air av t n e m u gra l r us sr o la etniop ic-ellec euq erina m ed ,rapda snad eunetnoc esserdal etnemrcni elle ,trap ertuad ; )tni ici( tnemugra dnoces nos rap uqidni ep yt el tnavius ,)tne mugra rei merp nos( rap -da r ap e inr u o f e t nar u oc ess er da l e v u ort r u el av a l t at l us r e m m oc ti nr u o f e ll e , trap e n u d : elbuod tse gra_av noitcno f al ed elr e L . e xi f er t m ar a p r e i nr e d u d mon ud ecnassiannoc al ed ritrap trats_av rap enimretd tse erinred ettec euq neib zetoN .elbairav ertmarap ud esserdal resilaitinil ed erttemrep av iuq trats_av noitcno f al tnemev -itce ffe tseC .rapda ruelav enucua eubirttan noitaralcd ellet enu ,emutuoccal e mmoC .selbairav stnemugra stner ffid sel ,sertua sel srpa snu sel ,rerpucr arivres suon iuq iul tseC .elbairav etsil ed ruetaci fitnedi nu tse rapda euq esicrp
126
Les fonctions CHAPITRE 7

11.2 Second exemple


e uqrameR

suon euq snoitcno f sel stner ffid secruos sreihci f sed snad recalp tia f tuot zeirruop suov ,elp -mexe raP . eraps noitalipmoc ed srola elrap nO .ruetasilitul rap sunoc secruos sreihcif sed reuqilppas tuep )trap ertuad trqs ,trap enud niam ertov ici( ertual ed enul etnad - ne p d n i n o a f e d s l i p m oc st ej b o s el u d o m sr u eis u l p t i n ur n o e ll e u qa l s na d ,e hcr a m d e tt e C .elbatucxe em margorp el rerc ruop sneil ed ruetidl rap roprocni ares liuq te euqhtoilbib enu snad erugi f liuq ,lip moc t jd a noitcno f ettec tnadnopserroc tejbo eludom el euq snovas suoN .trqs euq sellet seuqitam -hta m snoitcno f sed snoitaralcd sel tneitnoc iuq htamc ett-ne reihci f el snoiroprocni suon ,eria f ec ruoP .trqs euq sellet seini fdrp snoitcno f sed resilitu snema t jd snova suoN

exif tnemugra ne inruof tse erbmon el tnod selbairav stnemugrA


deuxieme essai nombre de valeurs : 0

12.1 Compilation spare et prototypes

12 La consquence de la compilation spare


premier essai nombre de valeurs argument variable argument variable argument variable #include <iostream> #include <cstdarg> using namespace std ; void essai (int nbpar, ...) { va_list adpar ; int parv, i ; cout << "nombre de valeurs : " << nbpar << "\n" ; va_start (adpar, nbpar) ; for (i=1 ; i<=nbpar ; i++) { parv = va_arg (adpar, int) ; cout << "argument variable : " << parv << "\n" ; } } main() { cout << "premier essai\n" ; essai (3, 15, 30, 40) ; cout << "\ndeuxieme essai\n" ; essai (0) ; } : : : : 3 15 30 40

12 - La consquence de la compilation spare

127

.ruerre enu ardneitbo no ,)dradnats euqht -oilbib al tnautitsnoc xuec snad sirpmoc y( tejbo eludo m nucua snad evuort tsen f ed noitin -i fd al ,sneil ed noitidl ed srol is ,ehcnaver nE .emlborp snas areluord es noitalip moc a L
// utilisation de f // dclaration de f ici, galement ici, on dispose des dclarations figurant dans MesFonc.h Attention : "MesFonc.h" et non <MesFonc.h> pour un fichier en-tte utilisateur main() { void f() ; ..... f() ; ..... }

: )eralcd tnemetcerroc tios elleuq uep ruop( noitcno f enud noitini fd al si mo a no leuqel snad e mmargorp nu erircd elbissop tia f tuot tse liuq tiov no ,eraps noitalipmoc ed stilibissop sec ed unet etpmoC

: ) >. . . < e d u e i l u a " . . . " e d n o i t a s i l i t u ( r u e t a s - il i t u l e d sr ei h ci f s e l r u o p e i f i d o m t n e m er g l ts e n e e x a t n ys al e u q r i o v as t n a d n e p e c t u a f l I .edulcni# evitcerid enu rap ett-ne reihci f ertov zereroprocni suov ,sinifdrp sett-ne sreihci f sel ruop e mmoC .h. noisnetxel aretrop reihci f let nu ,tnemelarn G .)selle ertne troppar nu tna ya snoitcno f ed epuorg rap ett-ne reihci f nu ttulp uo( erutircd sruerre selleutnevd retiv noa f ed ,snoitaralcd sel tnanetnoc ne )cno FseM elp mexe rap m mon( ett-ne reihci f nu riovrp ne ma tne melbaborp zeres suov ,semmargorp srueisulp rap sesilitu ert tneviod zeppolevd suov euq snoitcno f sed seniatrec iS .noitaralcd as euq arevuort yn nO .t n asi l it ul e m m ar g or p e l s n a d s ul p er u gi f e n n oi t c n o f a l e d n oi t i n i f d a l ,s a c e c s n a D . t n e m -raps relip moc sel te )tcf , tsimitpo ,egnahce ,elpxef( tnavarapua rerc sne ma t snova
128
Les fonctions CHAPITRE 7

12.2 Fonction manquante lors de ldition de liens


main() { #include "MesFonc.h" ... // ici, on dispose des dclarations figurant dans MesFonc.h } void f() { // ici, non } #include "MesFonc.h" // // main() { ... // } void f() { // } include "MesFonc.h"

: a m h cs e c s n a d e m m o c ,l a c o l u a e vi n n u

: a m h cs e c s n a d e m m o c ,l a b o l g u a e vi n n u : er i a f es t u e p e t t- n e r ei h ci f n u d n o is ul c n il e u q s n o l e p p a R

: e t n a v i us n o a f al e d e p y t ot -orp nos rinruo f ed ari ffus suon li ,++C e mmargorp nu snad resilitul snotiahuos suon euq te : ett-ned noitcno f enu C ne lip moc te tirc snova suon is ,elpmexe raP ."C" nretxe noitnem al ed ep yt -otorp nos redcrp tnasia f ne noitcno f ellet enu reralcd : sio fetuot etsixe noitulos enU .uq -ov e msinacm el tnavius i fido m mon nos sap aruan noitcnof ellet enu ,tef fe nE .)nartroF el u o r u e l b m e ss a l t n e m m a t o n , n o it c n o f e d l e p p a d s n oi t n e v n o c s e m m s e l t n asi li t u e g a g n al ertua nu snad uo( C ne elipmoc te etirc noitcnof enu ++C e mmargorp nu snad resilitu etiah -uos nol euq sd ,esop es emlborp nuuq cnod tiov nO .)ertua nu snad einifdrus ares ecruos r e i h c i f n u s n a d e l i p m o c n o it c n o f e n u is r i o v as e d el b iss o p m i t s e li( n o n u o s ei n i f dr us t n ei os selleuq ,snoitcno f sel setuot euqilppas e msinacm ec euq reton ed tnatropmi srt tse lI .stne mugra ses ed erutan al te erb mon el rus trap ertuad ,noitcno f al ed enretni mon el rus trap enud dno f mon uaevuon nu euqirba f ic-iulec ; snoitcnof sed senretxe s mon sed ,ruetalip moc el rap ,noitaci fido m al rus ednof tse ecnassiannocer etteC .tejbo eludom ertua nu snad tnarugi f noitcno f ennob al te ruetalipmoc el rap rpo xiohc el ertne neil el reutce ffed erusem ne ert tiod sneil ed ruetidl ,elbissop tios alec euq ruop ,rO .sep ytotorp sel rinruo f n e d t n at n e t n o c s u o n n e e cr u os r e i h c i f ert u a n u s n a d s n oi t c n o f s e c t n e m er u e ir tl u r es il it u d ; s e cr u os sr ei h ci f sr u ei s u l p s n a d s n oi t i n i f dr us s e c r e t -alc e m m tuep no ; )selpmexe stnedcrp son snad esohc uo eisos euq ellet( noitcno f enud snoitini fd setner f fid sel tnanetnoc ecruos reihci f nu sp met reimerp nu snad relip moc ed : e l b a e g as i v n e ti a f t u o t ts e l i u q t n a n e t ni a m t i o v n o s i a M .s i o f a l e cr u os r ei h c i f l u es n u r us t n a n n os i ar n e , n o it c n o f e n n o b a l e d x i o h c e l ti asi a f r u e t a li p m o c e l t n o d er i n a m al ni maxe snoiva suon ,01 ehpargarap ud snoitcno f sed noitini fdrus al ed edut erton snaD
double fct (int n, char c) ;

.noitaralcd al zeissinruof ne suov euq uep ruop ,htamc reroprocni snas ,trqs resilitu elpmexe rap zeirruop suoV .ett-ne sreihci f ed noisulcni elleutnevl ceva troppar n uc u a an te no i ta lip m o c al ed tn a d nep d n i t ne m e la to t ts e s ne il e d r ue ti d l e d e hcr e hcer ed liavart el ,tia f nE .resopsid ne ruop noitaralcd ruel tnanetnoc sett-ne sreihcif sel retic ed ti ffus liuq noisserpmil a no tnod dradnats euqhtoilbib al ed snoitcno f sel rap eun -etertne ert tuep noisu fnoc al ,setreC .ertual sap ecalpmer en nuL .noitini fd ruel tnad -nopserroc elbatucxe edoc el neib tnenneitnoc ,xue tnauq ,iuq stejbo seludo m sel ceva snoitcno f ed snoitaralcd sel euq tnenneitnoc en iuq ett-ne sreihci f sel sap zedno fnoc eN

12.3 Le mcanisme de la surdfinition de fonctions

extern "C" double fct (int, char) ;

e uqrameR

12 - La consquence de la compilation spare

129

: ecruos sreihcif xued sec tnemraps elip moc nol euq zesoppus ,isniA .einifd t a elle leuqel snad ecruos reihci f ua etimil elb mes elabolg elbairav enud etrop al ,iroirp A .) s n e il e d n o it i d ( n ei l e d el l e c e d ) n o i t a li p m o c( e t -rop ed noiton al reugnitsid rivres tnemelag tuep lI .selabolg selbairav ed elliesnocd euq -inhcet ettec tnasilitu edoc ud retiolpxe zeved suov is trtni nu tuotrus a ehpargarap eC .B.N
12.4.1 La porte dune variable globale la dclaration extern

. tcf m o n e d C s n o i t c n o f sr u e i s u l p r e n n o i t n e m e d e l b i ss o p s a p ts e n l i u q z e t o N . t c f s n o i t c n o f s i or t s e d e n u l e d l e p p a n e i b ar u a y l i , t c f e d l e p p a d t n e m u gr a l e d e r u t a n a l t n a v i u S
extern "C" void fct (int) ; void fct (double) ; void fct (float) ;

: e t t- n e d + + C s n o i t c n o f x u e d t e e t n e d c r p t c f n o i t c n o f a l + + C e m m ar g or p n u s n a d r es i l i t u s n o v u o p s u o n , e l p m e x e r a P .) s t n er f f i d s t n e m - u gr a d s i a m ( m o n e m m e d + + C s n o i t c n o f s er t u a sr u e is u l p u o e n u t e ) n ar t r o F u o r u e l b -messa( C noitcno f enu ,++C e m margorp e m m nu d nies ua ,re yolp med elbissop tse l I 3 .)s e l l e n n o i t i d n o c nr e t x e s n o i t ar a l c d s e d t n e n n e i t n o c s l i ( s t n a d n o p s er r o c e t t- n e sr e i h c i f s e d u a e v i n u a e grahc ne sirp tne meuqita mot ua tse tcepsa tec ,stne mennorivne sed trapulp al snad ,tia f n E . + + C n e es i l i t u r n o l e u q C d r a d n a t s e u q h t o i l b i b a l e d s n o i t c n o f s e l s e t u o t r u o p , ir o ir p a , e s o p e s ) n ar tr o F u o r u e l b m e ss a ( C s n o i t c n o f s e l r u o p u q o v e m l b or p e L 2
extern "C" { void exple (int) ; double chose (int, char, float) ; ..... } ;

: isnia etnesrp es iuq ,nretxe noitaralcd al ed evitcelloc emro f enu etsixe lI 1

130

12.4 Compilation spare et variables globales


: i s n i a t n a d c or p n e
void fct (double x) void fct (float y)

se uqrameR

Les fonctions CHAPITRE 7

.evitce ffe esserdal rinruo f ne ardua f liuq te rueir -txel ed tneivorp mon ed elbairav eniatrec enuuq tnannoitne m noitacidni enu ,tnadnopser -roc tejbo eludom el snad ,evuort no ,ecruos reihci f dnoces ud noitalipmoc srpa ,trap ertuaD . st n a d n o ps err o c s t e j b o s el u d o m s e l r e v u ort er e d er us e m n e ti os sneil ed ruetidl euq ruop retsisbus neib tneviod sleuqsel ,snoitcno f ed smon sel ruop essap es i u q e c e u g ol a na e msi n ac m n u l e v u or ter n O .s te j b o s el u d o m s e d u ae v i n u a r et si xe eunitnoc selabolg selbairav sed mon el ,noitalip moc srpa mon ud ecart enucua etsisbus en selleuqsel ruop ,selacol selbairav sel ruop tiudorp es iuq ec tnemeriartnoc ,tid tnem -ertuA .tejbo eludo m el snad esserda nos te elobm ys el tnaicossa noitacidni enu ,tnadnopser -roc tejbo eludo m el snad ,evuort no ,ecruos reihci f rei merp ud noitalip moc srpa ,trap enuD .reim - er p e l s n a d e i ni f d e l b a ir a v a l e d e v it c e f f e ess er d al e cr u os r e i h ci f d n o c es u d e l o b m y s u a erdnopserroc eria f tuep li tnemmoc snonimaxe ,reilucitrap nE .sunetbo isnia stejbo seludom xued sel tnemetcerroc relb messar ed erusem ne tse sneil ed ruetidl tnem moc srp sulp uep nud sno yov te stnedcrp ecruos sreihci f xued sel lipmoc sno ya suon euq snosoppuS
x x

.ep yt el euqidni ne elle te sruellia rap eini fd tse elabolg elbairav al euq resicrp euq tiaf en ellE .elbairav ed tnemecalpmed noitavresr ed sap eutce ffen nretxe noitaralcd etteC
x

reihci f reimerp el snad eralcd(


n ret xe

: no i tara lc d al e d ecr u os r ei h ci f d n o ces er to n r e d crp t nas i a f ne , is n i A . lc-tom ud edial tia f es ic-elleC .ecruos reihci f ertua nu snad eini fd t jd a elabolg elbairav enuuq rei ficps ed tnatte mrep noitaralcd enu tiovrp ++C ,tia f nE .)rei merp ud sellec ed etius al reihci f dnoces ud snoitcurtsni s e l r e c a l p e d n i o s t i a n e r p n o l i s s n i o m u d , l u e s n u n e e cr u o s s r e i h c i f x u e d s e c t i a s s i n -u r nol is tiaresop es en emlborp nucuauq srola( ecruos reihci f reimerp el snad eralcd elabolg elbairav al ecner fr eria f ed te snoitcno f sel snad ,elbissop sap elbmes en lI
x 3tcf 2tcf

12.4.2 Les variables globales et ldition de liens

e uqrameR

. te s n oi t c n o f s e l s n a d ) e cr u os elabolg elbairav al rennoitne m ed elbissop tneived li


3tcf 2t cf

extern int x ; source 1 int x ; main() { ..... } fct1() { ..... }

source 2 fct2() { ..... } fct3() { ..... }

12 - La consquence de la compilation spare

131

.sr u et ar p o s e d noitini fdrus al rus ertipahc ud ellec uqsuj erffid ert tuep ehpargarap ec ed edutL
.B .N

.spmet rei merp nu snad si mo ert neib srt tnevuep iuq stisu uep stnemld tigas li ; ruoter ed ruelav ed uo tne mugrad ellec essapd iuq ,ecner fr ed noiton al ed larng tcepsal ; sruetarpo sed noitini fdrus al rcasnoc ertipahc ud ritrap uq ardneivretnin tniop ec ; ruoter ed ruelav enud ecnerfr rap noissimsnart al : s e vi ta ler ser ia t ne m l p m oc s n o it a mr o f ni se d s n o ssi nr u o f suov suon ,icI .5 ehpargarap ua idut t a ecner fr ed noiton al tnanrecnoc leitnesseL

.ecruos reimerp ud ellec ceva rer fretni sap arruop en elleuqsiup sneil ed noit -idl etpecca ares elle ,ecruos reihci f ertua nu snad tarappa elabolg elbairav ertua enu is ,xuei M .nretxe rap ecruos ertua enu siuped ecner fr eria f yd elbissopmi cnod ares lI .ecruos r ei h ci f e c e d t n at l us r t ej b o el u d o m e l s n a d ets is b us e n a e d ec art e n uc u au q e d na me d n o it ar -alcd et tec , er tn oc raP .eri an idr o elab ol g elbaira v e nu t iares a ,citats n oi taral c d al sn aS
static int a ; main() { ..... } fct() { ..... }

: elp mexe tec snad e mmoc citats noitaralcd al resilitud alec ruop tiffus lI .) selleitnedifnoc selabolg selbairav ed srola elrap no ; rehcac ed ueil ua elleitnedi fnoc erdner issua tid no( eini fd t a elle o ecruos reihci f ud rueirtxel elbisseccani erdner al ed erid--tsec ,elabolg elbairav enu rehcac ed elbissop tse lI
12.4.3 Les variables globales caches la dclaration static

.euqigolli tse iuq ec ,ruetaci fitnedi e m m nu ruop setner ffid sesserda xued ed ecnesrp ne arevuort es sneil e d r ue ti d l ,s ac l et n u s na d ,t e f fe n E .)e il a m o na e tt ec re tc et d s a p e n t n e v u e p s ne i l e d sr ue t -id sniatrec( stnadnopserroc stejbo seludom sed sneil ed noitidl tnemetcerroc reutce ffed elbissopmi ,larng ne ,ertnoc rap ,ares li ,stner ffid ecruos sreihci f xued snad mon e m m ed s e l a b ol g s e l b a ir a v s e d r e vr e s r e d , e dr a g m r a p , el b iss o p ts e lis e u q er t n o m e ms i n a c m e C .tejbo eludom dnoces el snad retroper al ed te elbairav al ed evitce ffe esserdal tejbo eludom reimerp el snad revuorter ed euq sneil ed ruetidl ed elr el tne mevitce ffe ares eC
x

132

13.1 Transmission par rfrence dune valeur de retour

13 Complments sur les rfrences


Les fonctions CHAPITRE 7

.seuqihportsatac tnenneived sesohc sel euq tnerffid tnemetropmoc nu tnaya tnemennorivne nu snad egatrop ud srol euq tsen ec ; etsefinam es en ruerre enucua , noitcurtsed as ed srol elbairav enud ruelav al sap tnaifidom en tnemennorivne nu snad ; )...tnolov silitu ert tuep ruetniop nuuq srola( emm-iul leppal tse enrecnoc ecnerfr al resilitu tuep nol o tnemom lues el o erusem al snad retcetd eliciffid sulp erocne tse ellE .)drat sulp snorertnocner suon euq noitautis( elacol elbairav enu rus ruetniop nud ruoter ed ruelav ne noissimsnart al eud ellec etnerappas ruerre etteC .1

.][ r u et ar p ol e d s a c e l t n e m s i c -rp ares eC .tatlusr ne eulavl enu essinruof )noitcno f enu ,tia f ne( ruetarpo nuuq elbasnep -sidni ares li ,sac sniatrec snad ,te ffe nE .sruetarpod noitini fdrus al snoreidut suon euqsrol euq artarappan ruoter ed ruelav enud ecner fr rap noissimsnart al ed trtni lapicnirp e L
f() = x ; // // // // la rfrence fournie de lexpression 2*n+5, la rfrence fournie de x, aprs conversion par f, on range la valeur de type int par f, on range la valeur en int
1

: elp mexe tec ze yoV .eulavl enu e mmoc leppa nos resilitud elbissop tneived li ,ecner fr enu eiovner noitcno f enuuq srol sD .rinruo f ne iul ed euq noitcnof enud ecner fr enu riovecer ed nioseb tne merar sulp a nouq tionoc no ,tne mevitce ffE . sulp etsixen iuq esohc euqleuq )esserda( ecner fr enu rerpucr ed eniep suos ,f noitcno f al elacol sap tios en n euq eriassecn tse li ,tse sulp iuQ .ruelav rap noissimsnart enu troppar rap trtnid retnesrp erug elbmes en noissimsnart ellet enu : elleusu noaf enud f esilitu nol is ,tnadnepeC .n ed ecner - fr al ed siam ,ruelav enud sulp non ruoter ne noissimsnart al areuqovorp f ed leppa nU
int & f () { ..... return n ; } // on suppose ici n de type int int p ; ..... p = f() ; // affecte p la valeur situe la rfrence fournie par f

: elp me xe ti t e p e c s n or dis n o C . l er ut a n s n i o m t n a d n e p e c ts e l I . n oi t c n o f e n u d r u ot er e d r u el a v al euqilppas stnemugra sed noissimsnart al ruop resopxed snonev suon euq emsinac m e L
13.1.1 Introduction

13.1.2 On obtient une lvalue

f() = 2 * n + 5 ; int & f () ; int n ; float x ; .....

13 - Complments sur les rfrences

133

: eu lav l enu e mmoc esilitu ert sulp arruop en etnatsnoc enu ecner fr ellet enuuq areton no siaM
} // obtenu par conversion de la valeur de x

: noisrevnoc elleutnev enud edcrp ,etnatsnoc ettec ed eipoc enud ecner fr al arrevner no ,etnatsnoc enu ennoitnem nruter is ,sac ec snaD .etnatsnoc enu ecner fr enu ennoitne m etet-nel euqsrol ueil a noitpecxe enU
} return x ; // interdit

: n o it s e u q n e r u e l a v al e i fi d o m e t n a l e p p a n o i t c n o f al e u q euqsir el tiardnerp no ,sac el tiat let is ,te ffe nE .nruter noitcurtsnil snad etnatsnoc ed ren - n oi t n e m s a p arr u o p e n e ll e , e c n er f r r a p r u ot er n u e t t- n e n os s n a d ti o v r p n o i t c n o f e n u i S .etnatsnoc enu ecner fr enu tse ruoter ed ruelav al euqsrol e m m ed sulp av nen liuq 4.1.31 ehpargarap ua snorrev suoN
inf & f () ; float x ; ..... x = f() ; // OK : on convertira en int la valeur situe la rfrence // reue en retour de f

: r esi li t ul e d t n a v a n oisr e v -noc enu ertte muos al ed elbissop sruojuot etser li rac ,ruoter ed ruelav enu rus esp en ep yt ed edutitcaxed etniartnoc enucua ,stne mugra sel ruop tiasiudorp es iuq ec tnemeriartnoC
13.1.3 Conversion

134

13.1.4 Valeur de retour et constance

Les fonctions CHAPITRE 7

f() = x ; int n ; float x ; const int & f () ; { ..... return 5 ; int & f1 (.....) int n=3 ; float x=3.5 ; return n ; return x ; return 5 ; return n ; .....

f() = 2 * n + 5 ; // erreur : f() nest pas une lvalue const int & f2 (.....) { ..... // OK // OK : on renvoie la rfrence un int temporaire // OK : on renvoie la rfrence une copie temporaire // OK // interdit // variable globale // idem

// idem

: 3 et n ats n o c a l e d r u e l a v a l r e i fi d o m tiariudnoc etnavius noitcurtsnil ,snoitidnoc sec snaD .3 )etnatsnoc( ruelav al ecner fr enu ceva n resilaitini tiardneiver elle ,etpecca tiat noitcurtsni ettec is ,euqsiup euqigol tse aleC : e tc err oc ni tse etnavius noitaralcd a L .etnatsnoc enu ceva ecner fr enu resilaitini sap tuep en nO .q ecner fr al ed noitaci fido m al ed non te ,p ecner - f r e d t n e m e c a l p m e l q e d r u e l a v a l e d n o i t a t c e f f a l e d t n e m e r i ot a gi l b o t i g a s l i , q = p z e v -irc suov ; n=p & tni ralcd tna ya ,is : te ffe tec uvrp tsen emsinac m nucua ,sruelliaD .ei fido m ert sulp tuep en ecner fr enu ,)esilaitini te( eralcd siof enuuq neib zetoN : snad e mmoc ,resil -aitinil snas ecnerfr enu reralcd ed elbissop sap tsen li ,elarng noa f enuD .)n ed ecner - fr al ( noitasilaitini enud engapmocca )p ici( ecner fr ed noitaralcd enu tiaf ne tse
int & p = n ; int & p ; // incorrect, car pas dinitialisation int & n = 3 ; // incorrecte

: n oi tar al c d a L

.s ec ner - f r e d x u a el b at s e d i n ,s e c n er f r s e d r us sr u et n i o p s e d ri n i f d e d el b iss o p s a p ar e s e n l I

: ceva ,elpmexe raP .erio m m tnemecalp me e mm el tnor - e n g i s d p t e n , et i us al s n a d ,i s n i A . n el b air a v a l e c n er f r e n u ts e p e u q e i f i n gis e d n o c es a L : snoitcurtsni sec ,elpmexe rap ,zerdisnoC .elbairav ertua enud ecner fr em moc ruetaci fitnedi nu reralcd ed elbissop tse li ,elarng erinam enuD
13.2.1 La notion de rfrence est plus gnrale que celle dargument
int n ; int & p = n ;

.ici reni maxe snolla suon euq ec tseC .ruoter ed ruelav ed uo tnemugrad noiton al ed srohed ne rinevretni tuep ecner fr ed noiton al ,rueugir etuot ne ,tnadnepeC .ruoter ed ruelav ed uo stne mugrad noissi msnart al snad edisr ecner fr ed noiton al tnanrecnoc leitnesseL .s p m e t r ei m er p n u s n a d r o n gi er t t u e p e h p ar g ar a p e C
.B.N

13.2 La rfrence dune manire gnrale

13.2.2 Initialisation de rfrence

.3 ruelav al snordneitbo suon


n = 3 ; cout << p ;

n = 5 ;

e uqrameR

13 - Complments sur les rfrences

135

. t n a l e p p a e m m ar g or p el s n a d r u ot er t e t n ar u o c t a t l e d n o it ar u a ts er ; r u ot er e d r u e l a v a l e d e i p o c er ; )s ne il ed ruetidl rap einruo f tia f ne ares evitini fd esserdal tnod( noitcno f al tnemehcnarb ; st n e m u gra se d sr u el a v s e d ei p oc t e el i p al r us e ca ps e d n oi ta c ol la ; )elp mexe rap enihca m al ed sertsiger sniatrec ed sruelav( tnaruoc tatl ed edragevuas : t n e m m at o n , n oi tc n o f al te tnaleppa emmargorp el ertne noitacinum moc al rilbat ruop selitu snoitcurtsni sed tne m -elag sia m ,tnadnopserroc elbatucxe edoc ua tne mehcnarb el tne melues non ,riovrp tiod ruetalipmoc el ,noitcno f ettec ed leppa euqahc ruop ,sniomnaN .ruetalip moc el rap sio f elues e n u r n g t s e n o it c n o f e n u t n a d n o ps err o c e l b a t u c x e e d o c e l , er d n e tt a ys t u e p n o e m m o C

.1.31 te 2 .5 s ehp arg arap x u a tir c d t ne m -etropmoc el isnia evuorter nO .ruoter ed ruelav enu ruop emm ed av ne lI .sesilitu tnos iuq erircd ed snonev suon euq selgr sel cnod tnos ec ,ecnerfr enud sac el snaD .steu m stne mugra sed noitasilaitini enu tiudnoc noitcno f enud leppal ,rueugir etuot nE

: )pmet eriarop met elbairav al redcca riovuop sio fetuot snas( icec tirc zeiva suov is em moc essap es tuot ,erocne icI .n snad ecner fr as tnecalp te tni ne x ed noisrevnoc al ed tatlusr el tnanetnoc eriaropmet elbairav enud noitarc al tnesiudnoc sellE : s et c err o c er o c n e t n o s s et n a v i us s n o it ar a l c d s el , n i f n E .er iar op m et e lb -airav al scca tne meticilpxe sap zevan suov ,sac reimerp el snad ,euq ecner ffid ettec ceva : tir c ze i va s u ov i s e m m o c essap es tuot euq erid tuep nO .n snad ecner fr as ecalp te 3 ruelav al tnanetnoc )noitaralcd al ed tne mecalpmel rap esopmi eiv ed erud enu tna ya( eriarop met elbairav enu erng ellE : et c err o c e ll e-t s e e t n a vi us n o i t ar a l c d al is n i A .s e t n a ts n o c s e d r a p s e si l - ai ti n i er t sr o l a t n e v u e p i u q s et n ats n o c s e c n er f r s e d r i ni f d e d el b iss o p t s e li , e h c n a v er n E
136
Les fonctions CHAPITRE 7
const int & n = 3 ; int temp = 3 ; int & n = temp ; float x ; const int & n = x ;

14 La spcification inline
e uqrameR
float x ; int temp = x ; const int & n = temp ;

.ruessecorprp el rap utceffe tiat elbarapmoc liavart nu ,orcam enud sac el snad euq srola ,emm -iul ruetalipmoc el rap utcef fe liavart nud ici neib tigas liuq zetoN .1

.sleppad erb mon el ceva t nass i orc er i o m m e d t it n a u q e n u are m m os n oc i u q ec , le p p a e u q a hc se r n g t n ores s et n a d -nopserroc snoitcurtsni sel ,ehcnaver nE .spmet ed eimonoc enu temrep iuq ec ,)...seipocer ,sedragevuas ed nioseb sulp a yn li( sulp aretsixen ruoter ud te leppal ed noitseg ed leut -ibah e msinacm e L .) enihca m egagnal ne( setnadnopserroc snoitcurtsni sel em margorp ud nies ua reroprocni arved ruetalipmoc el ,emron ed leppa euqahc .erianidro noitcnof enud tnem mer ffid emron noitcno f al retiart ed ruetalip moc ua ednamed enilni to m ud ecnesrp a L .tne mugra ne tinruof iul nouq setnasopmoc siort ruetcev nud emron al reluclac ed tub ruop a emron noitcno f a L
1

engil ne noitcnof enud noitasilitud te noitinifd ed elpmexE


norme de v1 : 2.23607 norme de v2 : 3.31662

: elpmexe tec ze yoV .enilni noitaci ficps al ecrg ,edoc ud elliat al ed tne mirtd ua ,snoitcnof sed leppal snad spmet ud rengag ed temrep suov ++C ,tnatropmi ertirc nu tneived edoc ud tic -acif fel euqsro L .noitcno f al ed latot noitucxed sp met ud tnatropmi egatnecruop nu retnes - r p er t n e v u e p e ci vr e s e d s n o it c urts n i s e t n er f f i d s e c , s n o i t c n o f s et it e p e d s a c el s n a D
137

/* exemple dutilisation */ main() { double v1[3], v2[3] ; int i ; for (i=0 ; i<3 ; i++) { v1[i] = i ; v2[i] = 2*i-1 ; } cout << "norme de v1 : " << norme(v1) << "\n" ; cout << "norme de v2 : " << norme(v2) << "\n" ; } } #include <cmath> // ancien <math.h> #include <iostream> using namespace std ; /* dfinition dune fonction en ligne */ inline double norme (double vec[3]) { int i ; double s = 0 ; for (i=0 ; i<3 ; i++) s+= vec[i] * vec[i] ; return sqrt(s) ; pour sqrt

14 - La spcification inline

.etropmoc alec euq sruerred seuqsir sed unet etpmoc , elbannosiar sap tiares en iuq ec ,noitini fd al siof srueisulp erirc ned sniom .1

. 1 3 er t i p a h c u d 2. 2 e h p ar g ar a p u a s or c a m s e l s n or e i d u t s u o N .) ! C n e s a p e ts i x e n e n i l n i ( + + C n e s e l l i e s - n o c d t n e i o s s or c a m s e l e u q e u q i l p x e i u q e c t s e C .) d r o b e d s t e f f e d t n e m m a t o n( s e u q -s i r s d n ar g s r t e d e t n e s r p s or c a m s e d i o l p m e l r a c , l e t r r a s e c n a l b m e s s e r a l s i a M . er - i o m m eca p se d e tre p e n u d ei tra per t n o c ne , n oi t u c x e d s p me t e d n ia g n u t ne it b o n o ; )r u e t a li p m o c u d u a e v i n u a s u l p n o n t e ,s i o f ettec ,ruessecorprp ud uaevin ua( leppa euqahc tiudortni tse tnadnopserroc edoc el : en iln i ed iolpmel ceva sedutili mis seuqleuq etnesrp elle te )sorcam sed tnos C ud dradnats euqhtoilbib al ed snoitcno f sed seniatrec ,sruelliad( noitcno f enu emmoc elleppas orcam a L .etxet ed sert marap snoitutitsbus sed srola eutce ffe iuq ruessecorprp ua s e i nr u o f s n o it c urts n i d ti g as l I . s or c a m s e d r i ni f d e d t il i bi ss o p al C e d t ir h a + + C
seriatnemlpmoc snoitamrofnI

.) esser d a ettec eutis noitcno f enud leppa leutnev nu ecalp ne erttem ed sniom erocne te esserda enu reubirtta iul ed elbapacni tiares li ,eriartnoc sac el snad( erianidro noitcno f enu are f ne ruetalipmoc el ,enilni eralcd noitcno f enud esserdal )nrecnoc ecruos reihci f ud nies ua( trap euqleuq zesilitu suov is ,e m m eD .erianidro noitcno f enu eria f ne te engil ne eriudortnil sap en )esueni mulov tse noitcno f al is ,elpmexe rap( tnemelleutnev tuep reinred eC .ruetalipmoc ud srpua eutce ffe edna med enu eutitsnoc enilni noitaralcd a L

e uqrameR
1

. et t- n e reihci f nu snad recalp al tne mulosba ardua f li ,sem margorp stner ffid rap egatrap ert essiup e n g i l n e n oi t c n o f e m m e n u u q r u o p ,t e f f e n E . e n g il n e n oi t c n o f al r a p s tr e f f o s e g a t n a v a xua elbaton eitrapertnoc enu eutitsnoc eraps noitalipmoc ed tilibissop ed ecnesba etteC : euq ellet noitaralcd ed elp mexe erton s n a d s a p e v u or t e n n o ,is n i A .) e i ni f d er t d t n a v a , e cr u os r e i h c i f n u d ni es u a , e s il it u t s e e ll e is fuas( noitcno f ellet enu reralcd ed eriassecn sap tsen liuq euqilpxe aleC ! tnemraps e l i p m o c e r t s u l p t u e p e n e ll E . es il it u l n o o i u l e c e u q e cr u os r e i h c i f e m m el s n a d eini fd ert tiod engil ne noitcnof enu ,emm erutan as rap ,euq reton ed tnatrop mi srt tse lI
138
Les fonctions CHAPITRE 7
double norme (double) ;

xuaelbat sel srg tnos tnod erinam al rus tniop el srola snore f suoN .sruetniop ed siaib el rap ,eteled te wen sruetarpo sel rap etre ffo erio m m al ed euqiman yd noitseg ed noiton etnatropmil srola snoriudortni suoN .sruetniop sed selbacilppa snoitarpo setner ffid sel reidutd tnava ,ruetniop te uaelbat ertne etsixe iuq tiort troppar el etiusne snoreni maxe suoN .ruetniop nud edial ecner fr rap noissimsnart enu relumis snordnerppa uson te euqitmhtira ruel euq isnia ,tnehcatta ys iuq & te * sruetarpo sel te ruetniop ed noiton al snoredroba suon siuP .noitaralcd ruel ed srol xuaelbat sed resilaitini tne mmoc snorert -nom suoN .secidni srueisulp xuaelbat sed re yolpmed te mrep ++C tnemmoc etiusne snor -rev suoN .uaelbat let nud noitasilitul tnanrecnoc selarng selgr seuqleuq snorennod suon te ecidni nu uaelbat nud trtnil tnartnom elp mis elpmexe nu rap snorecnem moc suoN . er ti p a h c l u es nu snad sepuorger tneios snoiton xued sec euq ei fitsuj iuq ec tseC .noitcno f enud leppal ed tnemugra ne simsnart tnos ic-xuec euqsrol tnem maton ,xuaelbat sed tnemetiart el snad retucrepr es tuep aleC . ruetniop etnatsnoc enu tse uaelbat ed ruetaci fitnedi nuuq riovas ,snoiton xued sec ertne etsixe tceridni neil nu ++C neuq evuort es li ,sio fetuoT .ertual ed enul sengiol tro f ertarap tnevuep sruetniop ed te xuaelbat ed snoiton xued sec ,iroirp A .)...snoitcno f ,selbairav( sesohc sertuad sesserda sed rinetnoc senitsed selbairav ed erid--tsec ,sruetniop ed esopsid ++C ,sruellia raP .elbmesnel ed nies ua noitisop as tnasicrp ecidni nu rap rper tse tne ml euqahc ; e u q i n u r u e t a c i f i t n e di n u r a p s n gis d ) ni mr e t d er b m o n n e( e p yt e m m e d st n e m l d e l b m e s n e n u i s n i a e m m o n n O . x u a e l b a t s e d r es il it u d t e mr e p + + C ,s e g a g n a l s e l s u ot e m m o C

Les tableaux et les pointeurs

: t na v i us e m m ar g -orp el ertnom el em moc ,e mlborp ec elbanevnoc noitulos enu rirf fo suon av eL .)s e t o n e d t n atr o p m i er b m o n n u e l b as o ps n ar t t n e m el i ci f f i d t i ar es , er i n a m e t u o t e d , i u q e d o h t m( setner ffid serialacs selbairav tgniv riovrp ed elbannosiar uep tarap li ,eria f ec ruoP .s et o n t g ni v se c re s - ir o m m ri o v u o p e d er i ass e c n c n o d ts e l I . e u n e t b o is n i a e n n e y o m a l s er u e ir p us t n os s e ll e ertned neibmoc renimretd ruop seton sel retlusnoc riovuop uaevuon tua f suon li ,ici ,siaM .erutcel ruel ed erusem te ru f ua ,elbairav enu snad tnalumuc sel ne ,em mos al reluclac n ed t iar i f f us su o n l i , se t on s ec e d e nn e y o m al t n e m elp m is re lu cl ac e d e uq ti ass i gas e n l iS . es s a l c a l e d e n n e y o m a l s er u e ir p us t n os s el l e er t n e d n ei b m o c ,) s e n n o d ne seinruo f( sevl d seto n tgniv ed ritrap ,reni mret d sn oitia huos s uon euq sn osoppuS
ua elbat

. n oi t uc xe l e d l i f ua re u l o v t ue p n o is ne m i d al t n o d x ua el b at se d ri ni f d ed tnattemrep rotcev m mon elbart marap essalc ep yt nu tinruo f dradnats euqhtoilbib al euq niol sulp snorrev suoN .xuarudcorp segagnal sed uaelbat ed noiton al tnednopserroc sli ; ++C ed s fitan xuaelbat sel releppa tiarruop nol ec ici snoidut suoN .B.N .s n oi t c n o f s e d rus sruetniop sed noitatnesrp al rap snorenimret suoN .noitcno f enud tnemugra ne si msnart
140
Les tableaux et les pointeurs CHAPITRE 8

1.1 Exemple dutilisation dun tableau en C++

1 Les tableaux un indice

} #include <iostream> using namespace std ; main() { int i, nbm ; float moy, som ; float t[10] ; for (i=0 ; i<10 ; i++) { cout << "donnez la note numero " << i+1 << " : " ; cin >> t[i] ; } for (i=0, som=0 ; i<10 ; i++) som += t[i] ; moy = som / 10 ; cout << "\Moyenne de la classe : " << moy << "\n" ; for (i=0, nbm=0 ; i<10 ; i++ ) if (t[i] > moy) nbm++ ; cout << nbm << " eleves ont plus de cette moyenne" ;

: s et c err o c t n os s n oi t a t o n s e c , e p y t e d tnos te , , is ,elp mexe raP .)sengis non setnairav sruel ceva gnol ,trohs ,tni( euqnocleuq r e i t n e e p y t n u d e u q it m ht ir a n o iss er p x e el l e u q etr o p m i n e d e mr o f a l er d n er p t u e p e ci d n i n U
tni j k p n

ne ;

2t = 1t

.xuaelbat ed selabolg snoitatce ffad tilibissop enucua er ffon ++C ,tiaf erircd ,sreitned xuaelbat sed tnos te is ,elbissop sap tsen li ,ehcnaver nE
2t 1t

: snad em moc ,noitatnemrcnid ruetarpo nud ednarpo em moc ertarappa issua tuep lI : s n a d e m m o c n o it at c e f f a d r ue tar p o n u d e hc u a g er t ara p pa c n o d t u e p l I . e u l a v l e n u t s e u a e l b a t e d t n e m l n U
1.2.1 Les lments de tableau
t[2] = 5

]i [t

]91 [t 9

]2[t

. ep yt ed erialacs elbairav enuuq elr emm el euoj ellE . ed ruelav al rap einruo f tse uaelbat e u q el l et n o it at o n e n u , t n e m el ar n g s ul P el s n a d n oi ti s o p a l t n o d t n e m l n u e n gis d . r a p r e i n r e d e l , r a p e m i s i ort e l , r a p n g i s d ares uaelbat ud tne ml rei merp e L . ed tnov secidni son ,cnod ,icI . or mun el etrop noitisop eri merp al ,++C ne ,tnemellennoitnevnoC .ecidni e mmon ,uaelbat el snad noit -isop as rap rper tse tne ml euqahC . ep yt ed stneml 01 ruop tnemecalpmel evresr
tni ]0[t 0 taolf

uaelbat nud noitasilitud elpmexE


Moyenne de la classe : 9.05 4 eleves ont plus de cette moyenne

1.2 Quelques rgles

1.2.2 Les indices

t[n-3] t[3*p-2*k+j%l] t[3]++ float t[10]

onnez la note numero 2 : 12.5 donnez la note numero 3 : 8 donnez la note numero 4 : 2.5 donnez la note numero 5 : 7 donnez la note numero 6 : 5 donnez la note numero 7 : 14 donnez la note numero 8 : 8.5 donnez la note numero 9 : 15 donnez la note numero 10 : 7

--t[i]

: n oi tar al c d a L

1 - Les tableaux un indice

141

. e c i d n i d e l r t n o c e d s t i l i b -issop sed arir f fo , dradnats euq htoilbib al rap sop orp ,rotcev ep yt el euq snorrev suoN 2 .)uaelbat ud tneml euqahc ed elliat al lennoitroporp issua te( ed ruelav al lennoitroporp egalacd nu , uaelbat ud tubd ed esserdal tnatuoja n e e s s e r d a l e n i m r e t d n e l i , e u q el l e t e u l a v l e n u er t n o c n er r u e t a l i p m o c e l e u q sr o l ,euq rio vas tua f li ,secneuqsn oc sel erd nerp moc ne ruoP .ruetniop nud siaib el rap eri a f e s , + + C n e , t ne me la g t u e p ua el b at n u d t n e m l n u s cc al e u q ec e d u ne t e t p m o c ,udra sulp erocne udner tse emlborp el euq snorrev suon ,sruellia raP .sp met ed etrep enu t i ar i u d n o c i u q e c , n o i t u c x el e d sr o l n o it a c i fir v et t e c t n ar u ss a s eri at n e m l p p us s n o i t -curtsnid ,tejbo e mmargorp el snad ,noitaroprocnil tiaretissecn aleC .euqnocleuq nois -serpxe enud tigas li o sac sel suot snad tne melag siam ,etnatsnoc enu tse ecidnil o sac el snad tnemelues non ,eria f es riovuop tiarved ecidnid elrtnoc el ,ecaci ffe ert ruoP 1
]i[t

se uqrameR

.uaelbat el srpa uo tnava utis tne mec -alp me nu ,rei fido m ed ,cnod ,te rengisd ed )! erid tuep nol is( elicaf srt tse liuq etros eD .sruetalip moc sed trapulp al rap ecalp ne sim tsen ecidnid tne medrobd ed elrtnoc nucuA
1.2.4 Dbordement dindice

e nu u o

etnatsn oc

: etcerroc tse noitcurtsnoc ettec ,isniA . enuuq ert tuep en )stnemld erb mon nos( uaelbat nud noisne mid a L
etnatsn o c n o isserp x e

. no i ta l -ipmoc ed ruerre enu ariudnoc tnattolf ep yt ed secidnid noitasilitud evitatnet al ,ehcnaver nE .)! engis ed tubirttal noitnetta( selleutibah selgr sel tnavius tni ne eitrevnoc tne melp - mis ares ruelav as ,sac ec snad ; ertcarac ep yt ed ert tnemelag tuep ecidni nu ,eiroht nE . t n i e p y t e d t n os s e t n a d n o ps err o c s n ois s er p x e s e l e u qs i u p : ed ,
rahc

e p yt e d t n os

142

1.2.3 La dimension dun tableau

Les tableaux et les pointeurs CHAPITRE 8

int nel ; ..... cout << "Combien delements ? " ; cin >> nel ; int t[nel] ; // erreur : nel nest pas une expression contante
2c

: s a p t i ar e s el e n i c- el l e c , e h c n a v er n E
cont int N = 50 ; ..... int t[N] ; float h[2*N-1] ; t[c1+3] t[c2-c1]

te

1c

is ,e m m ed a v n e l I

]0[]5[t

]2[]1[t

. ua elb -a t u d l ed- u a e ts uj u tis t ne me ca lp m e nu e n gis d n oi t a t o n a l , ert n o c r a P . t n e m l l t i a f n e e n g is d n o it at o n a l e u q z e y o v s u o v ,st n e m l e d u a el b a t erton ceva sruojuot ,elpmexe raP .uaelbat ud eitros snas ecidnid tnemedrobd riova y tuep li ,dnerp liuq sruelav sel te nrecnoc ecidnil tnaviuS . edrobd secidni sed nul euqsrol ; uaelbat nud stneml stner f fid xua ruetniop nud edial redcca etiahuos nol euqsrol ; uaelbat nud snoisnemid seniatrec resicrp ed te mo nol euqsrol : secnatsnocric siort sniom ua snad ecnedicni enu a erdro tec euq snorrev suoN
]5[]0[t 3 x 5 t

: tius em moc snnodro stneml ses tiarrev tne mmedcrp ralcd uaelbat el ,isniA .)soppo erdrol esilitu nartroF ,erdro emm el esilitu lacsaP( reimerp ne ecidni reinred el reirav tnasiaf ne unetbo erdrol tnavius sgnar tnos uaelbat nud stne ml se L
t

.ritnes eria f es ed tneuqsir nnod tne mennorivne nu seil eriomm elliat ed snoitatimil sel selueS .uaelbat nu retrop moc tuep euq secidnid erbmon el rus esp en noitatimil enucuA . + + C n e s n es n u t n ei a s n o it at o n s e ll et e d , dr a t s u l p u e p n u s n orr e v el suon em moc ,euq neib uo euq sellet snoitaton ed emm ed sap sio fetuot ari nen lI .eulavl enu tse uaelbat let nud tneml nu tnangisd noitaton al ,erocne l ,euq neib zetoN
] j[t ]3[t

: snoitaton sec snad e mmoc secidni xued rap rper srola ev u or t es u ae lba t ec ed e uq n oc le uq t ne m l nU .s t ne m l ed uaelbat nu evresr
)3 x 5( 51

: n oi t ar al c d a l , el p m e x e r a P .)snoisnemid srueisulp iss u a ti d n o( s e ci d n i sr u eis u l p x u a el b at s el es ir ot u a + + C ,s e g a g n a l s e d tr a p ul p a l e m m o C

2.2 Arrangement en mmoire des tableaux plusieurs indices

2.1 Leur dclaration

2 Les tableaux plusieurs indices

t[3][2]

int t[5][3]

t[0][0] t[0][1] t[0][2] t[1][0] t[1][1] t[1][2] .... t[4][0] t[4][1] t[4][2]

t[i][j]

t[i-3][i+j]

2 - Les tableaux plusieurs indices

143

: )snoitalumro f xued sel rerapmoc ed elica f sulp tios liuq ruop sev -itucsnoc sruelav sed isiohc tnemeriatnolov snova suon( stnelaviuq selpmexe xued sec ze yoV

: e t e j e r a r e s u a e l b a t u d n o i t a c i f i d o m e d er u e i r t l u e v i t a t n e t e t u o t , u d n e t n e n e i B : s n a d e m m o c r es il ai ti n il t e t n a ts n o c u a e l b a t n u r er al c d t u e p n O
const char voyelles [] = {a, e, i, o, u, y} ;

: et n e l a v i u q ts e e h p ar g ar a p e c e d n o it ar a l c d erimerp al ,isniA .noitasilaitinil snad ser mun sruelav ed erb mon el rap ruetalipmoc el rap enimretd srola tnat ic-ellec ,uaelbat ud noisne mid al erttemod elbissop tse li ,sulp eD .)euqitamotua( seriotala uo )euqitats( orz sesilaitini ,uaelbat ud noitacollad essalc al tnavius ,tnores setnauqna m sruelav se L
int tab[5] = { 10, 20 } ; int tab[5] = { 10, 20, 5 } ;

: se l p m e xe se c snad e mmoc ,sruelav seri merp sel euq sedalocca sel snad rennoitnem en ed elbissop tse lI . uaelbat ud stneml qnic sed nucahc snad te , , , sruelav sel ecalp
bat 3 0 5 02 01

.selp mexe seuqleuq drobad iciov nE .noitaralcd as ed srol uaelbat nu )tnemelatot uo tnemelleitrap( resilaitinid ,erialacs elbairav enu ruop tia f el no em moc ,elbissop tse lI .t n e m e t i c il p m i s s il a it i ni s a p t n os e n e u q it a m o t u a ess al c e d x u a el b a t s e l ; orz ssilaitini ,tua fd rap ,tnos euqitats essalc ed xuaelbat se L .euqitamotua uo euqitats essalc ed ,noitaralcd ruel tnavius ,ert tnevuep xuaelbat sel ,serialacs selbairav sel e mmoC

.s n ois n e m i d sr u e is ul p x u a e l b a t s e d s a c e l s n a d s el b a l a v t n ets er , n o is n e mi d e n u xuaelbat sed soporp ,2.1 ehpargarap el snad ,suqov stniop stner ffid sel ,udnetne neiB

144

3.2 Initialisation de tableaux plusieurs indices 3.1 Initialisation de tableaux un indice

3 Initialisation des tableaux

Les tableaux et les pointeurs CHAPITRE 8

int tab[] = { 10, 20, 5, 0, 3 } ;

int tab[5] = { 10, 20, 5, 0, 3 } ;

voyelles [2] = i ;

// interdit

e uqrameR

: noitaralcd a L

e uqrameR

: el oc d elp m e xe n u i ci o v n E . u ae lba t u d s t ne m l se d ep yt e l ce va no i ta tc e f f a r ap e lbi t -ap moc ep yt nud noisserpxe elleuq etropmin resilitu tuep no ,euqitamotua uaelbat nu ruoP
void f() { const int N = 10 ; static int delta = 3 ; ..... int tab[5] = { 2*N-1, N-1, N, N+1, 2*N+1} ; int t[3] = { 0, delta, 2*delta } ; }

: elpmexe nu iciov ne ; tsnoc tubirttal ceva seralcd seuqita motua selbairav sed uo seuqitats selbairav sed ertarappa eriaf y tuep no ; uaelbat ud stneml sed ep yt el ceva noitatcef fa rap elbitapmoc ep yt nud setnatsnoc snoisserpxe sed ert tneviod noitasilaitinid sruelav sel ,euqitats uaelbat nu ruoP : riovas ,serialacs selbairav sed sruesilaitini sel euq selgr semm sel tnevius uaelbat nud stneml sel ruop selbasilitu sruesilaitini se L

: )setnelaviuq non siam( setcerroc tnos setnavius snoit -ar al c d se L .se si m o er t t n e v u e p sr u el a v s er i nr e d s el , x ua e vi n x u e d s e d n uc a hc ,er o c n e L .er dro tec tnavius uaelbat ud sruelav sel rermund etnetnoc es elle te ,eriom m ne sgnar tnemev -itce ffe tnos stneml sel tnod erinam al etiolpxe ,elle ,ednoces a L .nucahc stneml ertauq ed xuaelbat siort ed sopmoc em moc uaelbat erton rerdisnoc tneiver e mro f eri merp a L
int tab [3] [4] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 } ; int tab [3] [4] = { { 1, 2, 3, 4 } , { 5, 6, 7, 8 }, { 9,10,11,12 } }

3.3 Initialiseurs et classe dallocation

const int NEL = 10 ; void fct (int p) { int n ; ..... int tab[] = {NEL, p, 2*p, n+1, n+p} ; ..... }

int tab [3] [4] = { { 1, 2 } , { 3, 4, 5 } } ; int tab [3] [4] = { 1, 2 , 3, 4, 5 } ;

3 - Initialisation des tableaux

145

: c e v a t a t l u s r e m m e l u n e t b o s n oir u a s u o n , i c i , u d n et n e n e i B n 03 da

da

da

: etnavius al tse noitautis al ,noitcurtsni ettec ed noitucxe srpA .)sreitne sed rus ruetniop nu tse ,sap zeilbuol en ,rac ruelav al tnemelpmis sap te reitnel snosid suon euq neib zeton( esserda ruop tna ya reitnel etnesrper r O . r ue la v a l eulavl al retce ffa : ei fingis
da* 03 da*

: etnavius noitcurtsniL n 02 da

: n oi t a u ti s al isnia resitamhcs tuep no ,noitucxe nos srpA . elbairav al ed esserdal elbairav al snad ecalp noitcurtsni ettec ,isniA .ednarpo nos ed esserdal tatlusr e mmoc tinruo f iuq erianu ruetarpo nu tse ruetarpoL . noisserpxel ed ruelav al elbairav al etce ffa
da & n& da

da

tni

da

da*

: noitcurtsniL .reitne nud esserdal tse euq neib eifingis iuq ec ; ep yt ed tse , esserdad tejbol erid--tsec , euq ei fingis noitaralcd ettec euq erid tuep no ,euqinomn m ertit ,isniA .tius el iuq esserdal utis unetnoc el engisd iuq ruetarpo nu tse euq snorrev suoN .sreitne sed rus ruetniop nu tnat em moc e mmon elbairav enu evresr erimerp a L
da

: s n oi t c urt s ni s e l s n or d is n o c , n oi t o n e ll e v u o n e tt e c n o it c u d or t ni d es i u g n E .sr u e t - n i o p s e m m o n s e l b a ir a v e d e r i a i d m r e t n i l r a p s e s s er d a s e d r e l u p i n a m e d t e mr e p + + C

146

4.1 Introduction

4 Notion de pointeur Les oprateurs * et &

Les tableaux et les pointeurs CHAPITRE 8

n = 30 ;

*ad = 30 ; ad = &n ;

int * ad ; int n ; n = 20 ; ad = &n ; *ad = 30 ;

// on peut cire aussi : * ad = 30 ; // on peut aussi crire : int *ad ;

.)etner ffid noitacifingis enu tiarua nois -serpxe ettec ,seshtnerap sel snas ,euq niol sulp snorrev suon( euq elr emm el tiareuoj
+ +n

: n o isserp xe l te : e uq elr e m m e l ti are u oj : n oi s s e r p x e l , e l b a r a p m o c e r i n a m e D


2

2da

: e u q el r e m m e l i c i c n o d e u oj n o i t c urt s n i et t e C . e d e t n e m g u a ess er d a d )er i t ne( r u el a v al rap engisd esserdal ecalp elle ,tid tne mertuA
1da

1da*

et c e f f a e m i s i or t a L . t e e d s ess er d a s e l
p n

2da

te

1da

: n oi ss er p x e l e d r u e l a v al snad tnecalp seri merp xued se L


ad1 = &n ; ad2 = &p ; *ad1 = *ad2 + 2 ;

: s n o it c urts n i s e c t n a n et n i a m s n or d is n o C . es uep m or t s n io m tse )e lba ira v e d m o n e l te * er tn e ec apse s nas( er ia t ne m -moc ne einruo f noitaralcd ed emro f al euq zetoN .sreitne sed ,xue tnauq ,t tneiarua te siam )reitne tse e u qs i u p( r e i t n e n u r us r u e t n i o p n u t n ei b t i ar u a e l b a ir a v al
da 2da 1da* 1da

: tirc tiava nol is ,reilucitrap ne ,noitaralcd al ed e mr o f a l n ei b ze u qra m e R .sr ei t ne s e d r us sr u et n i o p s e d c n o d t n os t e , s elb air av s e L


da 2da 1da

: s no i tara lc d s ec ut -ceffe sno ya suon euq zesoppuS .sruetarpo xued sec ed noitasilitud selpmexe seuqleuq icioV

.n& uo da* euq ellet noisserpxe enu seshtnerap ertne recalp ed eriassecn sap tsen liuq tia f evel tiroirp ruel ,emm eD .)eria f el rs neib tuep no sia m( ednarpo euqinu ruel te xue ertne ecapsed recalp ed eriassecn sap tsen liuq etros ed ,sruetaraps ed tnevres & uo * ,ruetarpo tuot em moC

4.2 Quelques exemples

(*ad1) ++ n = n + 3 *ad1 += 3 *ad2 + 2

n = p + 2 ;

int * ad1, ad2, ad ;

int * ad1, * ad2, * ad ; int n = 10, p = 20 ;

// ou : // ou :

4 - Notion de pointeur Les oprateurs * et &

int *ad1, ad2, ad ;

int *ad1, *ad2, *ad ;

e uqrameR

147

++da

1 +da

tse li ,trap ertuaD .tnadnopserroc tne mecalp mel tne meller tnavuort es noitamro fnil tios e u q s el l e t s n o i s s e r p x e s e d e u q n e i b z e t o N euq elleuq ,sedilav ,larng ne ,tnos uo .tnavius tnemll engisd elleuq erinam ed snad eunetnoc esserdal cnod etnemrcni
da

.s te t co
da fo ezis )tni(foe zis da

: noisserpxel ,elbarap moc erina m eD ed tiares ecner ffid ettec


)elbuod(foezi s da 1 +da

: rap eralcd t tiava iS .)nnod ep yt nud ,stetco ne ,elliat al tinruo f ruetarpol euq sap zeilbuon( stetco e d i c i ts e t e ert n e e c n er f f i d al ,tne msicrp sulP .)tetco( 1 ed etne mgua ed esserdal sap etnesrper en sussed-ic nois -serpxel ,tef fe nE .reitne erb mon nu ceva ruetniop nu erdno fnoc sap tua f en liuq neib zetoN .senahc ed uo xuaelbat ed tnemetiart el snad elitu tro f arervas alec euq snorrev suon siaM .tiordne tec evuort es iuq ec edutitrec ceva sap snovas en suon rac ,trtnid erug an alec ,elpmexe erton snad ,setreC .tnavius reitnel ed esserdal etnesrper su sse d- ic no iss erpx el , ++ C r uop , te r ei t ne nu d es ser da l r i ne t n oc e s ne c ts e , t e f f e n E . + + C r u op s n es n u a
da

: euq ellet noisserpxe enu : isnia eralcd t a ruetniop elbairav enu is rO .setniop sruelav sel sia m ,se m m -selle sruetniop selbairav sel sap non ,relupinam ed stnetnoc sem mos suon suon ,iciuqsuJ
da

.xuaelbat sed uo se nahc sed tn ores stniop stejbo sel euqsrol tiucad sulp erocne ardnerp euqramer etteC .reitne let nu ruop tnemecalp me nu sulp ne sap evresr e n ellE .reit ne nu rus ruetniop n u ruop tne mecalp me nu e vresr : e u q e l l e t n o i t ar a l c d e n U 2 : n o it al i p m o c ne setejer tnores setnavius snoisserpxe sel ,elarng erina m enuD .)euqnocleuq erialacs elbairav enu tiares n o ,n& tiareuqilppas euqramer emm al( reifidom al ed noitseuq ert tiaruas en li te exif tnemeriassecn tse esserda etteC .ruetalipmoc el rap eini fd t a elleuq
(&ad)++ ou (&p)++ // erreur int * ad ;

ellet da elbairav al ed esserdal sia m ,da em moc ruetniop elbairav enu sulp non ,engisd n o i s s er p x e e t t e c ,t e f f e n E . d a & e d e m m e d s a p a v n e n l i , e h c n a v e r n E . s e l b a i f i d o m t n o s da* te da tid tnemertua ; eulavl sed tnos da* te da snoisserpxe sel ,ruetniop nu tse da iS 1 se uqrameR

148

4.3 Incrmentation de pointeurs

Les tableaux et les pointeurs CHAPITRE 8

ad++

double * ad ; ad + 1 int * ad ;

.ecnerfr ed noiton al sap tiadssop en egagnal ec rac ,C ne sruemmargorp sel redcorp tneiaved euq isnia tseC .1

noitcnof enud tnemugra ne sruetniop ed noitasilitU


avant appel : 10 20 apres appel : 20 10

: )s e l b a ir a v x u e d ed sruelav sed noitatu mrep al tiautce ffe iuq( 7 ertipahc ud 1.5 ehpargarap ud em margorp el snes ec snad erircr snoirruop suon tnem moc icioV . tpecnoc ec resilitu snas ,ecner fr rap noissi msnart enud tnelaviuql resilar ed elbissop tse liuq riov snolla suoN .)ett-nel snad & e d i o l p m el t n a n n e y o m( e c n er f r r a p u o ) t u a f d r a p n o i t a ut is( r u e l a v r a p s i ms n ar t er t tneiavuop stnemugra sel ,++C ne ,euq uv snova suon ,snoitcno f xua fitaler ertipahc el snaD
1

.) ! i o s n e s n es e d s a p a n n oi t c n o f e n u d e ll i a t al t n a d n o ps err o c t it n a u q e n u d ruetniop nu retnemrcniuq neib dnerpmoc no( 11 ehpargarap ua snorelrap suon tnod ,snoitcno f sed rus sruetniop sed sac el riovas ,stilibissop sec noitpecxe enu aretsixe lI

: s n oi tc ur ts ni se c erirc sn o irru op su o n , e d e tn e d crp n o it ara lc d a l ce v a , elp me xe raP .eritne titnauq elleuq etrop min ed ruetniop nu retne mrcd ed uo retne mrcnid elbissop
da

5 Comment simuler une transmission par adresse avec un pointeur

#include <iostream> using namespace std ; main() { void echange (int *ad1, int *ad2) ; int a=10, b=20 ; cout << "avant appel : " << a << " " << b << "\n" ; echange (&a, &b) ; cout << "apres appel : " << a << " " << b << "\n" ; } void echange (int *ad1, int *ad2) { int x ; x = *ad1 ; *ad1 = *ad2 ; *ad2 = x ; }

e uqrameR

ad += 10 ; ad -= 25 ;

5 - Comment simuler une transmission par adresse avec un pointeur

149

1d a*

1da

e 1d a

- mi ruetniop rap noissimsnart al ,ehcnaver nE .stnemugra sniatrec ed sruelav sel rei fid -om ed tiauqsir noitcno f al euq ,uaevin ec ,tiartnom en neir ; ruelav rap uo ecner fr rap ueil tia noissimsnart al euq erinam e m m al ed tiasia f es noitcno f al ed noitasilitul ; stnatropmi sulp tnos noit -am margorp ed sruerred seuqsir sel ,sruetniop sel ceva ; ruelav rap noissimsnart enu cevauq ecner fr rap noissi msnart enu ceva elpmis issua tiat noitcno f al ed erutircl : e u q e t a t s n o c n o ,s r u e t n i o p e d s i ai b e l r a p n o i t a l u m i s a s c e v a e c n er f r r a p n o i ss i m s n ar t a l er a p m o c n o l i S 2 . n o i t a l i p m o c e d r u err e e n u t i ar i u d n o c e m m a r g or p e r t o n t e , s a p t i ar e s e l en e d e l l e c , e h c n a v er n e ; e l b a i f i d o m t i ar es ed ruelav al ,sac reinred ec snaD . t n a ts n o c r ei t n e n u r us r u e t n i o p n u ts : c n o d e u q t e , e t n a ts n o c e n u t s e : e u q t i ar e i f i n g i s a l e c r a c
1da * t n i

tn i

a l , is n i A .

2da

te

1da

: er ir c u l l a f s a p t i ar u a n l I .r e i t n e n u r us t n a t ni o p e t n at s n o c e n u c n o d ts e , ep y t e d ts e : i c e c e m m o c e t r pr e t n i s er i m er p stne mu gra sed n oitaralc d al ed e xatn ys al ,erocne l ,neib zetoN


1d a 1da t sno c *

: is n i a t n a v ir c l n e ,s e t n a ts n o c s e d t i a f n e t n o s ec euq )ep ytotorp nos snad ,puoc emm ud ,te( ett-ne nos snad resicrp snoirruop suoN . te e d sr u e l a v s e l r e i fi d o m r i ol u o v e d ,i ci , n o si ar e n u c u a a n no i tc n o f a L 1
2da 1da egn ah c e

.sesserda sec seutis sruelav sel regnahc ulla f a liuq srola sesserda xued sec ed sruelav sel )tnemelacol( regnahc uq tiudnoc tiaruan aleC
int x = ad1 ad2 *x ; ad1 ; = ad2 ; = x ;

p te n selbairav sed sesserda sel ,sio f ettec ,tnos egnahce ed leppal ed s fitce ffe stnemugra se L

: )7 ertipahc ud 1.5 ehpargarap ud egnahce noitcno f al ceva eigolana rap( tnavirc ne stnemugra sec ed sruelav sel tnemelpmis regnahcd retnetnoc es ullaf sap tiaruan liuq neib zeuqra mer ,trap ertuaD .sesserda sec riovecer senitsed sruet -niop selbairav xued ,steum stne mugra ne ,uqidni snova suon ,egnahce snad ,emmoc ze yoV .p & te n & snoisserpxe sed sruelav sel egnahce noitcnof al te msnart nol euq riovas ,ruelav rap sruojuot tia f es noissimsnart al euq neib zetoN .)sruelav sruel sulp non te(

150

Les tableaux et les pointeurs CHAPITRE 8

void echange (int * const ad1, int * const ad2)

const int * ad1

se uqrameR

. e ul a v l e n u s a p t s e n e c ; t n a t s n o c r u e t n i o p nu tse uaelbat ed mon nU .++3 ,elp mexe rap ,euq ertit e mm ua ,edilavni t tiarua ++t euq ellet noisserpxe enu ,tid tnemertuA .)sreitne sed rus ruetniop ep yt ed etnatsnoc enu tse t( etnat -snoc esserda enu etnesrper t elob m ys el euq euv ed erdrep sap tua f en li ,te ffe nE .p m mon ruetniop nu snad t rap etnesrper ruelav al reipocer d snova suon ,noaf ednoces al snaD
int i ; int *p : for (p=t, i=0 ; i<10 ; i++, p++) *p = 1 ;

: t uaelbat erton ed stne ml 01 sed nucahc snad 1 ruelav al recalp ed snoa f xued iciov ,noitaton ed stilibissop sellevuon sec rertsulli ruoP
t+1 t+i t[i] &t[1] &t[i] * (t+i)

: s e t n e l a v i u q s n o it at o n e d s el p m e x e s e u q l e u q i c i o v ,is n i A .) tne msicrp sulp e mm te( , ic i ,er id- -ts ec , ua elb at u d st ne m l xua tnadnopserroc ep yt el rus ruetniop ep yt ed tnat em moc rdisnoc tse t ruetaci fitnediL .]0[t & etnelaviuq tnemelatot srola tse t noitaton a L
* tni tsnoc * tn i

: etnavius noitaralcd al eutce ffe nol euq ,elp mexe rap ,snosoppuS

.noitseuq ne ruetniop ud tcaxe ep yt ud etpmoc rinet ardua f li ,secidni srueisulp xuaelbat sel ruop , e u q t e f f e n e s n orr e v s u o n ; e c i d ni n u x u a e l b a t s e d s a c el r a p t n a n e m m o c n e s e c n e u q s n o c s el r e ni m a x e n e s n o l l a s u o N . u a el b at u d t u b d el r u s )t n at s n o c( r u e t n i o p n u e m m o c r dis n o c tse ,)etius as secidni snas( lues yolp me tse liuqsrol ,uaelbat nud ruetaci fitnedil ,++C nE

.s ur u o c n e s n oi t a ci f i d o m e d s e u qs ir s e d t n e i cs n o c s ul p noitcno f al ed ruetasilitul dner iuq ec ,esserda enu tnemeticilpxe erttemsnart ed esop


151

6.1 Cas des tableaux un indice

6 Un nom de tableau est un pointeur constant

int i ; for (i=0 ; i<10 ; i++) *(t+i) = 1 ; int t[10]

6 - Un nom de tableau est un pointeur constant

.erid ed snonev suon euq ec tnartsulli amhcs nu icioV


t[0] t[1] &t[0][0] &t[1][0]
t

.* tni

]1 [t

]0 [t

]i[t

]1[t ]0 [t 1

]0 []0[t &

: ) e p y t e m m e d t n os s e l l e t e e ss er d a e m m al t n e d n o ps err o c s el l e( s e t n e l a v i u q tne melatot tnos setnavius snoitaton sel ,tid tnemertuA ep yt ed sruetniop ed neib tigas li ,sio f etteC ...colb dnoces ud ellec , , ed )sreitne 4 ed( colb reimerp ud tubd ed esserdal etnesrper ,elp mexe raP .snes nu tno uo , euq sellet snoitaton sel ,trap ertuaD .xued sel ruop noitaci fingis e mm al sap an ed noitatnemrcnil siam ,esserda e m m al sruojuot tnednopserroc te snoitaton sel ,isniA .)! lues nud sulp non te( sreitne 4 e d e t n e m g u a , e d es s er d a l d n o ps err o c e u q e l l e t n oi ss er p x e e n u ,s n o it i d n o c s e c s n a D
t 1 +t

* tni

: )noitaton ettec resilitu siamaj tne melbaborp zeruan suov( tne meuqiroht reton es tiarved iuq ep yt , sreitne 4 ed scolb sed rus ruetniop ep yt nud si a m )e ci d ni n u ua el b at n u r u o p sa c e l t ia t c e m m o c( e p yt e d s u l p t s e n li , u a e l b a t erton ed tubd ed esserdal neib etnesrper is ,tid tne mertuA .sreitne 4 ed uaelbat nu e m m - i ul t n a t s t n e m l s e c e d n u c a h c , st n e m l 3 e d u a el b a t n u e n gis d e u q t i a f n e e r d i s n o c l i
t t

: euq ellet noitaralcd enu ertnocner ruetalipmoc el euqsro L .s e c i d n i x u e d x u a e l b a t e d s a c u a t n a ti mi l suon ne ,++C rap se yolpme selgr sel ici snotnesrp suov suon ,fitacidni ertit elpmis .repuccorp nes sap en tuep nouq etros ed ,snois -revnoc ed ecalp ne esi m al rap ulosr tnemeuqitamotua tse emlborp el euq snorrev suon ,tnadnepec ,sac reinred ec snad ; noitcno f enud tnemugra ne ruetniop ec ertte msnart tiod n ol e u qsr o l u o ) er ar z ess a t s e i u q e c( r u e t n i o p e c c e v a s e u q it m ht ir a sl u c l a c s e d e ut c e f f e n o l euqsrol euq ecnatrop mid an tniop ec ,euqitarp nE .uaelbat ud stneml sed rus ruetniop nud sulp tigas en li ,tcaxe ep yt nos essertnis nol is ,sio fetuoT .tubd ed esserda nos sruojuot etnesrper ,lues yolpme ,uaelbat nud ruetaci fitnedil ,ecidni nu xuaelbat sel ruop e mmoC

.) e r i a s s e c n e r i o m m e c a p s e l e d es s er d a e t t e c r es o ps i d , s i o f e t u o t , l i - t - ar d u a f e r o c n e( r u e t n i o p n u e m m o c r a l c d t n e m e l p m i s ts e o e m m a r g or p n u s n a d r es i l i t u t u e p n o , t i d t n e m e r t u A .s e t n e l a v i u q t n e i ar e ts e r s e t n e d c r p s n o i t a t o n x u e d s e l
t ]i[t

: c e v a , is n i A .ralcd t a tnod erinam al tios euq elleuq ,iarv etser alec ,tia f nE .uaelbat nu e mmoc ra lc d tse e u q s r o l e t nel av iuq ts e n o i t a t o n a l e uq r i o v e d s n o n e v s u o N
t ) i + t (* ] i[ t

152

6.2 Cas des tableaux plusieurs indices

Les tableaux et les pointeurs CHAPITRE 8

int [4] *

int t[3] [4] ; int *t ;

e uqrameR

: uaelbat ud stnem -l 01 sed 1 esim : noitca em m al tnasilar snoitcurtsnid setius xued ,elllarap ne ,iciov ,elp mexe raP .epyt emm ed sruetniop sed euq rerapmoc cnod arruop en nO .ep yt nu rap te eriomm ne esserda enu rap sio f al ini fd tse ruetniop nu ++C neuq reilbuo sap tua f en lI
t

.sruetniop sed ceva selbasilar snoitarpo sertua sel ici renimaxe snolla suoN .eritne ruelav enud te ruetniop nud ecner ffid al uo e mmos al tneiatuq ec uv jd snova suoN

t & * tni

.etcerroc tse elle te sreitned uaelbat nu rus ruetniop n u e c ner f r al et n esrper el le , noitaton al tnauQ .)++C rap tpecca sap tsen iuq ec ,secnerfr ed uaelbat nu eiroht ne tiaretnesrper elle( etidretni tse e u q e ll e t n oi tar al c d e n U . + + C n e s n es e d s a p a n ua el b at n u ec ner fr e d n o it o n a L
]01 [t & tni

- n o c r a P . e di l a v n i t s e

++]1[t

noisserpxeL .

eula vl

]2[t uo ]0[]2[t& ]1[t uo ]0[]1[t& ]2[]0[t& ]0[t uo ]0[]0[t&

* tn i epyt

7.1 La comparaison de pointeurs

7 Les oprations ralisables sur des pointeurs

seriatnemlpmoc snoitamrofnI
eu lav l ]2[]1[ t

. enu neib tse , ert enu sap tsen ec ; etnatsnoc enu tse

int t[10] ; int * p ; for (p=t ; p<t+10 ; p++) *p = 1 ;


]1[t

7 - Les oprations ralisables sur des pointeurs

int t[10] ; int i ; for (i=0 ; i<10 ; i++) t[i] = 1 ;

e uqrameR

2+ t 1+t t

* ]4[ tni epyt

153

resnep tiarruop no ,te ffe nE .etrop moc elleuq seuqsir sed unet etp moc ,retivl ed snollies -noc suov suon ,elarng erinam enuD . ed ruetarpol leppa eria f ed elbissop sruojuot tse li ,ehcnaver nE .ertua nu snad ruetniop ep yt nud eticilp mi noisrevnoc enucua etsixen lI
tsac

. ed r u e l a v a l t n e m e l l e t n e d i c c a r e i f i d o m e d e l b i s s o p m i t s e l i , t e f f e n e ,s n o i t i d n o c s e c s n a D
L LU N

: n o a f e tt ec e d e ll u n et n ats n oc ei ar v enu tne melleutnev rini fd ed te ,)noitini fder ed reilucitrap ne( tnetropmoc selleuq s e u qsir s e d u n e t e t p m o c ,s or c a m e d t e s et n ats n o c e d s n o it i n i f d s e l r es il i t u d l li es n o c d ttulp tse li ,++C nE .selbisil sulp tneiat se mmargorp sel siam ,ruessecorprp el rap tne metiart ud srol eritne etnatsnoc al rap ecalpmer tnemelp mis tuot srola tiavuort es i c- el l e c : s na d t ne me la g t e s n a d ei n i f d r p e t n a ts n o c al r e y ol p m e d dnam mocer tnevuos tiat li ,0 eritne ruelav al tnemetcerid resilitud euq ttulp ,C nE
f eddt sc
,oidt sc

l in

* di o v

: snoitaralcd sec cevA . lun ruetniop ec ceva )ep yt leuq etrop min ed( ruetniop leuq etropmin r er a p m o c e d e l bis s o p ts e li u q e cr a p e u q t r t ni d a n a l e c , u d n e t n e n e i B .)l a cs a P u d el tsec( neir rus tnatniop en erid--tsec ,lun ruetniop nu retnesrper riovuop ed nioseb el rap evito m tse 0 ruelav al tnanrecnoc ecnarlot etteC .)niol sulp uep nu snorelrap suon tnod euqirng ep yt el tnanrecnoc noitpecxe ertua enu aretsixe li( 0 eritne ruelav al enrec - n oc i u q e c ne ue il s i o f et u o t a n oi t pe c x e e n U .)se ti ci l p xe s n oisr e v n o c s e d s a p e d c or p e n nol euq tnat ,snio m ud( ++C el rap sirotua sac lues el tsec ,iroirp A .ep yt emm ed ruetniop n u r u e t ni o p n u d r u e l a v a l e d n o it a t c e f f a d s a c s e d r t n o c n er j d t n e m el l er u t a n s n o v a s u o N

. erar ze ssa t se t i lib iss op ettec ed iolpmeL .setnadnopserroc sesserda xued sel ertne sutis ,noitseuq ne ep yt ud stne m -ld erbmon el tinruo f ecnerf fid ruel , epyt emm ed tnos sruetniop xued dnauq ,erocne L

154

7.4 Les conversions de pointeurs


LL UN

: s e t c err o c t n or es s n oi t c urt s n i s e c
int * n ; double * x ;

7.3 Les affectations de pointeurs et le pointeur nul

7.2 La soustraction de pointeurs

Les tableaux et les pointeurs CHAPITRE 8

const int NULL = 0 ; n = 0 ; x = 0 ; if (n == 0) .....

e uqrameR

.euqirng ruetniop ed edil neib dnopserroc iuq ec ,esserdad noitamro fnil euq enig -irod ruetniop ud revresnoc en tneiver elleuqsiup tnanerprus ed neir an tilibissop etteC
void * ad ; int * adi ; void f (void *) ; ..... ad = adi ; // OK f(adi) ; // OK
* tni

: snad e mmoc ne tnemeticilp mi itrevnoc ert tuep ep yt leuq etropmin ed ruetniop nU . e p y t s n as r u e t ni o p n u d ) t n e m el l e n n oi t p e c x e( t i g as l I .) e u qir n g r u et n i o p ed tnevuos elrap no( euqnocleuq epyt ed tejbo nu rus ruetniop nu engisd ic-iuleC
* d io v

)rahc ( foez is

: re il u ci trap ep yt n u e ts ix e li , ti a f nE .seticilpxe snoisrevnoc ed iolp mel tnemeriotagilbo euq -ilpmi redcorp ed noaf ettec ,sio fetuoT .)! 1 tuav e uq s ap z ei lb uo n( eri o m m al ed tetco leuq etrop min redccad tnorttemrep suon ,etp moc ud tuob ua ,sleuqsel , ep yt ed sruetniop sed tnasilitu ne nioseb let nu eria fsitas arruop no ,sac sniatrec snaD .)ertua nu leppa nud reirav ed elbitpecsus ,ttulp ,uo( unnoc non ep yt ed stejbod sesserda sel relupinam tiod noitcno f enu o sellec euq sellet secnatsnocric seniatrec snad tnang rervas tuep sruetniop sed egap yt ec ,tne msicrP .ep yt nu te eriom m ne esserda enu sio f al dnopserroc ruetniop nu ,++C nE
* rah c

: )enrecnoc esserdal tnemergl rei f -ido m sap tnorecro f en tne mengilad setniartnoc sed euq niatrec sap tsen no ,iciuq srola ,selbatrop isauq snoisrevnoc sed retnesrper snec( r u e i f i l a u q e l t n a s il it u n e t i o s
tsa c_ c ita ts

: s n a d e m m o c s e s ht n er a p ert n e t i a h u os e p y t u d m o n e l t n a a l p n e t i os : t i a f es n o isr e v n o c e tt e c e d n o it at o n a L .eriapmi tse ic-ellec euqsrol enisiov esserda enu tios ,eriap ts e i c- el l e c e u qsr o l er t c ar a c u d e vi t c e f f e ess er d al ti os eri u d n o c t u e p n u ne nud noisrevnoc al ,sac ec snaD .esserda elleuq etropmin )tnemesuerueh( calp ert arruop )tetco lues nud tejbo( ertcarac nuuq sidnat ,eriap esserda enu calp sruojuot ares stetco 2 ed tejbo nu ,elpmexe raP . tnemengilad setniartnoc sed elleppa nol euq ec stejbo sed s ess er d a x ua t nes o p mi s e ni h ca m se n ia tre c e u q ec e d e t p m o c ri n et t ua f li , t n e m es uer u e h la M .tniop tejbol ed ep yt ua ressertnis snas ,ruetniop nu tnadnopserroc esserdal uq ressertnis en tne melani f tneiver noisrevnoc ellet enuuq
* rahc

7.5 Les pointeurs gnriques

void *

pi = static_cast <int *> (pf) ;

int * pi ; float * pf ; pi = (int *) pf ; // conversion force de pf en un pointeur sur un int

7 - Les oprations ralisables sur des pointeurs

155

.C ega gnal n e sa c el tiat iu q eC .1

r u op

* rah c

: e n o z e r t o n er i r c d e p y t e d e l b a ir a v e n u r e s i l i t u ar d u a f l i t e l a g l l i t s e i c e c , t n e m e t s e f i n a M
void raz (void * adr, int n) { for (int i=0 ; i<n ; i++, adr++) *adr = 0 ; } // illgal

* rahc >-- * diov

: isnia redcorp rerpse up tiarua no ,)stetco ne( elliat al te esserdal tinruo f iul no tnod eriomm al ed tnemecalpme nu orz te m iuq noitcno f enu erirc ruop ,isniA .)tnemengilad etniartnoc ed emlborp ed sia maj tnoresop en snoisrevnoc sel sia m( ep yt ua ,ertua nu uo tne mo m nu ,riruocer e m m dnauq ardua f li te ,tne mecalpme tec ed stetco stner ffid sel erir c d r u o p s a p t n e i v n o c e n ep yt el ,euqnocleuq ep yt ed tnemecalp me nud stetco stner ffid sel rus relliavart ed noitcno f enu eriassecn tse liuqsrol ,euq neib areton nO
* rahc * diov

q-p

i +p

. ep yt ed ruetniop nu noitceridnid ruetar -pol reuqilppad elbissop sap tsen li ,seriali mis snosiar sed ruoP .stniop stejbo sed elliat al s a p t a n n o c e n n o u q ti a f el r a p i f it s u j t s e i c e c ; n ois s er p x e l r es i li t u e g at n a v a d s a p t u e p e n n o ; e d u o )r ei t ne t na t ( ed relrap sap tuep en no , e p yt e d t n o s t e i s , t n e m - maton ; seuqitmhtira snoitarpo sed snad rinevretni sap tuep en ep yt ed elbairav enU . t n a tt o l f nud esserdal neib tneitnoc euq niatrec tse nol is euq selbatrop tnemiarv tnos en snois -r e v n o c s e l ,i ci ti a f n E .t n e m e n g il a d s et n i ar t n o c s e ll e ut n e v d et p m o c r i n e t r u o p e i f i d o m tios enigirod esserdal euq euqsir el truoc no ,secrof snoisrevnoc sec snad ,tne mellerutaN
* diov * + +p * dio v q p * dio v
da

: s n a d e m m o c , u l uo v ed ruetarpol tnaruocer ne edna med ert tuep elle ,udnetne neiB . tne meticilpmi esilar ert sap tuep en esrevni noisrevnoc al ,ehcnaver nE
ts a c
1

156

Les tableaux et les pointeurs CHAPITRE 8

float * adf ; void * ad ; void g (float *) ; ..... adf = *ad ; // illgal adf = (float *) ad ; // OK adf = static_cast <float *> (ad) ; // OK : notation conseille (attention aux () ) f(ad) ; // illgal f ( (float *) ad) ; // OK f (static_cast<float *>(ad)) ; // OK : notation conseille

void raz (void * adr, int n) { char * ad = static_cast <char *> (adr) ; for (int i=0 ; i<n ; i++, ad++) *ad = 0 ; }

seriatnemlpmoc snoitamrofnI

da

: el p m e x e r a p ,t n a v ir c n e ni os e b z e v a n e s u o v o t n e m o m u a e l b a i r a v al reralcd e m m zevuop suov ,++C ne erbil tnemecalpme nu tno snoitaralcd sel em moC .e tn a d nops err oc ess erd al ep yt ed tneml nu ruop eriassecn erio m m ecapsel reuollad temrep
da

r et c e f f a d t e

tn i

.selpmis selpmexe seuqleuq drobad sno yov ,elarng exatn ys al rennod ned tnavA

.s e u qi t a m o t u a s e n n o d s e d e ll e c e d et n a d n e p d ni tse elle ; elip enu snad eria f es sulp tuep en seuqiman yd sennod sed noitseg al euq areton nO .)sdradnats snoitcno f sed ceva ,elp mexe rap ,seunetbo ert up tneirua stilannoitcno f se mm sel ; iolpme ruel ed exatn ys al rus euq ecnedicnid tia f ne an sruetarpod essigas liuq ti a f el( te : sreilucitrap uep nu sruetarpod esopsid ++C ,eria f ec ruoP .e mm - i u l e m m ar g or p u d e d n a m e d a l s r b il t e s u ol l a t n os s t n a d n o ps err o c s t n e m e c al p m e s el ,sio f etteC .eriomm ed euqiman yd noitacollad setid stilibissop sed ertuo ne er ffo ++C . e li p e n u d e mr o f s u os s e r g t n os s e l l e ; e itr os as r b il t e n oi t -cno f enu uo colb nu snad ertnel uolla tse tne mecalpmel tnod seuqitamotua sennod sel ; e m m arg orp u d er u d al et u ot r u o p s i o f e n u u ol la t se t n e me ca l p m el t n o d se u qi ta ts se n n o d se l : reugnitsid ed noisaccol ue jd snova suoN
e te led wen

: zar noitc no f erto n e d noitasilit ud elp mexe nu icioV


157

8.1 Loprateur new

8 La gestion dynamique : les oprateurs new et delete

Exemple 1

int *ad = new int ; ad = new int ; int *ad ;

: n o i t c u rt s n i l

: noitaralcd al cevA

void raz (void *, int) ; int t[10] ; double z ; ..... raz (t, 10*sizeof(int)) ; raz (&z, sizeof (z)) ;

8 - La gestion dynamique : les oprateurs new et delete

// tableau mettre zro // double mettre zro

. s r u e t c ur t s n o c s e d t n a d ss o p s er u t c ur t s x u a u o s t e j b o x u a t n a u q i l p p a s , w e n r u e t a r - p o l e d e i gr a l e x a t n ys e n u e t s i x e l i u q ) 3 1 er t i p a h c u d 2. 1 e h p a r g ar a p( s n or r e v s u o N 3 . e uq i t arp n e e s i l i t u t n e m e ra r ts e t i l ib i ss op e t te C .s e t n a t s n o c s n o i ss e r p x e s e d er t t n e m er i o t a g i l b o t n e v i o d s er t u a s e l ; e u q n o c l e u q e r i t n e noisserp xe en u ert tuep noisne mid eri merp al ,elarn g eri na m enuD .)]01[ )*( epyt e t o n e s e p y t e l t n o d( sr e i t n e 0 1 e d x u a e l b a t s e d r u s r u et n i o p n u t i nr u o f ,sac ec snaD
w en ]01 [ ]n [ e py t w en

w en

w en

co lla_dab

: e lp m e x e r ap ,s n o is n e m i d sr u e is u l p u a el b a t n u r u o p t n e m e c a l p m e n u r e u o l l a r u o p s i l i t u er t t u e p ,rueugir etuot nE 2 . 3 2 e rt i p a h c ud 4.6 ehpargarap ua snorrev el suon e mmoc ,cehcd sac ne tnem mer ffid retropmoc es e d rednamed ed elbissop tnadnepec tse lI .tpmorretnis emmargorp el ,noitpecxe enu retiart ruop ruem margorp el rap uvrp tsen neir is euq zerrev suoV .32 ertipahc ua l i a t d n e i d u t ts e s n oi t p e c x e s e d n o it s e g e d e m si n a c m e C . e p yt e d n o it p e c x e e n u e m m o n n ol e u q e c e hc n el c d , ce hc d sa c n e u q ti o vr p + + C e d e mr o n a L 1
wen

se uqrameR

* epy t

ep yt

. u ae lba t ec e d t ne m l r ei merp el r us ) ep yt ed sruojuot( ruetniop nu tatlusr ne tin -r u o f e ll e , iss u r a n o it ar p ol is ; u q i d n i ud stne ml ruop eriassecn tnemecalp mel srola euolla noitcurtsni etteC .)evitagn non( euqnocleuq eritne noisserpxe enu engisd o
n ]n[ epyt we n w en

* ep y t

: e mr o f al e d e xa t n y s en u t ne me la g etp ec ca ruetarpoL .issur a noitacollal euqsrol ,tnadnopserroc tne mecalp mel rus ) ep y t ed( ruetniop nu tatlusr em moc tinruo f lI .euqnocleuq tne mulosba ep yt nu etnesrper o
ep yt epyt we n

: is ni a es il it us

w en

)ednarpo lues nu ( erianu ruetarpoL


Syntaxe et rle de new
cda

. snad )tubd ed( esserdal ecalp te sertcarac 001 ed uaelbat nu ruop eriassecn tne mecalpmel euolla
adc = new char[100] ; char *adc ;

: n oi tc ur ts ni l

: noitaralcd al cevA
Exemple 2

158

Les tableaux et les pointeurs CHAPITRE 8

.)! ++C ne elbasilitu sruojuot( collam ,C egagnal ud eussi noitacollad noitcnof al rap unetbo ruetniop nu ceva sac el tiares eC .1

. e te led te wen r ap s etr e f fo euqiman yd noitseg ed stilibissop sec tnartsulli telp moc em margorp ed elpmexe nu icioV

.31 ertipahc ud 7 ehpargarap ua snorelrap suon tnod te ,stejbod xuaelbat ed sac el snad euq tneivretnin iuq ,esserda ][ eteled emro f al ed ,eteled ed exatn ys ertua enu etsixe lI

. wen r a p e u q t n e m ert u a u n e t b o r u e t ni o p n u u o es s er d a e si a v u a m e n u e t e l e d ze ssi nr u o f s u o v ; stejbo sniatrec ed sruetcurtsed sed te sruetcurtsnoc sed tini fd nol euqsrol sesirp ert tnorv -ed snoituacrp sed euq snorrev suon ; rbil jd tne mecalp me nu eteled rap zerbil suov : euqsrol ini fd sap tne mulosba tsen em margorp ud tnemetropmoc el euq neib zetoN
1

es serda ete led

: ) wen rap uolla tne mecalp me nu rus ruetniop nu ruelav e mmoc riova tnaved noisserpxe enu tnat esserda( etnavius al tse eteled ruetarpol ed elleusu exatn ys a L : rap uolla tnemecalp mel ruop
delete adc ; adc = new char [100] ;

: rap uolla tnemecalp mel ruop : tirc no ,1.8 ehpargarap ud selpmexe sel snad src stne mecalpme sel rerbil ruop ,isniA . eteled ruetar -pol esilitu no ,wen rap tnemelbalarp uolla tnemecalp me nu rerbil etiahuos nol euqsro L
delete ad ;

.stejbo xua vresr tse li ; esab ed sep yt xua sap euqilppas en li siaM .wen ruetarpo nu tne melag etsixe lI
avaJ n E

8.3 Exemple
e uqrameR

: te

8.2 Loprateur delete

ad = new int ;

8 - La gestion dynamique : les oprateurs new et delete

159

160

Les tableaux et les pointeurs CHAPITRE 8

#include <iostream> using namespace std ; main() { int *adi, *adibis ; int nb ; float * adf ; cout << "combien de valeurs : " ; cin >> nb ; // allocation dun emplacement pour nb entiers dans lesquels // on place les carrs des nombres de 1 a nb adi = new int [nb] ; cout << "allocation de " << nb << " int en : " << adi << "\n" ; for (int i=0 ; i<nb ; i++) *(adi+i) = (i+1)*(i+1) ; cout << "voici les carres des nombres de 1 a " << nb << " : \n" ; for (adibis = adi ; adibis < adi+nb ; adibis++) cout << *adibis << " " ; cout << "\n" ; // allocation dun emplacement pour 30 floattants adf = new float [30] ; cout << "allocation de 30 float en : " << adf << "\n" ; // libration des nb int delete adi ; cout << "liberation des " << nb << " int en : " << adi << "\n" ; // ici, il serait dangereux dutiliser les emplacements points par adibis // (comme, bien sur, ceux points par adi) adi = new int [50] ; cout << "allocation de 50 int en : " << adi << "\n" ; delete adf ; cout << "liberation des 30 float en : " << adf << "\n" ; adf = new float [10] ; cout << "allocation de 10 float en : " << adf << "\n" ; } combien de valeurs : 7 allocation de 7 int en : 8861976 voici les carres des nombres de 1 a 7 : 1 4 9 16 25 36 49 allocation de 30 float en : 8862008 liberation des 7 int en : 8861976 allocation de 50 int en : 8862132 liberation des 30 float en : 8862008 allocation de 10 float en : 8862336

- n i o p e d e d i a l u a e l b a t e c r es i li t u t n e m m o c s n ort n o m s u o N .)s a c e c s n a d er i a ss e c n c n o d tse euqiman yd noitseg al sruocer el( emmargorp ud ruetasilitul rap einruo f tse noisnemid al tnod sreitned uaelbat nu ruop tnemecalpme nu snouolla suon ,sp met reimerp nu snaD

eteled te wen ed edial euqimanyd noitseg ed elpmexE

.noitatceffad ruetarpo nud ehcuag ertarappa tuep iuq esohc euqleuq engisd iuq ,eulav tfel ed noitcartnoc al ed tneivorp emret eC .ruelav al reifidom tuep no tnod esohc euqleuq ecnerfr al eulavl emmon nouq snoleppaR .1
chose (&n) ; // appelle chose I chose (&p) ; // appelle chose II
1

: euq etros ed ,+C ne elb -issop tse noitcnitsid etteC .neir tiaf nen II esohc euq sidnat ,esserdal tioer elle tnod eulavl al ed ruelav al eifidom I esohc euq riovrp neib srt tuep no ,te ffe nE .ei fitsuj tse * tni tsnoc te * tni ertne noitcnitsid al ,secner fr sel ruop tiasiudorp es iuq ec elbalb mes noa f eD
void chose (int *) ; // chose I void chose (const int *) ; // chose II int n = 3 ; const p = 5 ;

: selpmexe sed iciov nE .ruet -niop ep yt ed stnemugrad sac ua tnemelica f tnesilarng es sertnocner selgr se L .snoitcnof sed rini fdrus ed tiatte mrep suov ++C tnem moc 7 ertipahc ud 01 ehpargarap uv snova suoN

.) si li t u s n o v a s u o n e u q i ul e c s n a d s a c el s a p ts e n i u q e c ,rbil tnemelbalarp tnemecalpme nud noitasilitur al retatsnoc arruop no ,stne mennorivne sniatrec snad( setnadnopserroc sesserda sel sio f euqahc tnahci ffa ne ,eriomm ecapsed snoitarbil te snoitacolla sertua seuqleuq snoutce ffe suon ,etiusnE .)! uaelbat ed resil -itu snas stia f ert up tneiarua sluclac sel euqsiup elocd elpmexe nud euq tigas en li( sruet
161

9 Pointeurs et surdfinition de fonctions

Exemple 3 Exemple 2 Exemple 1


void affiche (char *) ; // affiche I void affiche (void *) ; // affiche II char * ad1 ; double * ad2 ; ..... affiche (ad1) ; // appelle affiche I affiche (ad2) ; // appelle affiche II, aprs conversion de ad2 en void * void affiche (char *) ; // affiche I void affiche (double *) ; // affiche II char * ad1 ; void * ad ; ..... affiche (ad1) ; // appelle affiche I affiche (ad) ; // erreur : aucune conversion implicite possible partir de void *

9 - Pointeurs et surdfinition de fonctions

.ruetniop emsilamro f el uo uaelbat e msila mrof el tnem merf fidni resilitu ,noitcno f al ed noitini fd al snad ,tuep no ,yolpme ett-nel tios euq leuq ,edutibahd e mmoc ,sruellia raP . n o it cn o f ert o n t ia ll ia v art l euq el ru s ua elb at ud e v it ce f f e n oi sn e m i d al releppar iul ed ni fa ,e mmargorp ud ruetcel el ruop euq trtnid an ett-ne reimerp el snad erugi f iuq 01 el ,tia f nE .noitcno f al ed ett-nel snad uaelbat ud noisne mid al rennoitne m sap en ed elbissop tia f tuot tios liuq dnerpmoc no ,snoitidnoc sec snaD .)secidni srueisulp xuaelbat sel ruop emm ed sulp ari nen liuq snorrev suon( uaelbat ud tubd ed esserdal ed te gnar nos ed ritrap ,euqnocleuq tneml nud esserdal reni mretd ed elbapac te ffe ne tse li ; ruetalip moc ua elbasnepsidni sap tsen uaelbat ud etcaxe elliat al ed ecnassiannoc al ,trap ertuaD .)tnavius ua leppa nud regnahc tuep esserda ettec sulp ed( etnaleppa noitcno f al snad sruellia rap esilar tse esserdal ici arvecer no tnod uaelbat ud erio m m tnemecalp mel ed noitavresr a L .teum tne mugra nu engisd t euq tiaf el rap ei fitsuj es erutirc erinred a L : setnavius serinam sed enul ed tirc tne mmer ffidni ert tuep tcf ed ett-neL
int t1[10], t2[10] : ..... fct(t1) ; .... fct(t2) ; void fct (int t[10]) void fct (int * t) void fct (int t[])

: noitcno f ettec ed selbissop sleppad selpmexe xued icioV


noitcnof enud tnemugra ne simsnart ecidni nu uaelbat ed elpmexE
void fct (int t[10]) { int i ; for (i=0 ; i<10 ; i++) t[i] =1 ; }

.tnemugra ne esimsnart tnat uaelbat ec ed esserdal ,stneml 01 ed uaelbat nud stneml sel suot snad 1 ruelav al tem iuq noitcno f ed elpmexe nu icioV
10.1.1 Premier exemple : tableau de taille fixe

.seuqitarp selpmexe seuqleuq sno yoV .rei fidom al ed uo ruelav r u el r es il it u d ess i g as li u q ,st n e m l s es r us s e ul u o v s n o it al u pi n a m s e l s et u ot r e u t c e f f e d te mrep iul iuq ec ,noitcno f al uaelbat ud esserdal )ed ruelav al( tnemelani f te msnart no ,noitcnof enud leppal ed fitce ffe tnemugra ne uaelbat nud mon el ecalp nol euqsro L

162

10.1 Cas des tableaux un indice

10 Les tableaux transmis en argument


Les tableaux et les pointeurs CHAPITRE 8

. . . f i t c e f f e t n e m u gr a l e d r u e l a v a l e d e i p o c e n u u q , n o a f e t u o t e d , t s e n e l l e u q a l , t c f s n a d t e d r u e l a v a l t n e m e t c er i d r e t n e m r c n i d t i d r e t n i e l l e : t r t n i d u e p t n e m e l ar n g a t i l i b i s s o p e t t e C . er t l sr u o j u o t t n e v u e p u a e l b a t u d sr e i t n e s e l e u q sr o l a , e i f i d o m er t s a p t u e p e n i u q t e d r u e l a v a l e u q t s e n e c , s a c e c s n a D . sr e i t n e s e d r u s t n a t s n o c r u e t n i o p n u t s e t c n o d ; r e i t n e n u r u s r u e t n i o p n u t s e t ts n o c c n o d ; r e i t n e n u t s e t t sno c * : is n i a e t r p r e t n i s e ll E : ett-nel tcf r uop resilitu res nep ze vuop suoV 2 .t nem - ugra ne uer uaelbat u d sruelav sel rei fido m ed tcf s na d elbissop sulp srola tiares en lI . t n a t s n o c ) u a e l b a t n u r u s r u e t n i o p n u t i a f n e( u a e l b a t n u t s e ] [ t c n o d ; t n a ts n o c ts e ] [ t t n i : i s n i a e t r pr e t n i s : e t t - n e l , e m m e D . s t n a t s n o c s r e i t n e s e d r us r u e t n i op n u t s e t c n o d ; t n a t s n o c r e i t n e n u t s e t* c n o d ; t n a ts n o c ts e t * t n i : i s n i a e t r pr e t n i er t t i o d i c - e l l e c : sett-ne sec ed nul ceva tcf zessini fd suov is euq sap zeilbuoN 1
void fct (const int * t) void fct (const int t[]) void fct (int * const t) for for for for (i=0 (i=0 (i=0 (i=0 ; ; ; ; i<10 i<10 i<10 i<10 ; ; ; ; i++) i++, i++) i++)

se uqrameR

: sruetniop ed nosiarap moc ed stilibissop sel snosilitu suon o te p ruetniop nu snad t esserdal snoipocer suon elleuqal snad tilibissop erinred enu ni fne icioV .etnemrcni ert cnod tuep elle te eulavl enu neib cnod tse t ; uaelbat nud esserdal ed eipoc enu etnesrper t rac emlborp nucua esop en ++t noisserpxel ,erocne icI
,

: )tni ep yt ed ralcd t a i euq tnesoppus selle( stnedcrp sett -ne siort sed leuqel etrop min ed tnedommoccas iuq tcf ed selbissop serutirc srueisulp icioV
163

int * p ; for (p=t ; p<t+10 ; p++) *p = 1 ; t[i] = t++) *t *(t+i) t[i] = 1 = = 1

; 1 ; 1 ; ;

10 - Les tableaux transmis en argument

u a e l b a t u d n o is n e mi d e d n o c es al ert a n n o c t n e m e l a g t i o d l i ; t u b d e d ess er d a n o s er t a n n o c ed retnetnoc es sulp tuep en ruetalipmoc el ,secidni xued uaelbat nud euqnocleuq tne m -l nud esserdal revuort ruop ,euq riov neib tua f li ,sio fetuoT .ett-nel ed semro f sertuad resilitu ,ecidni nu uaelbat nu ruop tid snova suon euq ec ceva eigolana rap ,tiarruop no ,icI
)sexif( snoisnemid xued uaelbat nud tnemugra ne noissimsnart ed elpmexE
void raun (int t[10][15]) { int i, j ; for (i=0 ; i<10 ; i++) for (j=0 ; j<15 ; j++) t[i][j] = 1 ; }

: 51 te 01 snoisne mid ed uaelbat nud stneml sed nucahc snad 1 ruelav al ecalp iuq noitcno f enud elpmexe nu icioV

elbairav elliat ed noisnemid enu uaelbat nu rus tnalliavart noitcnoF


int som (int t[],int nb) { int s = 0, i ; for (i=0 ; i<nb ; i++) s += t[i] ; return (s) ; }

: euqnocleuq elliat ed sreitned uaelbat nud stne ml sed em mos al eluclac iuq noitcno f enu ,elpmexe rap ,icioV .tne mugra ne elliat al erttemsnart ne iul ed noitidnoc ,euqnocleuq noisne mid ed uaelbat nu ceva relliavart ed elbapac noitcno f enu resilar ed elica f isnia tse lI .etcaxe elliat al ertannoc ned nioseb sap an ruetalipmoc el ,noitcno f enud tne mugra ne tarappa ecidni lues nu uaelbat nuuqsrol ,riov el ed snonev suon e mmoC
10.1.2 Second exemple : tableau de taille variable

164

10.2 Cas des tableaux plusieurs indices


: noitcno f ettec ed sleppad selp mexe seuqleuq icioV
Les tableaux et les pointeurs CHAPITRE 8
main() { int t1[30], t2[15], t3[10] ; int s1, s2, s3 ; ..... s1 = som(t1, 30) ; s2 = som(t2, 15) + som(t3, 10) ; ..... }

10.2.1 Premier exemple : tableau de taille fixe

. ) r ei t n e n u d el l i a t a l i ci t n a t t i n u l ( s t i n u 1+n ed ruetniop ec retne mrcnid ti ffus li tnavius el rus retniop ruop ,elanogaid al ed tnem - l n u e n g is d r u e t n i o p n u , c n o d , i S .s t n e m l n r a p s r a p s t n os el a n o g ai d a l e d s f it u c s n o c stne ml xued euq ec ed etp moc unet snova suon ,icI .* tni ep yt ed ruetniop nud e mrof suos ,uaelbat ud tne ml rei merp ud esserdal ,tnemugra reimerp ne ,cnod tioer noitcno f ertoN
elbairav elliat ed rrac uaelbat nu rus tnalliavart noitcnoF
void diag (int * p, int n) { int i ; for (i=0 ; i<n ; i++) { * p = 0 ; p += n+1 ; } }

.irporppa esserdad luclac el tnautce ffe ne sruetniop sed rap suluov stneml sel resserda etsisnoc emlborp ec erduosr ed noa f enU .euqnocleuq elliat ed rrac uaelbat nud elanogaid al ed stne ml sed nucahc snad 0 ruelav al ecalp iuq noitcno f enu erirc snoihcrehc suon euq snosoppuS .) elba c ilppa s ulp ts en t n e d crp e ms il a mr o f el leuqel snad te( selbairav snoisne mid ed uaelbat nu rcasnoc tnavius elp mexel snad reuq -ov snolla suon euq se mlborp seuqleuq siofetuot esop alec ; noitcno f al ed noitini fd al s n a d t e e t t- n el s n a d s i o f a l , u a el b at e msi l a mr o f e l t e r u e t ni o p e m si l a mr o f e l r e g n al m ,ecidni nu xuaelbat sel ruop tia f t a iuq ec ceva eigolana rap ,regnos tiarruop nO
10.2.2 Second exemple : tableau de dimensions variables

e uqrameR

! uaelbat ua ubirtta ecapsel ed srohed ne ...1 sed tiarecalp noitcno f erton ,51 erueir fni tse noisne mid emixued al tnod xuaelbat sed ceva ,tse sulp iuQ .tam ed stne mecalpme 042 sed sniatrec snad 1 ruelav al sio f 051 arecalp snoitcurt -sni sec ed noitucxel ,ruetalip moc el rap inruof tios suon en citsongaid nucuauq neib ,siaM
int mat [12][20] ; ..... raun (mat) ; .....

.)][][t tni( uar sap siam )]51[][t tni( uar ert up tiarua noitcno f erton ed ett-nel ,isniA .)2 ehpargarap el ze yover : eriomm ne ssopsid tnos stne ml sel tnod erina m al ed unet etpmoc eriassecn sap tnatn eri merp al(

: elp mexe tec snad em moc ,releppal sruojuot setrec snorruop suon ,tnem -sicrp sulP .euvrp t a elle selleuqsel ruop sellec ed setnerf fid snoisnemid ed uaelbat nu ruop sulp tneivnoc en noitcno f ettec ,silitu ett-nel tios euq leuq ,sio f ettec ,ehcnaver nE

10 - Les tableaux transmis en argument

165

tni

t a t l u s r n u t n a s s i nr u o f )

tni

te

elbuod

fda

tni

e d t a tl us r n u t n as si nr u o f )

tni

te

elbuod

. ep yt ed ( st n e m u gr a x u e d n o i t c n o f e n u r us r u e t ni o p n u ts e : euq c n o d ; ep y t sep yt ed( stnemugra xued noitcno f enu tse )fda *( : e u q e i fi c p s e ll E


int (* adf) (double, int) ; int t[30] [30] ; diag (t, 30)

: n o i t ar a l c d et t e c z er d is n o C

.selp mexe xued iciov nE .setnassertni stilibissop sed ++C ne tner ffo seuqramer xued seC .)s t e j b o s el u d o m s e l s n a d t n or ets is b us sl i( s e nr e t x e t n os s n o it c n o f e d s m o n s e l e u q e c n er f f i d e tt e c s i o f et u o t c e v a , x u a el b at e d s m o n s e l ruop tiassap es iuq ec eugolanad esohc euqleuq l evuorter nO .noitcno f ettec ed esserdal n e r u e t a li p m o c e l r a p t i u d art ts e )l u e s y ol p m e( n oi t c n o f e n u d m o n el , + + C n e ,s ul p e D .esserda nos rinetnoc erid--tsec ,noitcnof enu rus ret -niop enitsed elbairav enu rini fd y tuep no ,ehcnaver nE .elbairav enu snad noitcno f enud mon el recalp ed elbissop sap tsen li ,segagnal sertua sed trapulp al snad em moc ,++C nE

. e c i d n i n u d r u e l a v a l sia m ,ruetni op nu sulp n on ,sr ola tiareuqilppas 1+n ed noitatne mrcni d e msinac m e m m e L .)n ed sulp ne( t ne m ugra ne einruo f ert sr ola tiarve d )n*n( elliat al t nod nois - n e m i d e l u e s e n u u a e l b a t n u t n ar a l c d y n e er i r c s t n e m e l a g t i arr u o p n o i t c n o f e t t e C 2 . e sr e v n i n o i s r e v n o c a l c e v a e m m e d s a p t i ar i n e n l I . n e l l i a t e d t e j b o n u d e s s er d a l n 0 1 e l l i a t e d t e j b o n u d e s s er d a l e d es s a p n o r a c , t n e m e n g i l a d s e t n i ar t n o c s e d e i l es s er d a d n o i t a c i f i d o m e d e u qs ir n u c u a a y n l i , i c I . * t n i n u n e i tr e v n o c ar e s l i u q ar e f g a i d r u o p e p y t o t or p n u d e c n es r p a l , t i a f n E .sr e i t n e s e d r us r u e t n i o p n o n t e sr e i t n e 0 1 e d s c o l b s e d r u s r u e t n i o p e p y t n u d s i a m , t e d es s er d a l , s e tr e c , t s e t f i t c e f f e t n e m u gr a l r O : i s n i a a r e t n e s r p e s g a i d n oi t c n o f ert o n e d l e p p a n U 1

166

11.1 Paramtrage dappel de fonctions

11 Utilisation de pointeurs sur des fonctions


se uqrameR
Les tableaux et les pointeurs CHAPITRE 8

.noitcno f enud esserdal tne metcerid sap non te ,noitcno f enud esserdal tnanetnoc ruetniop nu ici engisd rac , erirc sap tuotrus tua f en liuq neib zetoN
f )x(f g etni

taolf

taolf

taolf

taolf

: etnavius noa f al ed esserdal uer isnia n oi tc n o f al e d n o it i ni f d a l e d ni es u A arua no tnod noitcno f al releppad elbissop ares li , . e p y t e d t at l u s r n u tnassinru o f te ep yt ed tnemugra nu tnavecer noitcno f enu rus ruetniop nu cnod tse ; ep yt e d t a t l u s r n u t n a s si nr u o f t e e p yt e d t n e m u gr a n u t n a v e c er n o it c n o f e n u c n o d ts e ; e p y t e d ts e : isnia retrpretnis tuep noitaralcd aS .elargtnil rel -uclac ehcrehc no tnod noitcno f al ed esserdal ici dnopserroc teum tnemugra reimerp e L
f )f*( taolf )taolf()f*(

: er n e g e c e d et t- n e n u sr ol a t i ar e d ss o p emmon snoresoppus s u o n e u q n oi tc n o f e ll et e n U . e n n o d e u qir m u n e d o ht m e n u t na v i u s e u q n o cl e u q n o it c n o f enud elargtnil reluclac ed tnatte mrep noitcnof enu erirc snoitiahuos suon euq zesoppuS
g etni

.seuqitnedi ert tneviod ruoter ed ruelav al ed iulec te stnemugra sed sep yt sel iciuq eifingis iuq ec ,ep yt emm ud tnem -esueruogir tnos sednarpo xued sel is euq elagl tsen 1tcf = fda euq ellet noitatce ffa enU

: s et n a vi us x u ed s ed e n ul etnelaviuq cnod ares noitcurtsni ettec ,sac el tnaviuS .) te ( seuqidni sruelav sel tnattem -snart iul ne , snad tnemelleutca erugi f esserdal tnod noitcno f al elleppa ,te ffe ne ,ic-elleC
4 53.5 fda

: euq ellet noitcurtsni enu rap )em margorp ud noitucxel ed li f ua reirav tuep eleppa noitcnof al euq erid--tsec( elbairav noitcnof ed leppa nu remmargorp ed elbissop tneived li ,snoit - i d n o c s e c s n a D . ) u o ( e t n a d n o ps err o c n oi t c n o f a l e d es s er d a l , s n a d , t n e c a l p s e l l E
2tcf 1t cf fda

: s t n a v i u s s e p y t ot or p s e l t n a y a s n o i t c n o f s e d t n o s
167

11.2 Fonctions transmises en argument

: s nes nu sr ol a t no se t na v i us s n o it at ce f f a s el
int fct1 (double, int) ; int fct2 (double, int) ;
2tcf

te

1tcf

, elp m e xe rap ,iS

(*f) (x)

float integ ( float(*f)(float), ..... ) fct1 (5.35, 4) ; fct2 (5.35, 4) ; (* adf) (5.35, 4) ; adf = fct1 ; adf = fct2 ;

e uqrameR

11 - Utilisation de pointeurs sur des fonctions

168

Les tableaux et les pointeurs CHAPITRE 8

main() { float fct1(float), fct2(float) ; ..... res1 = integ (fct1, .....) ; ..... res2 = integ (fct2, .....) ; ..... }

es tiarruop ellE .serilucitrap stluci ffid ed sap etnesrp en

getni

: is ni a r e t n es r p noitcno f al ed noitasilituL

.niam noitcno f al ertte msnart tuep nol euq stne mugra sleutnev sel ruop ...senahc-suos ed snoitcartxe ,nosiarap moc ,eipocer ,noitantacnoc : euq slet seuq -issalc stnemetiart sel reutce f fed tnattemrep sdradnats snoitcno f ed erb mon niatrec nu rap ; se ll e n no i tasr ev n o c s ei tro s-se rt ne s el t na si la r s e do h t m s el rap ; ) "ruojnob " euq sellet( setnatsnoc senahc sel retnesrper ruop ruetalip moc el rap : sio f al esilitu tse iuq ,C egagnal ud etirh ,senahc sed noitatnesrper ed noitnev -n oc en u e ts i xe l i , tr ap e n u d , te f f e n E .s ed irb yh uep e uq le uq t n os ses o hc s el ,+ +C e g a gn al nE .enahc euqahc ed etnaruoc rueugnol al ertannoc ed ne yom el riovrp ,sulp ed ,tua f li te ertcarac rap ertcarac esilar tnemeriotagilbo tse snoitamrofni sellet ed noitalupinam a L .)erio mm ecalp ed etrep enu enartne ,puoc emm ud ,iuq ec te senahc xua ela mixa m rueug -nol enu sio f al esop mi iuq ec( exi f tne meriassecn tse elliat al tnod sertcarac ed xuaelbat sed rus relliavart ed eriassecn srola tse li ,snoitamro fni sellet ed retiart ruoP .enahc ep yt l e t n u d s a p t n e s o ps i d e n ) dr a d n a ts l a cs a P u o n artr o F sl et ,s n ei c n a s u l p( s e g a g n a l s ert u a D .ep yt em m ed elbairav ertua enu snad ep yt ec ed elbairav enud unetnoc el rer fsnart ed temrep noitatce ffa elp mis enuuq snes ec ne ,elabolg erinam enud selupinam ert tnevuep sellE .em margorp ud tne meluord ud li f ua ,rueugnol ne te unetnoc ne sio f al ,reulov tnevuep iuq sertcarac ed setius sed riovecer senitsed tnos ep yt let nud selbairav se L .enahc ep yt elbatirv nud tnesopsid )lacsaP obruT tnemenneicna ,cisaB lausiV ,avaJ( segagnal sniatreC

Les chanes de style C

.G exennAl snad tircd tse C elyts ed senahc ed noitalupinam ed snoitcnof sed elbmesneL .1

: e mr o f al ed snoitaton sed suos ,)sem margorp sov snad zesiudortni sel suov euq udnetne-suos( enahc setnatsnoc sel retnesrper ruop ruetalip moc el esilituuq noitnevnoc ettec tseC

. st et c o 1 + n e d t n e m e c a l p m e n u e r i o m m n e e p u c c o s e r t c a r a c n e d e n a h c e n u , e l ar n g er i n a m e n u d , e u q e i fi n gi s al e C .l u n e d o c e d er i a t n e m l p p us t et c o n u rap n i mre t t n at t u ot el ,)s e do c sr ue l e d n u ca hc t ne ms i crp s ulp( ser t car ac se s e d n u c -ahc tnadnopserroc stetcod etius enu rap etnesrper tse sertcarac ed enahc enu ,++C nE

.)leppa are f yn egarvuol ed ertipahc nucua( sp met rei merp nu snad srongi ert neib srt tnevuep sli te senahc ed noitalupina m ed snoitcno f selapicnirp sel tnevircd sli ,sehpargarap sertua xua tnauQ .erdnerp snoituacrp sel euqidni iuq 01 ehpargarap uauq isnia ,senahc ed noitalupinam ed snoitcno f sel rus selarng snoitacidni seuqleuq ennod iuq 5 ehpargarap ua ressertni suov issua zevuop suov ,tnemelleutnevE .niam noitcno f al stne m -ugra sed rinruo f ed erinam al te sertcarac ed xuaelbat ed noitasilaitinil ,sellennoitasrevnoc s e itr os s e rt n e s el , s e c n e u q s n o c s es t e s e n a h c s e c e d n o it at n e s r p er e d n o i t n e v - n o c a l t n et n e s r p sl i : e g ar v u ol e d e ti us a l s n a d s si li t u si o fr a p t n or es i u q 4 t e 3 , 2 , 1 s e h p - ar g ara p se l s n i o m u a r ei d ut d s n o d na m m oc er s u o v s u o n , C e l yt s e d s e n a h c s e d r esi l it u d sa p ze ga si v ne n s u o v is e m M .er ti p a hc ec s n a d re i d u t s n ol la s u o n e u q C e l y ts e d se n a h c s e l r us e ss a p mi l t n e m e l a t o t t n asi a f n e + + C er d n er p p a d e l bis s o p er u g ts e n l i , e v i ti n i f d n E .)gnirts ep yt ed sruelav sed ,sac nucua ne te( C el yts ed senahc sed euq resilitu tuep en no ,niam noitcnof al stne mugra sed ressap ruop ; )...sem margorp xuaevuon ed emm te( C el yts ed senahc sel tnesilitu ++C se mmargorp ed erb mon nob ; tnemerueirtluuq seidut tnores en iuq ruetartid te ruenetnoc ed snoiton sel rus esoper noitasilitu ennob as : siaM .gnirts essalc enud emro f al suos ,++C egagnal el snad tnemevidrat tiudortni enahc ep yt elbatirv nu etsixe li ,trap ertuaD . n o it n e v n o c ettec tnavius setnesrper senahc sel rengisd ruop C el yts ed senahc ed snorelrap suoN
1

170

1.2 Cas des chanes constantes

1.1 La convention adopte

1 Reprsentation des chanes

Les chanes de style C CHAPITRE 9

"bonjour"

.elcuob al ed sruoc ua ,rda ed ruelav al ed noitulovl tnednopserroc sehcl f sertua sel ; "ruojnob" = rda : noitatce ffal ed noitucxel srpa noitautis al dnopserroc nielp tiart ne ehclf a L .en monhp ec tnartsulli amhcs nu icioV .xuaelbat sel ruop euq enmonhp emm el l evuorter no ; esserda nos sia m ,e m m-elle enahc al ed ruelav al sap non ,ruelav emmoc a ruojnob noitaton al : n o it at c e f f al s n a d ,si a m s t n a d n o ps err o c st et c o d e ti us a l eri o m m n e r c a r u e t a li p m o c el : etnatsnoc al enrecnoc iuq ec nE .)ser -tcarac ed etius enu uo( ertcarac nu rus ruetniop nu ruop tnemecalpmel tnemelpmis evresr
char * adr ; "bonjour" adr = "bonjour"

senahc sed noitatnesrper ed noitnevnoC


bonjour

: stiralucitrap xued sec tnartsulli e mmargorp nu icioV .e tn a d nops err oc eri o m m e n o z a l r us ) r a h c ep y t ed stne ml sed rus( ruetniop nu ne ruetalipmoc el rap etiudart ares noitaton ellet enu ,sulp eD
171

#include <iostream> using namespace std ; main() { char * adr ; adr = "bonjour" ; while (*adr) { cout << *adr ; adr++ ; } }

ad r b o n j o u

1 - Reprsentation des chanes

\0

: n oi tar al c d a L

: ) p i n a m o i e t t - n e r e i h c i f e l tr e i u q e r w t e s e d n o i t a s i l i t u l , n o i t - n e t t a( m o n r p e l t e m o n e l er i l s n o i rr u o p s u o n t n e m m o c i c i o v , e l p m e x e r a P .s t o l f x u a r c a s n o c er t i p a h c e l s n a d i d u t ar e s i u q w t e s e u q ir t m ar a p r u e t a l u p i n a m u a t n a r - u o c er n e t o l f e l r u s s e u l s n o i t a mr o f n i s e d el l i a t a l r e t i m i l e d e l b a n n o s i a r ar e s l i , e n a h c a l t n a l l i e u c c a u a e l b a t u d t n e m e dr o b d t u o t r e t i v r u o p , e u q i t ar p a l s n a D . s er t c ar a c 9 1 e d s u l p r i n e t n o c s a p t i o d e n r u e t a s i l i t u l r a p i nr u o f m o n e l , i c i , e l p m e x e r a P . s er t c ar a c 1 + n e d er i o m m n e e g a k c o t s e l e u q i l p mi s er t c ar a c n e d er u t c e l a l e u q n e i b z e t o N 2 .gnirts ep yt ed senahc seiarv sel rus tnoresp setniartnoc se m m sec euq zetoN .enilteg edohtm al tnaruocer ne tluci ffid ettec renruotnoc tne mmoc snorrev suon ,22 ertipahc ud 3.2 ehpargarap u A .engil ed ni f enu uo ecapse nu tnamre fner enahc enu eril ed elbissop sap cnod tsen li te C el yts ed senahc sel ruop tuav euqramer etteC .sruet -araps sertcarac sed rap setimild tnos nic rus seul snoitamro fni sel euq snoleppaR 1

.sertcarac ed xuaelbat sed silitu tnemeuqissalc snova suon ,icI .reivalc ua seul senahc sel rillieucca ruop stne mecalp me sed revresr d snova suoN
C elyts ed senahc ed erutirc te erutceL
quelle est votre ville : Paris donnez votre nom et votre prnom : Dupont Yves bonjour cher Yves Dupont qui habitez Paris

: emmargorp ed elpmexe tec ertno m el em moc C el yts ed senahc xua tnessigrals stil -ibissop seC .esab ed sep yt stner ffid sed sruelav sed narcl rehcif fa te reivalc ua eril tne m - moc uv jd snova suon ,sellennoitasrevnoc seitros-sertne xua rcasnoc ertipahc el snaD

172

2 Lecture et criture de chanes de style C

Les chanes de style C CHAPITRE 9

#include <iostream> using namespace std ; main() { char nom [20], prenom [20], ville [25] ; cout << "quelle est votre ville : " ; cin >> ville ; cout << "donnez votre nom et votre prnom : " ; cin >> nom >> prenom ; cout << "bonjour cher " << prenom << " "<< nom << " qui habitez " << ville ; }

cin >> setw(LG_nom) >> nom >> setw(LG_prenom) >> prenom ; cout << "donnez votre nom et votre prnom : " ; const int LG_nom = 20, LG_prenom = 20 ; char nom [LG_nom+1], prenom [LG_nom+1] ; .....

se uqrameR

: tn or es t ne m et i ci lpx e s s il ai ti n i n on ser t car ac 21 s el ,s ac r ei nr ed e c s na d ,e uq s ap z ei lb uoN : )0\ ton orz edoc el sap tnattemon ne( sertcarac e d n o i t a r m u n e n u r a p e s i l a r h c e d n o i t as il ai t i n i e n u t n el a vi u q t n e m et i a fr a p ar es al e C : er irc z err u o p s u o v , is ni A . et n ats n oc e n a h c e n u d e d i a l s er t c ar a c e d u a e l b a t er t o v r es il ai t i n i es ir ot u a s u o v C , e h c n a v er n E .) " r u o jn o b " enahc etnatsnoc al ruetalip moc el rap eubirtta esserdal ed tiarigas li ,ici( ruelav ertua enu reubirtta iul ed noitseuq sap cnod tsen li ; eulavl enu sap tsen ec ; hc uaelbat ua eub -irtta a ruetalipmoc el euq esserdal dnopserroc iuq ruetniop etnatsnoc enu tse hc ,te ffe nE : erneg ud noitatce ffa e n u t n a vir c n e , h c s n a d e t n a ts n o c e n a h c e n u r er f s n art t n a t u a r u o p s a p z err u o p e n s u o v : elpmexe rap zeralcd suov is ,sio fetuoT.ser - t cara c e d x ua el ba t s e d s n a d C el y ts e d s e n a h c se d re ca l p t n e m m o c r i o v e d s n o n e v s u o N
char ch[20] ; ch = "bonjour" ; char ch[20] = "bonjour" ; char ch[20] = { b,o,n,j,o,u,r,\0 } char * ville = new char [20] ; ..... cin >> ville ; cout << "bonjour\n" ;

: i s n i a r e d c or p u p s n o i r u a s u o n , e l l i v a l r u o p , e l p m e x e r a P . s t n e m e c a l p m e s e d t n e m e u q i m a n y d r e u o l l a t n e m e l a g u p s n o ir u a s u o N . s e n a h c s e l r e g n ar y r u o p s er t c ar a c e d x u a e l b a t s e d s i l i t u s n o v a s u o n , i c I 4 .lun e d o c e d er t c ar a c n u d er t n o c n e r a l u q s u j , e s s e r d a e t t e c e d r i t r a p s v u or t s e r t c a r a c s e l s u o t t u o c t o l f e l r u s e i o v n e i u q < < r u e t ar p o l e s i m s n ar t t s e e ss e r d a n os , n o i t u c - x e l e d sr o L . " r u o j n o b " e n a h c a l r u o p vr es r ts e t n e m e c a l p m e n u , n o i t a l i p m o c a l : er n e g u d s n o i t c u r ts n i s e d s n a d s e t n a t s n o c s e n a h c e d r u e l a v a l t n e m e v i t i u t n i h c i f f a s n o i v a s u o n , i c i u q s uJ 3 . t o l f e l r u s e t p m o c n e s ir p s e r t c a r a c e d e r b m o n e l t n a t i m i l n e , e u l n o i t a m r o f n i e n i a h c or p a l r u s e u q e t r o p e n e l l e ,s a c e c s n a d , t e ) g n i r t s e p y t e d u o C e l y t s e d( s e n a h c s e l t n e m e u q i n u e nr e c n o c w t e s e i nr u o f r u e l a v a l , t n e m er u e i r t l u z e rr e v e l s u o v e m m o C


173

3.1 Initialisation de tableaux de caractres

3 Initialisation de tableaux par des chanes


3 - Initialisation de tableaux par des chanes

.) ni o l s u l p u e p n u s n or elr a p er s u o n t n o d , s % t a mr o f e d e d o c u a , e n a h c e n u d egahci ffal ruop ,leppa tia f snova y suon( noitaralcd ettec tna yolpme elp mexe nu icioV .senahc 7 sec ed sesserda 7 sel ceva ruoj uaelbat ud noitasilaitinil te eniames al ed sruoj 7 x u a t n a d n o ps err o c s et n at s n o c s e n a h c 7 s e d n o it a r c a l si o f a l c n o d esi l a r n o i t ar a l c d e tt e C : s n a d e m m oc ,sr u et n i o p e d u ae l ba t nu resilarng es tuep aleC .enahc enu rus ruetniop nu retce ffa ,elpmexe rap ,tiavuop nol euq esserda enu ne ruetalipmoc el rap etiudart tiat etnatsnoc enahc enuuq uv snova suoN
char * jour[7] = { "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche" } ;

...wen rap uolla enoz al ed unetn oc e l r e i f i d o m s n a s , h c r u e t n i o p u d r u e l a v a l r e i f i d o m t n e i v er e l l e s i a m , e l a g l t n e i v e d : n o i t a t c e f f a l e u q n e i b ar e t o n n O . e t n a t s n o c e n a h c e n u d e d i a l r e s i l a i t i n i l e d t i l i b is s o p a l e d s u l p es o p s i d e n n o : t n e me u q i m a n y d u ol la t n e me ca l p m e n u esi l it u n ol i S


char = ch = new ch[20] ; ch = "bonjour"

.)ni f ed 0 ud unet etpmoc(

: e uq ellet noitcurtsni enu erircd elbissop tse li ,noitasilaitini enud engapmocca tse elleuqsrol ,noitaralcd as ed srol uaelbat nud noisnemid al ed noissimol esirotua ++C em moc ,sulp eD . e t n a n g s ul p t n e m e tt e n ti ar es 0\ er t c ar a c u d n ois si m o l ,s a c e c s n a d : ) e u q it a m ot u a ess a l c e d u a el b at n u r u o p( s er i ot a l a ti os ; )! sertcarac 02 inruo f tiava nol is fuas( evarg sap )ici( tiares en 0\ ertcarac ud nois -simol ,sac ec snad ,euq tiov no : )euqitats essalc ed uaelbat nu ruop( orz ssilaitini tios
174
Les chanes de style C CHAPITRE 9

3.2 Initialisation de tableaux de pointeurs sur des chanes

#include <iostream> using namespace std ; main() { char * jour[7] = { "lundi", "mardi", "mercredi", "jeudi", "vendredi", "samedi", "dimanche" } ; int i ; cout << "donnez un entier entre 1 et 7 : " ; cin >> i ; cout << "le jour numro " << i << " de la semaine est " << jour[i-1] ; }

e uqrameR

sert carac 8

ed ,egassem mmon ,uaelbat nu evresr ic-elleC


char message[] = "bonjour" ;

-ac m ec erircd ruop sio frap silitu erocne ednammoc ed engil al ed stnemugrad emret el o d( e m m arg orp u d t ne m ec n al e d ed n a m mo c al s e ic o ssa sru el a v ed t i gas l i ,) x inU uo SOD slet( etxet edom ne tnannoitcno f stne mennorivne sel snaD .srgtni uo seuqihp -ar g st i d st n e m e n n or i v n e s e d r u o p s u ne m e d se d na m m o c e d r i g as t ue p l I . t ne m e n n or i v n el e d d n e p d s n o i t a mr o f ni s e c r i nr u o f r u o p r u et asi l it ul r a p s il it u e msi n a c m e L . t n e m e c n al nos ed srol em margorp ua sinruo f stnemugra sed sruelav sel rerpucr tuep niam noitcno f a L

.s n oi ta u tis x u e d s e l e l ut i p a c r s r p a - i c a m h c s e L .) 1. 1 e h p ar g ar a p el s n a d r d a t i a s i a f e l e m m o c ( etnatsnoc enahc enu tnangisd xue ertned nucahc ,sruetniop tpes ed uaelbat nu eria ffa snova suon ,icI .etnedcrp al ceva eudno fnoc ert sap tiod en etnesrp noitautis a L

C elyts ed senahc sed rus sruetniop ed uaelbat nud noitasilaitinI


donnez un entier entre 1 et 7 : 6 le jour numro 6 de la semaine est samedi

4.1 Comment passer des arguments un programme

4 Les arguments transmis la fonction main


ch jo u r b o n m j a l o u r m u n d e d r i

4 - Les arguments transmis la fonction main

r i \0 \0

\0

\0

e uqrameR

175

: )noisnetxe enud ivius te eriotrepr ed uo nimehc ed noitacidni enud dcrp ert arruop li ,elp mexe rap ; uep euqleuq rer ffid arruop tatlusr ne hci ffa em margorp ed mon el ,snoitatne mlp mi sel tnavius( etxet edo m ne tnemennorivne nu s n a d t ne m ec n al e d se t na d n o pserr oc se d n a m m o c s el er t t n ei arr u o p e u q ec sar g n e t o n s n o v a suon te ,MOCGI L tiam mon es emmargorp erton euq soppus snova suoN .noitucxed selp - mexe siort ed ngapmocca tse lI .stilibissop sec tnasilitu emmargorp ed elp mexe nu icioV .c te ; )1gra enahc al ed cnod tiarigas li ,elpmexe erton snad( ertmarap dnoces el ,]1[vgra esserdal ; )tset enahc al ed cnod tiarigas li ,tnedcrp elpmexe erton snad( em margorp ud mon el erid--tsec ,ert marap reimerp el ,]0[vgra esserdal ; sert marap ed latot erbmon el ,grabn snad : s n or d n ei t b o s u o n ic-iulec rap niam noitcno f al ed ett-nel tnaalp mer ne ,isniA .sertmarap sed nucahc tnadnopserroc enahc al tnangisd r u et n i o p e u q a h c ,sr u e t ni o p e d u a e l b a t n u d ess er d a l ar es n i a m r a p u er t n e m u gra dn o ces el ; )er t m ara p n u ruop emm-iul etpmoc em margorp ud mon el( edna mmoc ed engil al snad sinruo f sert mar -ap ed latot erbmon el aretnesrper li te tni ep yt ed ares niam rap uer tnemugra reimerp el : s e t n a vi us s n oi t n e v n o c s e l n ol es t i a f es ) e m t s y s e l r a p e s il a r( n i a m n oi t c n o f al noissimsnart rue L .)secapse sed rap sraps tnos sli ,e mmargorp ud tne mecnal ed edna m - moc enu snad sinruo f tnos sliuqsrol( C el yts ed senahc sed sruojuot tnos sertmarap seC
main (int nbarg, char * argv[])

: 3gra te 2gra ,1gra stnemugra sel tnatte msnart iul ne , tset m mon em margorp ud noitucxel ednamed nol o elpmexe nu iciov nE .)emsin
176
Les chanes de style C CHAPITRE 9

4.2 Comment rcuprer ces arguments dans la fonction main

#include <iostream> using namespace std ; main (int nbarg, char * argv[]) { int i ; cout << "mon nom de programme est : " << argv[0]<< "\n" ; if (nbarg>1) for (i=1 ; i<nbarg ; i++) cout << "argument numro " << i << " : " << argv[i] << "\n" ; else cout << "pas darguments\n" ; } test arg1 arg2 arg3

ertd elbitpecsus( noitamro fni enu isnia tnecalp iuq snoitcno f sel setuot ,te ffe ne ; seuqsir slet ed ertnoc rinu mrp suov ed noa f enud tnadnepec zeresopsid suov ,tia f nE .zeiluov suov euq ec ed led-ua tirc a elleuq ertannocer ed noitcno f al te mrep en neir ,te ffe nE ! tiordne tec ecalp ed tnem masi ffus ed resopsid ed uvrp riova li-t-arduaf erocnE .eipoc al eriaf es arved o tnemecalp mel ed esserdal te reipoc enahc al ed esserdal )ypcrts ,ici( eul -uov noitcno f al arinruo f no ,ertua nu tne mecalp me nud enahc enu reipocer ruop ,xueiM . * ra hc ep yt ed sruetniop xued )pmcrts ,ici( enrecnoc noitcno f al arttemsnart no ,senahc xued rerapmoc ruop ,isniA .ertcarac rei merp nos rus ruetniop nu tnemsicrp sulp uo ,esserda nos tnemelues siam ,enahc enud ruelav al ertte msnart siamaj cnod tuep en nO .noitatnesrper ed noitnevnoc enu tnemelp mis siam ,eritne trap ep yt nu sap eutitsnoc en C el yts ed enahc a L

.01 ehpargarap el rus euq isnia ,ehpargarap ec rus lid puoc nu sniom ua retej ed e m m dnauq snolliesnoc suov suoN .)leppa sap aref yn egarvuol ed etius al( nioseb ed sac ne tne merueirtlu edroba ert tnemelleutnev tuep elle ; evitatluca f cnod etser stnavius sehpargarap sed edutL .sedoc xuaevuon ed erutircl snad iglivirp ert cnod arved li te ,elbai f sulp puocuaeb e mrof enu suos ,stilibissop semm sel arir ffo gnirts essalc ep yt el ,noitcudortni ne tid snoval suon emmoC .C el yts ed senahc ed noitalupinam ed snoitcno f sesuerb mon ed C ud tirh a ++C

ednammoc ed engil al ed stnemugra sed noitarpucr ed elpmexE


on nom de programme est : C:\Documents and Settings\claude\cbproject\ConsoleApp46\windows\Debug_Build\ConsoleApp46.exe argument numro 1 : donnees.dat argument numro 2 : sortie.txt argument numro 3 : 25 argument numro 4 : septembre argument numro 5 : 2006

5.1 Ces fonctions travaillent toujours sur des adresses

5 Gnralits sur les fonctions portant sur des chanes de style C


mon nom de programme est : C:\Documents and Settings\claude\cbproject\ConsoleApp46\ windows\Debug_Build\ConsoleApp46.exe argument numro 1 : parametre mon nom de programme est : C:\Documents and Settings\claude\cbproject\ConsoleApp46\ windows\Debug_Build\ConsoleApp46.exe pas darguments

5 - Gnralits sur les fonctions portant sur des chanes de style C

177

: elpmexe tec ze yoV .spmet rei merp nu snad rongi ert tuep ehpargarap eC
.B .N

. t l u c i f fi d s n as s er t u a x u a l e p p a eri a f ri o v -uop ed erttemrep suov tneiarved ,exennal euq isnia ,etiusne seinruof snoitacidni se L .)sesil - it u s u l p s e l t n os e c( ei p o c e d t e n o i t a n t a c n o c e d s n o it c n o f s e l l i a t d n e dr o b a d s n or e t n es r p s u o v s u o n ,se n a hc s el re l u pi n a m e d e ll er ut a n er u g n o a f e tt ec c e va res ira i li ma f s u o v r u o P . et n a t l u s r e n a h c a l e d r u e u g n o l al r e ti mi l ed te mrep enul tnod setnairav xued arevuort no ,erocne L .)...urapsid a ni f ed 0\ nos lues ,tia f ne( enahc euq tnat ne etiurtd cnod evuort es elleuqal ,eri merp al ed ni f al ednoces al t n a t u o j a n e e u n e t b o ti ar e s et n at l us r e n a h c al e u q t n e m er i ar ti br a t n a n e v n o c n e s ess er d a xued tneti mil es snoitcno f sec ,tia f nE ! sesserda siort tne mugra ne riovecer cnod tneiarved sellE .sertua xued ed ritrap enahc ellevuon enu tnerc snoitcno f sellet ed ,iroirp A .sen -ahc xued ed tuob tuob esi m ed erid--tsec ,noitantacnoc ed setid snoitcno f sed etsixe lI

: c e v a , e m m e d ; 7 ar d u a v : n oi s s e r p x e l , e l p m e x e r a P .rueugnol al snad etp moc ne sirp sap tnatn ertcarac ec ,lun edoc ed ertcarac rei merp uauqsuj euqidni esserdal siuped svuort sertcarac ed erbmon ua tnemellerutan tuot dnopserroc rueugnol etteC .tnemugra ne esserdal simsnart a iul no tnod enahc enud rueugnol al tatlusr ne tinruo f nelrts noitcno f a L
strlen ("bonjour")

.enrecnoc esserdal sipoc tne mevitce ffe sertcarac ed erbmon el reti mil ed tnatte mrep eriatne mlppus tnemugra nu tnadssop ertual ,elrtnoc snas tnalliavart enul : setnairav xued tnedssop ennod esserdad tnemecalp me nu )euqnocleuq rueugnol enud
178
Les chanes de style C CHAPITRE 9

6.1 La fonction strcat

6 Les fonctions de concatnation de chanes


5.3 Le cas des fonctions de concatnation
. 5 ar d u a v
strlen (adr) char * adr = "salut" ;

: n oi s s e r p x e l

5.2 La fonction strlen

: n oi ta si li t u d e l p m e x e n u i ci o v n E .) tub( evirrad enahc al sntacnoc tnores iuq ser -tcarac ed erbmon el rus elrtnoc nu ertuo ne tnar ffo ne tacrts elbalbmes noaf ed elliavart : isnia etnesrp es leppal tnod noitcno f etteC
strncat (but, source, lgmax) strcat ( but, source ) avant : bonjour aprs : bonjour monsieur // prototype dans cstring

.re ntacn oc i ul eitrap al ri ovecer y r u o p t n a s i f f u s t i os e n a h c e r i m e r p a l r u o p vr e s r t n e m e c a l p m e l e u q er i a s s e c n ts e l I 2 .eluord lam tses noitarpol euqsrol lun ruetniop el ; )ruetniop etnatsnoc enu sruelliad tsec ei fidom t sap an elleuqal( 1hc ed ellec euq ertuad neir tsen esserda ettec ; eluord neib tses noitarpol euqsrol ,tnemugra ne seinruof senahc xued sed noitantacnoc al tnadnopserroc enahc al ed esserdal : tatlusr ne tinruo f tacrts noitcno f a L 1

. ni f e d er tc ara c e l c a f fe ri o va ne srpa ,)tub( erimerp al ed etius al )ecruos( enahc ednoces al eipocer noitcno f etteC : isnia etnesrp es tacrts ed leppaL . t n e m e l a it i n i e c a l p y n o u q e n a h c etnatsnoc al euq dnarg sulp tne mecalp me nu revresr ed te mrep erimerp a L .2hc te 1hc sen -ahc xued sed enucahc ed )noitasilaitini ceva( snoitaralcd xued sel ertne ecner ffid al zetoN tacrts noitcnof aL
// prototype dans cstring

6.2 La fonction strncat


se uqrameR
#include <iostream> #include <cstring> // pour strcat using namespace std ; main() { char ch1[50] = "bonjour" ; char * ch2 = " monsieur" ; cout << "avant : " << ch1 << "\n" ; strcat (ch1, ch2) ; cout << "aprs : " << ch1 ; }

6 - Les fonctions de concatnation de chanes

179

. f it is op tse
strcmp ("paris2", "paris10")

: t e fi t a g n t s e

: ) n o i t a t n e m l p mi l ti os e u q el l e u q( el p m e x e r a P . 2 e n a h c < 1 e n a h c is e vi ta g n ; )s er tc ara c e d e ti us e m m al tnemetcaxe tnenneitnoc senahc xued sec is erid--tsec( 2enahc = 1enahc is ellun ; )s er t c ar a c s e d e d o c e l r a p i n i f d er dr o l ed snes ua ,2enahc srpa evirra 1enahc is erid--tsec( 2enahc > 1enahc is evitisop : t na t e m m oc ei n i f d er i t n e r u el a v e n u ti nr u o f e l l e t e , es s er d a l ti nr u o f i ul n o t n o d s e n a h c x u e d er a p m o c
strcmp ( chane1, chane2 ) // prototype dans cstring

: n oi t c n o f a L .edoc ruel rap sini fd sertcarac sed erdrol tnasilitu ne senahc xued rerapmoc tuep nO .spmet rei merp nu snad rongi ert tuep ehpargarap eC
.B .N

.2.4 noitces al etnesrp nelrts noitcnof al rap ardneitbos erinred etteC .evuort ys i u q e n a h c al e d e t n ar u o c r u e u g n ol al t e e cir t p e c r e n o z a l e d el at o t e ll i a t al ert n e e c n er - ffid al tnat e mmoc reipocer sertcarac ed lamixa m erbmon ec arenimretd no ,tnem meuq -rF .elani f enahc al ed rueugnol al rus tne metcerid sap etrop en elrtnoc el euq neib zetoN tacnrts noitcnof aL
avant : bonjour aprs : bonjour monsi

180

7 Les fonctions de comparaison de chanes

Les chanes de style C CHAPITRE 9

strcmp ("bonjour", "monsieur")

#include <iostream> #include <cstring> // pour strncat using namespace std ; main() { char ch1[50] = "bonjour" ; char * ch2 = " monsieur" ; cout << "avant : " << ch1 << "\n" ; strncat (ch1, ch2, 6) ; cout << "aprs : " << ch1 << "\n" ; }

: snoitautis xued sel ertsulli tnavius elp mexeL .sap ares el en li ,eriartnoc sac el snad ,siaM .ipocer tnemevitce ffe ares )0\( ni f ed ertcarac nos ,elamixa m rueugnol ettec erueir fni tse ecruos enahc al ed rueugnol al is ,euq neib zetoN .xamgl eritne noisserpxel rap ss -icrp sertcarac ed erb mon ua eipocer al tnati mil ne ,ypcrts eugolana erinam ed edcorp : no i tc n o f a L . t u b e n a h c al e d es s er d a l t a tl us r e m m o c ti nr u o f n o i t c n o f et t e C . fitsep metni tnemesarcd eniep suos ,reipocer enahc al rillieucca ruop etnasi f fus tios tne mecalpme dnoces ud elliat al euq eriassecn tse li ,erocne L .nitsed esserdad tne mecalp mel snad ecruos esserdal eutis enahc al eipocer
strcpy ( but, source ) // prototype dans cstring strncpy ( but, source, lgmax ) // prototype dans cstring

: no i tc n o f a L .s p m e t r ei m er p n u s n a d r o n gi er t t u e p e h p ar g ar a p e C
.B.N

.)s e u qi t b a h p l a s er t c ar a c sl u es s e l r u o p( s e l u cs u n i m t e s el u c s u j a m ert n e e c -ner ffid al ed etpmoc rinet snas sia m ,pmcnrts te pmcrts e mmoc tnemevitcepser tnelliavart
stricmp ( chane1, chane2 ) strnicmp ( chane1, chane2, lgmax ) // prototype dans cstring // prototype dans cstring

: e lp m e xe r aP .xamgl reitnel rap suqidni sertcarac ed la mixam erb mon ua nosiarapmoc al etimil elle siam ,pmcrts emmoc elliavart
strncmp ( chane1, chane2, lgmax ) // prototype dans cstring

8 Les fonctions de copie de chanes

#include <iostream> #include <cstring> // pour strncpy using namespace std ; main() { char ch1[20] = "xxxxxxxxxxxxxxxxxxx" ; char ch2[20] ;

: s n o it c n o f x u e d , n i f n E . or z t u a v : e uq s i dn at fi ti sop ts e

strncmp ("bonjour", "bon", 2) strncmp ("bonjour", "bon", 4)

: no i tc n o f a L

8 - Les fonctions de copie de chanes

181

.se m m ar g or p se d t ni o p u a e si m e n n o b a l eri u n t u e p e c n ass i a n n o c m a l t n o d s i a m ,s e t is u s n i o m s n oi t a u tis s e d t n a nr e c n o c noitamro fnid stnemlpmoc seuqleuq ici icioV .setnaruoc sulp sel snoitautis xua sti mil se m - mos suon suon ,tralc ed icuos rap ,tnadnepeC .C el yts ed senahc sel erg ++C tnod elleic -i fitra erinam al ed secneuqsnoc sed erb mon nob ni maxe snova suon ,ertipahc ec snaD

.ennoitne m enahc-suos al ed etlp moc ecnerrucco erimerp al , enahc snad ,ehcrehcer .nnoitne m ertcarac ud ecnerrucco erinred al cnod tinruo f ellE .ni f al ed ritrap enrecnoc enahc al tnarolpxe ne sia m ,rhcrts euq tnemetiart emm el esilar .nnoitne m ertcarac el tarappa o noitisop erimerp al , enahc snad ,ehcrehcer
epyt e d ru et ni op nu

: selapicnirp sel icioV .eriartnoc sac el snad lun ruetniop el te t a t l u s r e m m o c t n e s ,s cc us e d sa c ne e hcr e hc n oi ta mro f n il r us * r a h c -s i nr u o f se ll E .) e n a h c-s u os sr o la e m m o n( C e l yt s e d e n a hc ert u a e n u d u o er t car ac n u d C el yts ed enahc enu snad ecnerruccol ed ehcrehcer ed seuqissalc snoitcno f sed evuort nO .spmet rei merp nu snad rongi ert tuep ehpargarap eC
.B .N

182

10 Quelques prcautions prendre avec les chanes de style C 9 Les fonctions de recherche dans une chane
ypcnrts te ypcrts : senahc ed eipocer ed snoitcnof seL
donnez un mot : bonjour bonjouxxxxxxxxxxxxx

Les chanes de style C CHAPITRE 9

strstr ( chane, sous-chane ) strrchr ( chane, caractre ) strchr ( chane, caractre ) donnez un mot : bon bon }

cout << "donnez un mot : " ; cin >> ch2 ; strncpy (ch1, ch2, 6) ; cout << ch1 << "\n" ;

// prototype dans cstring

// prototype dans cstring // prototype dans cstring

.s u lu o v ser t cara c e d n ois se cc us a l g n ar a li leuqel snad tne mecalp me nud esserdal rap "ruojnob" noitaton al ecalp mer ruetalipmoc el : euq ellet noitcurtsni enu snad ,euq uv snova suoN
char * adr = "bonjour" ; cout << adr+10 ; char * adr = "bonjour" ; strcat (ch1+10, ch2) ; strcat (ch1+2, ch2) ; bonjoursieur strcat (ch1, ch2+4) ; strcat (ch1, ch2) ; strlen (adr+2) char * adr = "bonjour" ;

! ni o l s rt r e u ti s e s t ne m el l e u t ne v arr u o p ni f e d or z e l te se l bi si vr p u e p z ess a s er tc ara c s e d ar e h ci f f a n o s ia M


// affiche des caractres partir de ladresse adr+10 // tant quon na pas trouv de zero de fin !

: c e v a , ni f n E .1hc esserdad enahc al ed srohed ne utis tnemecalp me nu resarc tiardneiv no : seuqihportsatac tnemetten tneiares sesohc sel : ce v a , e hc n a v er n E ! nif ed 0 emm ud ritrap entacnoc sruojuot ares 2hc euqsiup )rueisnom ruojnob ( laitini e mmargorp el cevauq tatlusr e m m el ardneitbo no : r a p n o it c ur ts ni e m m et t e c s i o f et t e c e c al p m er n ol is , t n e m es u e ir u c s ul P : tnemelp mis srola tiarehci ffa emmargorp e L : rap

: recalpmer ed elbissop tiaf tuot tiares li ,1.5 ehpargarap ud em margorp ed elpmexel snad ,em m eD .)2+rda ne tnanemmoc enahc al ed rueugnol( 5 ruelav ruop tiarua elle : etpecca tiares : e u q e ll et n o iss er p x e e n u : n o i t ar a l c d et t e c c e v a , el p m e x e r a P . e n a h c e d t u b d e d es s er d a d e c i f f o eri a f sr u oj u ot t u e p * r a h c e p y t e d e s s e r d a etuot ,tia f nE .tubd nos ruop uvrp tsen elbarapmoc ed neir ,ehcnaver ne ; enahc enud nif al ed noitatnesrper ed noitnevnoc enu tnemevitce ffe etsixe li ,uv snoval suon em moC

10.2 Les risques de modification des chanes constantes


: etpecca ares etnavius noitcurtsnil

10.1 Une chane de style C possde une vraie fin, mais pas de vrai dbut
10 - Quelques prcautions prendre avec les chanes de style C

183

.) t n a t s n o c e ts e r h c u a e l b a t u d u n e t n o c e l e u q r i o l u o v e d n os i ar e n u c u a s n o v a n s u o n( e t i c i l t n e m e t i a fr a p t s e : e u q e l l e t n o i t c ur t s n i e n u r a p ,hc e d st ne ml sed n ul ed n oitaci fido m etu ot ,reilucitrap nE .hc uaelbat ud sertcarac sr e i m er p s e d n o i t a s i l a i t i n i l t n a a l p m er er u t i r c d t i l i c a f e n u u q t s e n , i c i , e l l e u q a l ) ". . . " ( e y o l p m e n o i t a t o n a l r g l a m i c e c t e , e t n a t s n o c e n a h c e d s a p t a r a p p a n l i : euq ellet noitaralcd enu snaD
char ch[20] = "bonjour" ; *(ch + 3) = x ;

e uqrameR

... t ne m m e d c r p tir c d s us se c -orp el rap ei fidom revuort es neib srt tuep tuoc tol f ua esi msnart enahc al ,snoitidnoc sec snad ; siof enuuq rerc al en tnevuep sruetalipmoc sniatrec ,em margorp nud stne mecalpme srueisulp ne tarappa )ruojnob( etnatsnoc e m m ettec euqsrol ,tnadnepeC .esserda nos scca sap snovan suon euqsiup elbissop erug tsen noitaci fidom as euq resnep tiarruop no ,icI : euq ellet noitcurtsni enu snad tne melag tarappa enahc etnatsnoc enuuq snolangiS .)rda( stup euq ellet noitcurtsni enu tnatucxe n e r e t a ts n o c e l , e l p m e x e r a p ,s n oirr u o p s u o N ! r u o j x o b u o r u o j n o x n e r u o j n o b e t n a t -snoc erton ed noitaci fido m al tituoba nol euq etros ed ,tnetpeccal sruetalipmoc ed puoc -uaeb ,euqitarp nE .tnatsnoc ed esohc euqleuq ed noitacifidom al tidretni e mron al ,iroirp A : euq ellet noitatce ffa elanab enu rap sertcarac sec ed nul rei fido m ed etnet nol is eriudorp es av iuq ec redna med es tuep no ,snoitidnoc sec snaD
184
Les chanes de style C CHAPITRE 9
*adr = x ; * (adr+2) = x ; /* bonjour va-t-il se transformer en xonjour ? */ /* bonjour va-t-il se transformer en boxjour ? */ cout << "bonjour" ;

. eru tc ur ts ep yt u d se ll ec e d se h corp sr t tn os n oi ta si li t u n os t e n oi tar al c d as e u q ecr a p e u q e i fi ts uj e s e n er ti p a h c ec s na d )e vi dr at( n o it at -nesrp as ,erocne L .reitne ep yt ed reilucitrap sac nud tigas li ,noitar mun ep yt ua tnauQ . ert -ipahc emm nu snad edut ruel ei fitsuj iuq tseC .nisiov noitasilitud edom nu te enu mmoc exatn ys enu rap seil tnetser selle ,snoinu te serutcurts ertne tnatsixe setnediv secner ffid sel rglaM .stner ffid sep yt ed selbairav sed rap eriomm tnemecalpme emm nu regatrap eriaf ed ne yom nud tigas lI .snoinu sed emmon liuq ec rini fd ed temrep ++C ,trap ertuaD .essalc ed reilucitrap sac nu areutitsnoc elleuq etros ed ,)sed -ohtm( serbmem snoitcno f ed etod ert tnemelag tuep erutcurts ellet enuuq snorrev suon te ++C ed .O.O.P ed stilibissop sel snoredroba suon ,tnavius ertipahc el sD .erutcurts al ed n i es u a m o n n os r a p s i a m , n o it is o p e d n oi t a ci d n i e n u r a p s u l p n o n ,si o f e tt e c , ar e f es ) p m a h c mmon( erutcurts al ed tne ml euqahc sccaL .stner ffid sep yt ed ert tnavuop sruelav ed elbmesne nu mon lues nu suos rengisd ed ertte mrep suon av ,elle tnauq ,erutcurts a L .ecidni nu rap erper tnat selle ertned enucahc ,ep yt emm ed sruelav ed el b m es ne n u m o n l ues n u s u os r e n g is d e d t ia tt e mre p u ae l ba t el t n e m m o c u v j d s n o va s u o N

Les types structure, union et numration

10

.s u l p a r t a r a p p a n t u g i b m a e n u c u a u q e tr o s e d , e p y t u d s e l b a ir a v s e l r u o p t e j b o d t e e p y t e l r u o p es s a l c e d ar e lr a p n o s i o f e t t e c s i a m ,s e ss a l c s e l r u o p ar e t s i x e n o i t c ni t s i d e m m a L . e p y t u d s e l b a ir a v s e d t i o s ,) e l d o m( e p y t u d m o n e l t i os r e n g i s d r u o p er ut c ur t s t o m e m m e l s n o r es i l i t u s u o n , ar e ts i x e n t u g i b m a e n u c u a e u qs r o l , t n e v u o S 2 . e m y n o n a er u t c ur t s e d e m r e t e l r a p n o i t a u t i s e t t e c t n e v u os e n g -isd nO .ep yt ec ed selbaira v sertuad etius al rap reralc d sap tian nol euq ,rs neib ,n oitidnoc ,)gerne( ep yt ed mon el ertte mod elbiss op e mm tse li ,sac reinred ec snaD
struct enreg { int numero ; int qte ; float prix ; } art1, art2 ; struct enreg { int numero ; int qte ; float prix ; } ;

: e l p m ex e te c s n a d e m m o c n o it c ur ts n i el u e s e n u s n a d e p y t e c e d s e l b a ir a v s e d n o i t ar a l c d al t e er ut c urts e d e p y t ud noitini fd al repuorger ed elbissop tse liuq zehcas ,dna mmocer uep tios ec euq neiB 1 .gerne ep yt ud 2tra te 1tra stne mecalpme xued evresr

se uqrameR

: elb alb m es er i na m eD . t n a tt o l f nu te sreitne xued rinetnoc nitsed gerne ep yt ed 1tra mmon tnemecalpme nu evresr : e l p me x e r a P . t na d n o p -serroc ep yt ud selbairav sed reralcd snovuop suon ,erutcurts ed ep yt let nu ini fd sio f enU .)xirp te etq ,oremun( erutcurts al tnautitsnoc sp mahc sed nucahc ed ep yt el te mon el esicrp li te gerne ici elleppas ep yt eC .erutcurts ettec tnadnopserroc elbairav ed sap evresr en siam erutcurts ed )eldom( epyt nu tini fd ic-elleC
enreg art1 ;

: noitaralcd ettec drobad tuot ze yoV

186

1 Dclaration dune structure

Les types structure, union et numration CHAPITRE 10

enreg art1, art2 ;

.)4 ert ipa hc ud 51 ehpargarap ud uaelbat el tnemelleutnev ze yover( seshtnerap ed etissecn en sus -sed-ic snoisserpxe sed enucuauq etros ed ,evel srt tse . ruetarpol ed tiroirp a L

e uqrameR

1 t ra

erutcurts al ed oremun p mahc ud ruelav al ed etnemrcni


1

.2tra erutcurts al ed xirp pmahc ua etce ffa ares iuq ruelav enu til .1tra erutcurts al ed xirp pmahc ud ruelav al ehci ffa .1tra erutcurts al ed oremun pmahc ua
cout << art1.prix ;
51

.ep yt ec ed ser -alcd 2tra te 1tra selbairav sel te gerne erutcurts ep yt el tnasilitu selp mexe seuqleuq icioV .)sap sruelliad tnanevretnin emm-iul eldo m ed mon el( eldom el s n a d i n i f d t a li u q l e t p m a h c e d m o n u d i vi us ,) ( t n i o p r u e t a r p o l e d e r u t c u r t s el b a ir a v al e d m o n el er v i us t n as i a f n e e t o n es p m a h c n u d n oi t a n gi s d a L . t n a d n o ps err o c ep yt ud elbairav elleuq etropmin em moc lupina m ert tuep erutcurts enud pmahc euqahC
.

.erutcurts al ed elbmesnel rus elabolg erinam ed tnalliavart ne ; sp mahc ses ed nucahc rus tnemelleudividni tnalliavart ne : s er i n a m x u e d e d er u t c ur ts e p y t e d el b air a v e n u r esi l it u t u e p n o , + + C n E

. s i l i t u t n e m er ar t s e l i s i a m , + + C n e l a g l e ts e r n o i t ar a l c d e d er n e g e C
struct enreg art1, art2 ;

aL .

tcur ts

: erircs tnemeriotagilbo tiaved etnedcrp noitaralcd tom ud iolpmel tiatissecn erutcurts ep yt nud selbairav ed noitaralcd al ,C nE
C nE

2.1 Utilisation des champs dune structure

2 Utilisation dune structure

art1.numero++

cin >> art2.prix ;

r ue la v al e tc e f fa

art1.numero = 15 ;

2 - Utilisation dune structure

187

.)euqitamotua( seriotala uo )euqitats( orz slaitini ,etnadnopser -roc erutcurts elbairav al ed noitacollad essalc al tnavius ,srola tnores stnauqnam spmahc sel ; sruelav seniatrec erttemod elbissop tse lI .selugriv sed rap seraps sruelav ed etsil enud emro f al suos ,erocne l ,etnesrp es spmahc stner ffid sed noitpircsed al euq ze yov suoV : tnem medcrp ini fd ep yt el esilitu iuq noitcurtsni ettec snad em moc ,noitaralcd as ed srol esilaitini ert tuep erutcurts enu ,uaelbat nud ratsnil . e ti u s e d is n i a t e ,s p m a h c sr u el e d n u c a h c ar e u q il p p as e l g r a l , s er ut c urts s e d s e m m -xue tnos spmahc sniatrec iS .serialacs ed xuaelbat sed uo serialacs sed tnos iuq sp mahc xua euqilppas elgr ettec ,rueugir etuot nE .)lun ruetniop ,lun edoc ed ertcarac ,lun tnat - t ol f ,or z r ei t ne( or z s si la it i ni sp ma h c sr ue l t n ei o v euq it at s es sa lc ed ser u tc urts se L .seriotala sruelav s e d c n o d t n e n n ei t n o c s el l e : s e si l a i ti n i s a p t n os e n ) n o it c n o f e n u s el a c o l s er ut c urts s e l eitrap tnof tnod( euqita motua essalc ed serutcurts sel ,eticilpxe noitasilaitinid ecnesbal nE
g ern e

. s es s a l c s e d s a c e l s n a d e t i o l p x e t t u l p a r e s t i l i b i s s o p e t t e c , e u q i t ar p n E . e r u t c ur t s e p y t e d s e l b - a ir a v s e d s u q i l p p a t n o s s l i u qs r o l ). . . , * ,- , + e u q s l e t( s t n a t s i x e s r u e t ar p o s e d s n e s n u r e n n o d e d e l b is s o p t n e m e u q i r o h t ar e s l i , sr u e t ar p o d n o i t i n i f dr us a l e d s i a i b e l r a P 2 .xuaelbat ertne elabolg noitatce ffa enu resilar ed ,uaelbat nu tse iuq p mahc lues nu tnanetnoc erutcurts enu tne melleicifitra tnarc ne ,elbissop li-tse issu A .ser -utcurts ertne ,ertnoc rap ,tsel ellE .xuaelbat ertne elbissop sap tsen elabolg noitatce ffaL 1 .)elabolg erinam ed( erutcurts enu tnauqilppas sruetarpo slues sel tnos , & esserdad ruetarpol ,niol sulp uep nu snorrev el suon e mmoc ,te noitatce ffad ruetarpoL .stner ffid sep yt ed s mon xued suos seini fd siam ,eugolana erutcurts

enu tna ya selbairav sed ceva elbissopmi ares elle ,reilucitrap ne ; epyt ed mon emm el ceva seinifd t tno serutcurts sel is euq elbissop tsen elabolg noitatce ffa enuuq neib zetoN : t n e m es u e g at n a v a e c al p m er el a b ol g n o it at c e f f a el l e t e n U : erirc snorruop suon ,tnemmed -crp inifd gerne ep yt ud seralcd t tno 2tra te 1tra serutcurts sel is ,elpmexe raP .epyt emm ud ritrap eini fd erutcurts enud unetnoc el erutcurts enu retce ffad elbissop tse lI
art1 = art2 ; art1.numero = art2.numero ; art1.qte = art2.qte ; art1.prix = art2.prix ;

188

2.3 Initialisation de structures

2.2 Utilisation globale dune structure

Les types structure, union et numration CHAPITRE 10

enreg art1 = { 100, 285, 200 } ;

se uqrameR

t ed tneml reimerp el rus etniop 2t // ; t = 2t * tni ; } ..... { = ]5[t tni : snad emmoc ,sesserda sed reipocer sulp ua tuot tiavuop nO .ruetniop nu tse uaelbat ed mon nuuqsiup ,sruelav sed eipocer ed emrof al suos sniom uD .1

. t nes -siarappa sli elleuqal snad erutcurts al ed ep yt ud serutcurts sed rus sruetniop ed rigas e mm tuep lI ...erutcurts ,uaelbat ,ruetniop : euqnocleuq tne mulosba ep yt nud ert tuep erutcurts enud spmahc sed nucahc siaM .esab ed ep yt nud sp mahc siort euq tnatrop moc en elp mis erutcurts enu stimil se mmos suon suon ,serutcurts sed noitcudortnid selpmexe son snaD

. )r e i l u c i tr a p s a c e l p m i s n u sr o l a ar e u t i t s n o c er utc urts al tno d( essalc en ud sac el snad ,31 ertipahc u d 6 ehpargarap ua te ,11 ertip -a hc ud 2.7 e hpargarap ua s nord neiver y suoN .ruetcurtsnoc nud esopsid er utcurts al is euq eria f es srola arr uop en sp mahc sec ed noitasilaitinil si o fetuoT .erutcurts al ed ep yt e l s n a d s t n a t s n o c s p m a h c s n i a tr e c r i n i f d e d e l b i ss o p t n e m e l a g t s e l i , t n e m e u q ir o h T : e t e j er ar e s p m a h c n u d n o i t a c i f i d o m e d er u e ir t l u e v i t a t n e t e t u o t , u d n e t n e n e i B : s n a d e m m o c n oi t ar al c d as s n a d et n ats n o c er u t c urt s e n u r es il ai t i n i t u e p n O
struct enreg { int numero ; int qte ; float prix ; } ; const enreg REF = { 1, 10, 1.} ; REF.qte = 0 ; // interdit

: ) xuaelbat sel ruop sap tiatsixen tilibissop ettec( ep yt emm ed erutcurts ertua enud sruelav sel ceva esilaitini ert tuep erutcurts enu ,ni fnE .euqitats essalc ed serutcurts sel ruop )ruetalip moc el rap selbaluclac( setnatsnoc snoisserpxed rigas tne meriotagilbo arved l I .t n a d n o ps err o c p m a h c u d e p y t el c e v a n o it at c e f f a r a p el b it a p m o c e p y t n u d s n o iss er p x e sed ert tnorved ruesilaitini let nu snad seinruo f sruelav sel ,xuaelbat sel ruop em moC
1

3 Imbrication de structures
e uqrameR
struct enreg { ..... } ; main() { enreg e1 = { ..... } ; enreg e2 = e1 ; // les valeurs des champs de e1 sont recopis dans ceux de e2 ..... } void f (enreg s) { enreg ee = s ; // struture locale ee dans laquelle on recopie les champs de s }

3 - Imbrication de structures

189

: noitaralcd as ed srol ennos -rep ep yt ed )pme em mon( erutcurts enud noitasilaitinid elpmexe nu iciov , fitacidni ertit . u ae lba t ec ed esserdal tne msicrp sulp erid--tsec ,tnaruoc erutcurts al ed mon pmahc el etnesrper : nifnE .seriassecn sap ,erocne l ,tnos en seshtnerap sel ,sertua xued sed ellec erueir fni tnat & ruetarpol ed tiroirp al ,euq zetoN .tnaruoc erutcurts al ed serueh uaelbat ud tneml emiuqnic ud esserdal etnesrper : sr u el li a r a P .eyolpme erutcurts al ed mon pmahc ud ertcarac reimerp el etnesrper : e m m e D . s es ht n er a p e d i o l p m e l et i v e ti or d e h c u a g e d t i v -itaicossa ruel ,][ te . sruetarpo sed seuqitnedi stiroirp sel rglam ,euq zetoN .taolf ep yt ed tne ml nud tigas lI .eyolpme erutcurts al ed serueh uaelbat ud tneml emiuqnic el engisd : no i ta to n a L .tnaruoc sio m ud sruoj sed nucahc tnadnep seutce f fe liavart ed seruehd erb mon ; monrp ; mo n : s et n a v i us s n o it a mr o f ni s e l esir p ert n e e n u d yolpme nu ruop revresnoc ed tnette mrep serutcurts sec euq reniga mi ,elpmexe rap ,tuep nO .stnattol f 13 ed uaelbat nu tse iuq serueh ; sertcarac 02 ed uaelbat nu tse iuq monerp ; sertcarac 03 ed uaelbat nu tse iuq mon : s p m a hc si or t t n etr o p m o c s er i nr e d seC .tnaruoc te eyolpme sem mon serutcurts xued ruop stne mecalpme sel evresr ednoces a L
struct personne { char nom[30] ; char prenom [20] ; float heures [31] ; } . personne employe, courant ; employe.heures[4] employe.nom[0] &courant.heures[4] courant.nom

190

3.1 Structure comportant des tableaux

Les types structure, union et numration CHAPITRE 10

personne emp = { "Dupont", "Jules", { 8, 7, 8, 6, 8, 0, 0, 8} };

: s e t n a v i u s s n o it ar a l c d s el t i o S

: se t na vi us snoitaralcd xua redcorp srola snovuop suon ,ennal te sio m ua ,ruoj ua tnadnopserroc sp mahc siort tnatrop moc serutcurts sed semm-selle tnos setad sec iS .pucco etsop reinred el snad ertned etad al te ehcuab med etad al : setad xued eriudortnid nioseb sno ya suon ,1.3 ehpargarap el snad seini fd tnaruoc te eyolpme serutcurts son ed rueirtnil ,euq zesoppuS

: noitaralcd as ed srol ,ebruoc elbairav erton ed )elleitrap( noitasilaitinid elp mexe nu , fitacidni ertit ,iciov ,erocne L .tubd ed esserda nos engisd ,let emmoc ,te ,uaelbat ed ruetaci fitnedi nu tse ebru oc ni fnE .ebruoc uaelbat ud tneml emiuqnic ua tnadnopserroc tniop ep yt ed erutcurts al etnesrper : sr ue ll ia raP .ebruoc uaelbat ud i gnar ed tne mll ed x pmahc ud ruelav al engisd : no i ta t on a l ,e m m e D .snes ed sap tiaruan : noitaton al euq neib zetoN .rahc ep yt ed ruelav enud cnod tigas lI .ebruoc uaelbat ud i gnar ed tniop ud mon el etnesrper : noitaton al ,reitne nu tse i iS .tniop ep yt ud stneml 05 ed uaelbat nu tnemev -itce ffe etnesrper ebruoc euq sidnat ,erutcurts ed eldo m ed mon nu tse tniop euq neib zetoN .s e n n o dr o o c x u e d s es t e ) er t c ar a c( m o n n o s r a p i n i f d ti ar es iuq tniop ,nalp nud tniop nu retnesrper rivres ,elpmexe rap ,tiarruop tniop erutcurts a L
struct point { char nom ; int x ; int y ; } ; point courbe [50] ; courbe[i].nom courbe.nom[i] courbe[i].x courbe[4]

3.3 Structures comportant dautres structures

3.2 Tableaux de structures

struct date { int jour ; int mois ; int annee ; } ;

point courbe[50]= { {A, 10, 25}, {M, 12, 28},, {P, 18,2} };

: snoitaralcd sec ze yoV

3 - Imbrication de structures

191

.s n oi t c n o f sr u eis u l p r a p e si li t u ert is ni a t u e p el l e ; n oi t ar al c d as t i u s i u q e cr u os r e i h c i f u d ei tr a p a l e t u ot e d el b iss e c c a ts e el l e , n o it c n o f e n u d sr o h e d n e e ut is es el l e is ; n oi t cn o f e tt ec si upe d euq elbissecca tsen elle ,)niam noitcnof al sirpmoc y( noitcno f enud nies ua eutis es elle is : n o it ara lc d as e d t n e me ca lp m el e d d nep d er u tc urt s ed ep yt nud etrop al ,selbairav ed sruetaci fitnedi sel ruop tiudorp es iuq ec ed egamil

.++C ne esirotua tse iuq noitaralcd al snad tivisrucr enu cnod tarappa lI .* tnemele e p y t e d r u e t ni o p n u eri u d ort n i t u a f li , t n e m el e e p y t u d n o it i ni f d a l s n a d e u q t i o v n O
struct element { float x ; float y ; element * suivant ; } ;

: is i n a ri ni f d es tuep iuq erutcurts enu rap tnesrper ert tuep dun euqahC .tnavius dun el rus ruetniop nu te ,nalp nud tniop nud )taolf( sennodrooc sel : tiaretropmoc )dun ed tnevuos elrap n o( t n e m l e u q a h c e l l e u q a l s n a d e n a h c e tsi l e n u r e r c s n o it i a h u os s u o n e u q s n os o p p u S

: sn a d em moc selabolg snoitatce ffad tejbol eria f tnemelleutnev arruop ellE .etad ep yt ed erutcurts enud sio f ettec tigas lI .tnaruoc erutcurts al tnadnopserroc ehcuabmed etad al etnesrper .tni ep yt ed ruelav enud tigas lI .eyolpme erutcurts al tnadnopserroc ehcuab med ennal etnesrper : no i ta to n a L . in i f d t n e m m e d -crp )etad( erutcurts ed eldom nu rinevretni tia f noitaralcd ednoces al euq ze yov suoV
struct personne { char nom[30] ; char prenom[20] ; float heures [31] ; date date_embauche ; date date_poste ; } employe, courant ; employe.date_embauche.annee courant.date_embauche

192

4 propos de la porte du type de structure


3.4 Cas particulier de structure renfermant un pointeur
Les types structure, union et numration CHAPITRE 10
courant.date_embauche = employe.date_poste ;

.stejbo xua tnemerueirtlu tnoresilarng es sellE .1

.>- ruetarpol retnesrp suov aren ma suon erinred al ; serutcurts ed sac el snad stilibissop siort sec tnenneived euq ec sno yoV .ruetniop nu tnas -ilitu ne ecner fr rap noissimsnart enu relumis tuep no ,sulp eD .ecner fr rap uo ruelav r a p : n o it c n o f e n u d st n e m u gr a s e d n o iss i m s n art e d s e d o m x u e d e ts i x e li u q s n o v as s u o N
1

.p mahc nuuq mon e m m el retrop neib srt tuep elbairav enu ,snosiar se m m sel ruoP .etnadnopserroc erutcurts elbairav al ed mon ud tnaxi frp el n e r u o j u o t t i a f es er u t c urt s e n u d p m a h c u a s c c a l r a c , e ts i x e n n o is u f n o c e n u c u a , ti a f n E : e l p me x e te c s n a d e m m o c , m o n em m ed sp mahc sed rinetnoc tnevuep stner ffid serutcurts ed sep yt xued euq neib areton nO .ses sa lc e d sn o it ara lc d s el ru op e si li t u t ne m -maruoc sulp el ares iuq ellec sruelliad tseC .stnerhni tnos iul iuq sruerred seuqsir sel ceva seuqitnedi snoitaralcd sed noitacilpud al etiv edohtm etteC .nioseb a ne nol o ecruos sreihci f sel suot edulcni# rap eroprocni nol euq ett-ne reihci f nu snad noitaralcd ruel recalp ed lliesnoc tse li ,erutcurts ed sep yt sed regatrap ed eriassecn tse liuqsrol ,tia f nE . e v u or t e s li o e cr u os r e i h c i f u d n oi t a li p m o c al e d t n e m o m u a u q n oit -acifingis ed an li te ,esserdad noitamro fni elpmis enuuq sulp puocuaeb etnesrper erutcurts ed eldom nu ,rO .sneil ed noitidl ed uaevin ua sesserda sed rap scalpmer ertd selbitpec -sus sr ue tac i fit ne di se d e uqi lppas nretxe n oi tara lc d al ,te f fe nE .nretxe n o itara lc d ed resilitud ,sac ec snad ,elbissop sap tsen li ,tnem maton ; elbairav ed mon nu erutcurts enud ep yt ed mon el reli missa sap tua f en liuq neib zetoN .ecruos reihcif ertua nu snad ini fd ep yt nu ecner fr eria f ed ,nnod ecruos reihcif nu snad ,elbissop sap tsen li ,ehcnaver nE
struct enreg { int numero ; int qte ; float prix ; } ; main () { enreg x ; .... } fct ( ....) { enreg y, z ; .... } struct enreg1 { int p ; float y ; } ; struct enreg2 { double p ; int z ; } ; // contient un champ nomm p // contient aussi un champ nomm p

.tcf te niam snoitcno f sel siuped elb -issecca te labolg uaevin nu ralcd gerne m mon erutcurts ed ep yt nud elp mexe nu icioV
193

5 Transmission dune structure en argument dune fonction


5 - Transmission dune structure en argument dune fonction

194

Les types structure, union et numration CHAPITRE 10

5.1 Transmission dune structure par valeur


: elp mis elpmexe nu icioV .jd snos -siannoc suon euq ec reuqilppad tnemelpmis tigas lI .esop es en reilucitrap emlborp nucuA
#include <iostream> using namespace std ; struct enreg { int a ; float b ; } ; // type enreg defini a un niveau global main() { enreg x ; void fct (enreg y) ; x.a = 1 ; x.b = 12.5 ; cout << "avant appel fct : " << x.a << " " << x.b << "\n" ; fct (x) ; cout << "au retour dans main : " << x.a << " " << x.b ; } void fct (enreg s) { s.a = 0 ; s.b=1 ; cout << "dans fct : " << s.a << " " << s.b << "\n" ; } avant appel fct : 1 12.5 dans fct : 0 1 au retour dans main : 1 12.5

5.2 Transmission dune structure par rfrence


.tcf ed tne mugral ecnerfr rap tnatte msnart ne ,tnedcrp elp mexel snonerpeR
#include <iostream> using namespace std ; struct enreg { int a ; float b ; } ; main() { enreg x ; void fct (enreg & y) ;

.x ed sruelav sel rus ecnedicni enucua tnon tcf ed nies ua s ed snoitaci fido m sel ; leppa nos ed srol tcf noitcno f al snad tne melacol seipocer tnos x erutcurts al ed sruelav sel ,tne mellerutaN
// type enreg defini a un niveau global

ruelav rap erutcurts enud noissimsnarT

: >- ton ruetarpol tna yolpme ne elpmexe tnedcrp erton rineved tiarruop euq ec icioV .b.)sda*( etnelaviuq ares elle ; tnemugra ne euer erutcurts al ed p mahc dnoces el arengisd b >- sda noitaton al ,tcf ed nies ua ,isniA .tubd ed esserda nos ed ritrap erutcurts enud spmahc stnerffid xua redccad temrep leuqel ,>- ton ruetarpo levuon nu leppa eriaf ; sda esserdad erutcurts al ed sp mahc sel rengisd ruop b.)sda*( uo a.)sda*( euq ellet noitaton enu retpoda : suov srola tnerf fos snoitulos xueD .esserda enu non te erutcurts ed mon nu ednarpo rei merp e mmoc esoppus li rac ,sulp tneivnoc en . ruetarpoL .sda esserdad erutcurts al ed spmahc sed nucahc ,tcf ed noitini fd al ed nies ua ,redccad srola esop es e mlborp el ,zetatsnoc el suov em moC : e mr o f a l e d ar es et t- n e n os t e : e mro f al suos retnesrp es cnod arved tcf ed leppal ,sac ec snaD .erutcurts al rus r u e t ni o p n u d e d i a l , e c n er f r r a p n o iss i ms n art e n u r el u m is t n e m e l a g s n o v u o p s u o N
fct (&x) ; void fct (enreg * ads) ;

.ecnerfr al uer a elle tnod erutcurts al rus tnemetcerid tcf rap seutce ffe t tno snoitaci fidom sel ,sio f etteC
ecnerfr rap erutcurts enud noissimsnarT
avant appel fct : 1 12.5 dans fct : 0 1 au retour dans main : 0 1

5.3 Transmission de ladresse dune structure : loprateur ->

#include <iostream> using namespace std ; struct enreg { int a ; float b ; } ; main() { enreg x ; void fct (enreg *) ; } void fct (enreg & s) { s.a = 0 ; s.b=1 ; cout << "dans fct : " << s.a << " " << s.b << "\n" ; } x.a = 1 cout << fct (x) cout << ; x.b = 12.5 ; "avant appel fct : " << x.a << " " << x.b << "\n" ; ; "au retour dans main : " << x.a << " " << x.b ;

5 - Transmission dune structure en argument dune fonction

195

: e p y t e c e d n oi t a u ti s enu regasivne snoirruop suon ,ini fd tnem medcrp gerne ep yt el ceva ,elp mexe raP .erut -curts enud ruelav al ruoter ne tnassinruo f snoitcnof sed resilar ed temrep suov ++C siaM .erialacs ep yt ed tatlusr nu tnassinruo f snoitcnof sed euq rtnocner snovan suon ,iciuqsuJ

: r a p r b i l er t arr u o p u o l l a i s n i a er i o m m e c a p s e l , u d n e t n e n e i B . ) euq e r t i t e m m u a( p m a h c d n o c e s e l ar e n g is d , i s n i A . >- r u e t ar p o l e d e d i a l e r ia f es , er o c n e l ,a rr u op rap et ni op erutc urts al e d spma hc stner ffi d xua sccaL
y. )r da* ( y >- rda r da

: s no i tc urt sn i se c e lp m e xe r ap zer d is n oC .8 ert ipa h c ud 8 ehpargarap ua tnesrp ruetarpol ceva tnemeuqiman yd seuolla serutcurts ed sac el snad silitu tnevuos tnemelag ares ruetarpo tec siaM .erutcurts enud essserdal ed tnemugra ne noissimsnart al ed sac el snad >- ruetarpol retnesrp ed snonev suoN
w en

196

6 Transmission dune structure en valeur de retour dune fonction


. s e u q i m a n y d s t e j b o s e l r u o p s e s i l i t u s r t t i a f n e t n or e s s t i l i b i s s o p s e C
delete adr ;

Les types structure, union et numration CHAPITRE 10

avant appel fct : 1 12.5 dans fct : 0 1 au retour dans main : 0 1

} void fct (struct enreg * ads) { ads->a = 0 ; ads->b = 1; cout << "dans fct : " << ads->a << " " << ads->b << "\n" ; }

x.a = 1 ; x.b = 12.5 ; cout << "avant appel fct : " << x.a << " " << x.b << "\n" ; fct (&x) ; cout << "au retour dans main : " << x.a << " " << x.b << "\n" ;

struct enreg { int a ; float b ; } ; enreg *adr ; adr = new enreg ; // alloue un emplacement pour un structre de type enreg // et range son adresse dans adr

e uqrameR

erutcurts enu rus ruetniop nud noissimsnarT

: snoitaralcd ed elpmexe tec ze yoV .silaicps euqirhpirp nud ec -nanevorp ne tatd tom nu elpmexe rap ,erianib fitom nud unetnoc el reuqitrocd ruop tios ; )s tn at ser stib sel tnemelbanevnoc resilitu li-t-ardua f erocne( 61 ed ueil ua stib 4 rus gnar ert arruop 51 te 0 ertne sirpmoc reitne erbmon nu ,elpmexe rap : noitamro fnil retcap moc ruop tios : selitu rervas tnevuep stib ed spmahc se L . stib ed spmahc ed srola elrap no ; stib ed ini fd erb mon nu tnapucco selbairav sed ,serutcurts sed nies ua ,rini fd ed tne melag tem -rep egagnal ec euq ici riov snolla suoN .ruelav enud erianib fito m el rus tnemetcerid relliav -art ed tnatte mrep sruetarpod tiasopsid ++C euq reton ed noisaccol ue jd snova suoN .s p m e t r ei m er p n u s n a d r o n gi er t t u e p e h p ar g ar a p e C
.B.N

. tr t ni ruel tuot tnordnerp selleuq l tsec te sessalc xua tnoresilarng es snoitardisnoc sec ,tia f nE ...erutcurts enuuq ertua ep yt leuq etropmin ruop tuav euqra mer ettec euq zetoN .)! tnatsixenid esohc euqleuq rus retniop tneiareunit -noc ruetniop el uo ecner fr al siam( ...noitcno f al ed tnemevhcal sd sulp tiaretsixen elle ,sac ec snad ,te ffe ne ; noitcno f al elacol ert sulp tuep en noitseuq ne erutcurts al srolauq reilbuo sap ardua f en li ,sio fetuoT .erutcurts enu rus ruetniop nu uo erutcurts enu ecner fr enu eiovner iuq noitcno f enu resilar ed ,sruellia rap ,tidretni suov en neir ,tnemellerutaN .tne mugra ne euer ert tne melleutnev tios ,)ici sac el tsec e mmoc( noitcnof al rap tne melacol erc ert tios d arua s euq neib zetoN
/* dont la fonction renvoie la valeur */

7 Les champs de bits

enreg fct (...) { enreg s ; ..... return s ; }

struct etat { unsigned pret unsigned ok1 int donnee1 int unsigned ok2 int donnee2 } ; etat mot ;

/* structure locale fct */

: : : : : :

1 1 5 3 1 4

; ; ; ; ; ;

7 - Les champs de bits

197

: elliat e m m al tno gnol te taolf sep yt sel elleuqal snad noitatnemlpmi enu snad euq trtnid an iuq fitcudortni elp mexe tec drobad ze yoV .stib ed sp mahc sed eicossa emm-elle srola evuort es noinul ,tne melarng ,te erianib fito m emm nu setner ffid snoa f srueisulp ed retrpretni ruop esilitu tnemelleitnesse tse ellE .stner ffid sep yt ed selbairav sed rap eriomm tnemecalp me e m m nu regatrap eria f ed tnemeuqiroht temrep noinuL .spmet rei merp nu snad rongi ert tuep ehpargarap eC
.B .N

.s e u q i f i c p s s r t s n o i t a c i l p p a s e d vr e s r er t , t n e u q s n o c r a p ,tio d lI .elbatrop sap uo uep ,e m m erutan rap ,cn od ,tse stib ed sp mahc se d iolpmeL 3 . s t i b 2 3 u o s t i b 6 1 t n e m m e u q r f er t n o c n er n o , e u q i t - ar p n E . n o i t a t n e m l p m i l e d , i s s u a e l l e , d n e p d s t i b e d p m a h c n u d e l a m i x a m e l l i a t a L 2 . n oi ta t ne m - l p mi l e d , iss u a i u l , d n e p d st ir c d t n os sr e i nr e d s e c l e u q el s n a d er dr o l ,s t et c o sr u ei s -ulp epucco stib ed p mahc nuuqsrol ,ertuo nE .)! enihcam emm enu rus sruetalipmoc stner ffid ruop sirp moc y( snoitautis xued sel ertnocner no ,euqitarp ne ,te noit - at n e m l p m il e d c n o d d n e p d t n i o p e C . esre v ni sn es el s n a d u o s tr o f s di o p s el sr e v se l b - ia f s di op s e d t na ll a ne t i a f e s s tib e d p ma hc nu d n o itp ircs e d al is sap es ic rp en e mro n a L 1

.)tni dengisnu ep yt el ceva sac el tiares ec e mmoc ,1 te 0 non te( 1- te 0 tnos selbissop sruelav ses ,1 rueugnol ed tse tni ep yt ed p mahc nuuqsrol euq zetoN . te tnos stib ed sp mahc sed snad ertarappad selbitpecsus sep yt slues se L .tni ep yt ed elbairav enud iolpmel esirotua ++C o tiordne leuq etrop min ertarappa arruop ellE .51+ te 61- ertne sesirp moc sruelav sed erdnerp tnavuop ngis reitne nu engisd
tni d engis nu tn i

: noitaton al ,snoitaralcd sec cevA .)ssilitu sap cnod tnores en sli( stnadnopserroc stib ed erbmon el etuas nol euq ei fingis alec ,rueugnol ed noitacidni ettec tnaved erugif en pmahc ed mon nucua euqsro L .stib ne pmahc ud rueugnol al tnesicrp stniop-xued sed etius al tnarugi f snoitacidni se L
donnee2 ok2 donnee1 ok1 pret

: tius em moc esita mhcs ert tuep eralcd isnia tom elbairav a L
198
Les types structure, union et numration CHAPITRE 10

8 Les unions
se uqrameR
mot.donnee1

.)stib 61 epucco tni ep yt el o snoitatne mlpmi sed snad euq trtnid aruan alec( reitne nu te ,tnedcrp ehpargarap el snad einifd snoival suon euq ellet tate erutcurts enu ertne noinu enu snosilar suon leuqel snad elpmexe nu iciov nE .erutcurts ep yt ed tne melag s ia m ,)e l p me x e ert o n s na d e m m oc( es a b e d e p y t n u d t ne me l ues n o n ert t ue p t ej b o e u qa hc ,trap ertuad ; stejbo xued ed sulp rus tnatrop noinu enu resilar ed elbissop tse li ,sruellia raP
essai z, truc ; // ou, comme en C : union essai z, truc ;

: rap u euq ep yt emm ud stejbo sertuad reralcd snoirruop suon ,emmargorp tnedcrp erton snad ,elp mexe raP .ep yt ec ed selbairav sertuad rini fd ruop silitu etiusne ert tuep ic -iulec ; )erttemol up sruelliad snoirua suon ,iasse ici( ep yt ed mon nu edssop ellE .erutcurts enud ellec eugolana tse noinu enud noitpircsed al ed exatn ys al ,elarng erinam enuD .x u rap srola arengisd nouq )taolf( tnattol f nu em moc ttnat ,n u rap srola arengisd nouq gnol reitne nu e mmoc ttnat rdisnoc ert arruop iuq taolf nud uo gnol nud )enum -moc esoppus ici( elliat al dnopserroc stib ed erbmon el tnod tnemecalpme nu evresr
. .

tna t to lf nu te re itn e nu ertn e noinU

dans cette implementation, int = 4, float = 4 donnez un nombre rel : 1.23e4 En entier, cela fait : 1178611712

#include <iostream> using namespace std ; main() { union essai { long n ; float x ; } u ; cout << "dans cette implementation, int = " << sizeof(int) << ", float = " << sizeof(float) << "\n" ; cout << "donnez un nombre rel : " ; cin >> u.x ; cout << "En entier, cela fait : " << u.n << "\n" ; }

struct etat { unsigned pret unsigned ok1 int donnee1 int union essai { long n ; float x ; } u ;

: : : :

1 1 5 3

; ; ; ;

: n oi tar al c d a L

8 - Les unions

199

: rueluoc ep yt ed selbairav sed reralcd ed elbissop tse lI .rueluoc ep yt ud setnatsnoc sel tneutitsnoc sruelav seC .trev te uelb ,eguor ,enuaj sruetaci fitnedi sel rap sengisd selbis -sop sruelav ertauq etropmoc liuq esicrp te rueluoc m mon noitarmun ep yt nu tini fd ellE
enum couleur {jaune, rouge, bleu, vert} ;

: n oi t ar al c d et t e c s n or d is n o C

.r u e m m ar gor p el ra p i ni f d ep yt nu ,issua iul ,e mro f liuq tse tnem medcrp setnesrp serutcurts sel ceva neil lues noS .) e l p m is u o( er i a l a cs e p yt n u c n o d t e r e i t n e e p yt e d r e i l u c itr a p s a c n u ts e n o it ar m u n e p y t n U

.selbairav sertuad te snoinud sp mahc sed ertneuq sulp sap ,stner ffid sep yt ed snoinu sed tnanetrappa mon e m m ed sp mahc sed ertne elbissop noisu fnoc ed sap a yn li ,e mm eD .snoinu xua rs neib euq -ilppas ,erutcurts ed ep yt ud etrop al ed soporp ,4 ehpargarap ua tid snova suon euq eC

: r ap tnangisd sel ne redcca yd elbissop ares li ,to m ec tnangisd seitrap setner ffid xua tnauQ : rap tnangisd al ne ,reitne nu e mmoc rd -isnoc ,tom ed ruelav al redccad ,elp mexe rap ,elbissop srola tse li ,snoitaralcd sec cevA .tom elbairav enu tne m - et cer i d ra lc d s n o va y s u o n t e n o i n u d e p yt ua m o n e d n n o d sa p s n o v a n s u o n ic i u q ze t o N
unsigned ok2 : 1 ; int donnee2 : 4 ; } ; union { int valeur ; struct etat bits ; } mot ; mot.valeur

200

9.1 Exemples introductifs

9 Les numrations

Les types structure, union et numration CHAPITRE 10

couleur c1, c2 ; mot.bits.pret mot.bits.ok1 mot.bits.donnee1 etc.

// c1 et c2 sont deux variables de type couleur

e uqrameR

: euq sedrusba issua sesohc sed erirc tuep no ,tse sulp iuQ .)552 te 0 ertne sesirp moc sruelav sed ruop tetco lues nu elp -mexe rap( nrecnoc ep yt ua ubirtta arua ruetalip moc el euq elliat al ed ardnepd tatlusr el ,nrecnoc noitarmun ep yt ud sruelav sed egalp al sap tnenneitrappan sruelav sel euqsro L
enum couleur {jaune, rouge, bleu, vert} ; couleur c1, c2 ; ..... c1 = 2 ; // mme rle que c1 = bleu ; c1 = 25 ; // accept, bien que 25 nappartienne pas au type type couleur

: )tni ep yt el snad elbatnesrper tios elleuq uep ruop( eritne ruelav elleuq etrop min rmun ep yt ed elbairav enu retce ffad elbissop tse li ,rerpse tiarruop nouq ec tnemeriartnoC

euqnocleuq ruelav enu riovecer tuep noitarmun epyt nud elbairav enU
int n ; long p, q ; ..... n = bleu ; p = vert * q + bleu ; // mme rle que // mme rle que n = 2 p = 3 * q + 2

: eritne etnatsnoc elleuq etrop min ed ecalp te ueil ne selbasilitu tnos sruetaci fitnedi seC .cte ,eguor ruetaci fitnedil 1 ruelav al ,enuaj ruetaci fitnedi reimerp ua 0 ruelav al eubirtta elle ,tne msic -rp sulP .stic sruetacifitnedi ertauq sed nucahc tni ep yt ed ruelav enu tnemelpmis eicossa : etnedcrp noitaralcd al ,isniA .serianidro sreitne sed tnos noitarmun ep yt nud noitaralcd al snad tnarugi f setnatsnoc se L
enum couleur {jaune, rouge, bleu, vert} ;

rueluoc ep yt ud setnatsnoc xua tnadnopserroc sruetacifitnedi sel ,erdnetta


// affecte c1 la valeur jaune // affecte c2 la valeur contenue dans c1

: selbai fidom sap cnod tnos en te eulavl sed sap tnos en ys tuep no em moC
c1 = jaune ; c2 = c1 ;

: s e t c err o c t n e m e ll er u t a n t u ot sr ol a t n o s s et n a v i us s n o i t c urts n i s e L
201

9.2 Proprits du type numration

enum logique { faux, vrai } ; enum couleur {jaune, rouge, bleu, vert} ; logique drapeau ; couleur c ; ..... c = drapeau ; // OK bien que drapeau et c ne soit pas dun mme type drapeau = 3 * c + 4 ; // accept jaune = 3 ; // interdit : jaune nest pas une lvalue

noi tar mu n ep yt nu snad tna rug if se tnat snoc sed e r utaN

9 - Les numrations

.) noitaralcd ettec t na vius ecruos reihci f ud eitrap uo noitcnof ,colb( noitaralcd ruel tnadnopserroc ellec tse sruetacifitnedi slet ed etrop al ,udnetne neiB
enum couleur {jaune, rouge, bleu, vert} ; enum bois_carte { rouge, noir } ; // erreur : rouge dj dfini int rouge ; // erreur : rouge dj dfini enum couleur {jaune, rouge, bleu, vert} c1, c2 ; enum couleur {jaune, rouge, bleu, vert} ; enum couleur c1, c2 ; enum {jaune, rouge, bleu, vert} c1, c2 ;

: e l p m e x e t e c z e r d is n o C . m u n e n o i t c ur t s n i e n u s n a d s i n i f d sr u e t a c i f i t n e d i s e d r e u q i l p p a s s u l p t u e p e n t i l i b i s s o p e l l e t e n u , e h c n a v er n E . s e t n er f f i d s e r u t c ur t s e d s p m a h c s e d s e u q i t n e d i s m o n x u e d r e n n o d e d s i mr e p t i a t l i ,s er u t c ur t s s e l s e s i l i t u t n o s t n o d er i n a m a l e d u n e t e t p m o C 2 .resop es ed euqsir e n ep yt e d tilibitap moc ed e mlb orp n uc ua rac ,snoin u sed u o s er u t c ur ts s e d s a c e l s n a d e u q s t n e i n v n o c n i d s n i o m e t n e s r p t i l i b i ss o p er i nr e d e t t e C : ep y t e d r u e t a c i f i t n e d i l t n a n i m i l n e , e m y n o n a ep y t n u r e s i l i t u e m m t u ep n o , s a c e c s n a D : r a p s e c a l p m er er t t n e v u e p

: snoitcurtsni x ue d s ec ,e lp me x e r aP . ep yt e l tn as il it u s elb air av e d n o it ara lc d al te r m u n ep yt nud noitini fd al rexi m tuep no ,snoinu sed uo serutcurts sed sac el snad e mmoC 1

se uqrameR

: s tn er f f i d sruetaci fitnedi xued eubirtta ert essiup ruelav em m enuuq tidretnin neir ,ertuo nE
enum couleur_ter { jaune = -5, rouge, bleu, vert = 12 , rose } ; // jaune = -5, rouge = -4, bleu = -3, vert = 12, rose = 13

: snad e mmoc ,sruelav sec rus snio m uo sulp reul fnid elbissop tse li siaM .ruetalipmoc el rap tnemeuqitamotua senimretd tneiat noitarmun ep yt nu snad tnassiar -appa sruetaci fitnedi xua seubirtta setnatsnoc sed sruelav sel ,stnedcrp selpmexe sel snaD

seuqnocleuq ert tnevuep noitarmun epyt nud setnatsnoc seL


202
Les types structure, union et numration CHAPITRE 10

enum couleur_ter { jaune = 5, rouge, bleu, vert = 6, noir, violet } ; // jaune = 5, rouge = 6, bleu = 7, vert = 6, noir = 7, violet = 8 enum couleur_bis { jaune = 5, rouge, bleu, vert = 12, rose } ; // jaune = 5, rouge = 6, bleu = 7, vert = 12, rose = 13

: s n a d e m m o c s i mr e p t n os s fi t a g n sr ei t n e s e L

.snoitarmun sel te snoinu sel ,serutcurts sel : tnos iciuqsuj srtnocner snova suon euq ruetasilitul rap sini fd sepyt seL .1

,)euqnocleuq noitcno f enud nies ua sralcd( seuqitamotua stejbo sed euq ertipahc ec snad s n or er d is n o c e n s u o n , e ss a l c e d t p e c n o c u a r er c as n o c s u o n t e e l p m is r e ts er r u o p , t n a d n e p e C .)euqi man yd ,euqitamotua ,euqitats( noitacollad sessalc setner ffid sruel enrecnoc iuq ec ne reilucitrap ne ,serianidro selbairav sel euq seuqitsirtcarac se mm sel tnedssop stejbo sel ,ruetasilitul rap inifd ep yt elpmis nuuq tsen )erutcurts enu uo( essalc enu em moC .)ssalc lc tom( essalc enud nies ua noitaluspacnel emirpxes tnemmoc etiusneuq snorrev en suoN .sedoht m sed te sen - n o d s e d n o i t a i c oss al er v u n e er tt e m e d n o a f a l r e ti mi l s u o n e d s p m e t r e i m er p n u s n a d artte mrep suon iuq ec ,drobad tuot snoreidutl suon ,essalc al ed reilucitrap sac nu dnopser -roc li ,leutpecnoc nalp nu rus ,em moc siam esilarng e mro f ettec suos yolp me tne merar ares ep yt eC .noitaluspacned tilibissop enucua aretsixen li ,sac ec snad ; rtnocner jd snova suon euq )tcurts lc tom( erutcurts ep yt ua sedoht m sed retuoja e mm zerruop suoV .)elliesnocd tnemelarng etser ehcramd ettec is e m m( essalc enud sennod sed eitrap enuuq reluspacnen zerruop suov ,ehcnaver ne ,++C nE .sedohtm sed siaib el rap euq eriaf es tuep en scca ruel te seluspacne tnos sennod sel , erup .O.O.P nE .)serbmem snoit -cno f( sedohtm sed te )sennod serb me m( sennod sed sio f al seicossa tnevuort es leuqel s n a d , r u et as il it u l r a p i ni f d e p y t e d n o it o n al e d n o it asi l ar n g al ts e ess al c e n U . e ss a l c ed tpecnoc el rus tnemeritne tnesoper ic-sellec ,ertipahc reimerp el snad tid snoval suon emmoC .++C ed .O.O.P ed stilibissop sel tnemelbatirv snodroba suon ,ertipahc ec cevA
1

Classes et objets

11

sedohtm sed tnatropmoc erutcurts enud noitaralcD


struct point { /* dclaration "classique" des donnes */ int x ; int y ; /* dclaration des fonctions membre (mthodes) */ void initialise (int, int) ; void deplace (int, int) ; void affiche () ; } ;

: tniop erutcurts erton reralcd snoirruop suon tnem moc icioV

. n o i ti ni f d ruel ed serbmem snoitcno f sec ed noitaralcd al tnaugnitsid ne ,rinevrap y tne mmoc sno yoV .t n i o p u d s e n n o dr o oc s el r e hc -i f fad ,ticilpmis ed icuos rap ,snoretnetnoc suon suon ,ici : tniop nu rehci f fa ruop ehciffa ; tniop nud sennodrooc sel rei fido m ruop ecalped ; tniop nud sennodrooc xua sruelav sed reubirtta ruop esilaitini : s n oi t c n o f si or t er i u d or t ni s n o i ti a h u os s u o n e u q , e l p - me xe ra p , sn os o p p u S .)ser b m e m s n oi t cn o f( se d o ht m se d re ic os sa i u l e d te mre p s uo n + + C
struct point { int x ; int y ; }

.eraps noital -ipmoc ed stilibissop xua tnaruocer ne ++C ne essalc enu retiolpxe tne mmoc riov ed artte m -rep suon sessalc xua srcasnoc sertipahc siort sed rei merp ec ,ni fnE .resilaitni sel ed erina m al euq isnia ,seuqitats sennod serbmem sel e mmon nouq ec etiusne snoreidut suoN .stilibissop sel setuot ertannoc ne ruop 31 ertipahc ud ni f al erdnetta ardua f suov li ,)noit -acollad sessalc sel e mmoc( sertuad ceva ecner fretni nos ed te noiton ettec ed essehcir al ed unet etpmoc ,erocne L .)leppa sap tnessa f yn iuq stnassertni stejbod erug a yn li( ruet -curtsed ed te ruetcurtsnoc ed setnatrop mi srt snoiton sel ici snoriudortni suon ,sruellia raP . s t e j b o s e d n o i t a c o l l a d s e s s al c s ert u a sel snoredroba suon euq 31 ertipahc uauq tsen eC .lerutan sulp el sac ua dnopserroc iuq ec
204
Classes et objets CHAPITRE 11

1.1 Dclaration des fonctions membres dune structure


: euq ellet erutcurts ed euqissalc noitaralcd enu snordisnoC

1 Les structures gnralises

. s n o it c n o f s i or t s e d s n o it i ni f d s e d e l b m e s n el s u oss e d -ic zerevuort suov ; serb me m snoitcno f sertua xued sed noitini fd al rus sap snotsisnin suoN .leppa nos ed srol esilaitini noitcno f al tne meuqitamotua esi msnart ares noit -a mrofni ettec tnem moc snorrev suon ,erocne L ? enrecnoc tniop ep yt ed erutcurts al tnem -sicrp ares elleuQ .)ett-nel ed ::tniop el rap esilar tnat noitaicossa ettec( tniop ep yt ua tnadnopserroc x erb me m el engisd x ,tia f nE .elacol elbairav enu in tnemugra nu in tsen ,iul tnauq ,x siaM .tnemugra rei merp ne euer ruelav al ,tnemeuqissalc ,engisd sba elob m ys e L : n oi ta tc e f fa enu snovuort suon ,esilaitini noitcnof al ed sproc el tnanetnia m snonimaxe suon iS . t n i o p er u t c ur ts al e d e s i l a i t i n i erb me m noitcno f al ed sulp non te ,esilaitini emmon erianidro noitcno f enud tiarigas l i ; t n i o p e i c oss a s ul p t i ar e s e n i c- el l e c s i a m , e s i l a i t i n i e m m o n n o i t c n o f e n u t n e m e v i t c e f f e snoirini fd suon ,)::tniop( exifrp ec ed ecnesbal nE .tniop snad ini fd iulec tse nrec -noc esilaitini ruetaci fitnedil euq ei fingis li ,icI .ruetaci fitnedi nud etrop al rei fidom tres leuqel , etrop ed noitulosr ed ruetarpol em mon nol euq ec dnopserroc :: elobm ys e L : ts e n oi t c n o f al e d m o n e l , e t t- n el s n a D
void point::initialise (int abs, int ord) { x = abs ; y = ord ; } point::initialise x = abs ;

: e s i l a i t i n i e d n o it i ni f d al ert tiarruop euq ec icioV .noitcno f ed euqissalc )euqserp( noitini fd enu rap tia f es ellE

.leppa nos ed srol erbmem noitcno f al einruo f tnemeuqita motua ares noita mrofni ettec tnem -moc snorrev suoN .rerpo tiod elle elleuqal rus tniop ep yt ed erutcurts al tnasicrp eriatnem -lppus tne mugra nu ,erb me m noitcno f euqahc ruop ,revuort ert-tuep zeidnetta suov suoV .serb me m snoitcno f sertua xued xua tneuqilppas seuqramer se m m se L .stne mugra ne seuer sruelav sel y te x serbmem xua tiaretce ffa elleuq edil tirpsel tna ya ne esilaitini ed ett-nel tirc snova suon ,udnetne neib ,icI .sruelav xued sec ed tia f ares iuq egasul euqidnin neir ,uaevin ec .tni ep yt ed sruelav xued stnemugra ne arvecer esilaitini erb mem noitcno f al euq uvrp snova suon ,icI .niol sulp uep nu snorrev el suon e mmoc ,sruellia rap esilar ares elle : noitaralcd elp mis ed uaevin ec sap erugi f en snoitcno f sec ed noitini fd al euq neib zetoN .snoitcno f siort son ed )sett-ne( snoitaralcd sel tnessiarappa sennod ed spmahc sed euqissalc noitaralcd al ertuO
205

1.2 Dfinition des fonctions membres dune structure

/* ----- Dfinition des fonctions membres du type point ---- */ #include <iostream> using namespace std ;

1 - Les structures gnralises

tn iop

.noitaluspacned epicnirp el retcepser ed tnettemrep erutcurts erton ruop seuvrp serbmem snoitcnof sel ,tnemetsuj ,icI .3 .)21 ertipahc ud 3 ehpargarap ua sedroba tnores engil ne serbmem snoitcnof sel ; 7 ertipahc ud 41 ehpargarap ua setnesrp t jd tno serianidro engil ne snoitcnof sel( engil ne snoitcnof sed etiaf noitpecxE .2 .++C ne fitatlucaf tse tom el ; uO .1
tcurts b ,a tn iop tcurts

: isniA .erb me m noitcno f enud leppal ruop noa f emm al ed edcorp nO . ++C ne tpecca tiares ec ,)essalc ed erocne sap te erutcurts ed( sicrp s a c e c s n a d s i a m , n o it al us p a c n e d e pi c n ir p e l s a p s n o ir e t c e ps er e n s u o n ,s etr e C .s e d o h t m s e d eri ai d mr e t ni l r a p r ess a p s n as , s e n n o d x u a t n e m et c er i d s n oir e d c c a s u o n , t n as i a f e C
3

: erirc suon-snoirruop isnia ; selleusu serutcurts sel ceva eria f el sirppa snova suon em moc reluord es tiarruop b te a serutcurts son ed y te x serb mem xua sccaL .) ! eri o m m e d e g a l li ps a g n u t n e m ets e fi n a m t i ar i u d n o c er i ar t -noc el( sio f elues enuuq serng tnos en ic-sellec : serb me m snoitcno f sed e m m ed sap av nen li ,serbme m ses ed nucahc ed erporp ne esopsid erutcurts euqahc is euq reuqramer jd te serod snovuop suon ,soporp ec .ehciffa te ecalped ,esilaitini sedohtm siort sed t n as o ps i d t e y t e x ser b m e m s e d t na d ss o p e n uc a hc , b t e a s e m m o n ser u tc urt s x u e d era lc d
2

: elp mexe raP .snotiahuos el suon euq ep yt ec ed serutcurts ed tnatua reralcd snovuop suon ,2.1 ehp -argarap ua ini fd te 1.1 ehpargarap ua ralcd ertd tneiv liuq let tniop ep yt ud tnasopsiD

.raps ett-ne reihci f nud tejbol eria f ,xuei m ,uo reihci f e mm el snad rerugif tnevuep ic-selleC .1.1 ehpargarap ua setnesrp setnadnopserroc noitaralcd ed snoitcurtsni sed noit -aroprocnil tnetissecn sellE .selues selipmoc ert sap tnevuep en sussed-ic snoitcurtsni se L
serbmem snoitcnof sed noitinifD
void point::initialise (int abs, int ord) { x = abs ; y = ord ; } void point::deplace (int dx, int dy) { x += dx ; y += dy ; } void point::affiche () { cout << "Je suis en " << x << " " << y << "\n" ; }

206

1.3 Utilisation dune structure gnralise

Classes et objets CHAPITRE 11

a.initialise (5,2) ; a.x = 5 ; point a, b ;1

: niam noitcno f al snad noitasilitud elpmexe nu te serb mem snoitcno f ses ed noitini fd al ,tniop ep yt ud noitaralcd al tnanerper e mmargorp nu icioV

. a t e j b o l ) 2 t e 5 s n o i t a mr o f n i s e d n g a p m o c c a , e s i l a i t i n i ( e g a s -sem nud iovnel e utits noc )2 ,5( esilaitini.a euq tne melag ti d n o ,.O.O.P nograj nE 2 . s e n n o d s e l l u s p a c n e t n e m e l b a n e v n o c t i a y n o u q u e p r u o p , e s s a l c ) e i ar v( e n u d s a c e l s n a d e m m e d s u l p ar i n e n l i u q t n e m s i c r p s n orr e v s u o N : rap calpmer ert tiarruop ; )2,5( esilaitini.a euq let leppa nU 1 .)5 erid --tsec( sba ruop euer ruelav al a erutcurts al ed x p mahc el snad arecalp esilaitini::tniop ed
x = abs ; a.x = 5 ; a.y = 2 ;

: noitcurtsnil ,isniA .rerpo tiod elle elleuqal rus erutcurts al tse elleuq erbmem noitcnof al resicrp av iuq exi frp ec tne metsuj tsec ,udnetne neiB .noitcno f ed euqissalc leppa nu eugolana tse leppa tec ,.a exi frp ud noitcartsba tia f nol iS .2 te 5 sruelav sel stnemugra ne t n at te ms nar t i u l ne , e s i l a i t i n i er b m e m n oi t c n o f al r e l e p p a : e i f i n gis
a er ut cu rt s al ru op

1.4 Exemple rcapitulatif

/* ----- Dfinition des fonctions membres du type point ---- */ void point::initialise (int abs, int ord) { x = abs ; y = ord ; } void point::deplace (int dx, int dy) { x += dx ; y += dy ; } void point::affiche () { cout << "Je suis en " << x << " " << y << "\n" ; } #include <iostream> using namespace std ; /* ------------ Dclaration du type point ------------- */ struct point { /* dclaration "classique" des donnes */ int x ; int y ; /* dclaration des fonctions membres (mthodes) */ void initialise (int, int) ; void deplace (int, int) ; void affiche () ; } ;

se uqrameR

1 - Les structures gnralises

207

. svirp stid tnat serb me m sertua sel , rueirtxel ed selbissecca erid--tsec , scilbup tnores serbmem snoit -cno f uo/te serbmem sniatrec tnemelues elleuqal snad erutcurts enu ares essalc enu ,tnemsic -rp sulP .essalc al ed reilucitrap sac nu tse erutcurts al ++C ne ,tid jd snoval suon e mmoC

. s i l i t u u e p s r t t s e a l e c s i a m ,s e m y n o n a s e s i l ar n g s er u t c ur t s s e d r e r a l c d e d e l b i ss o p e ts er l I 4 . 6 e h p ar g ar a p u a s n o r d n e i v e r y s u o N . l e i c i g o l t n a s o p m o c n u r e s i l i t u r a rr u o p n o l e u q i s n i a sr u e l l i a d t s e c ; t n i o p e p y t e l t n e m r a p s r e l i p m o c e d e l b i s s o p t i a r e s l i , u d n e t n e n e i b , s i a M .tniop ep yt el tnasilitu )niam( noitcno f al ; ser b m e m s n oi tc n o f s e d n oi ti n i f d a l ; tniop ep yt ud noitaralcd al : t i u d or t n i s n o v a s u o n , t e l p m o c e m m ar g or p e d e l p m e x e er t o n s n a D 3 .) s n o i t c n o f s e l t n a v a s e n n o d s e l c a l p t n e m e u q i t a m - ts y s s n o v a s u o n ( e u q n o c l e u q e r dr o n u s n a d s n o i t c n o f s e l t e s e n n o d s e l er i u d or t n i d ) l l i e s n o c u e p t n e m e l ar n g s i a m( s i m r e p t s e l i , e r u t c ur t s e n u d n o i t ar a l c d a l s n a D 2 .) e s i l a i t i n i e m m o n e r i a n i dr o n o i t c n o f e n u , sr u e l l i a r a p , e t s i x e n l i u q s n i o m ( n o i t a l i p m o c a l e t e j er ar e s : noitcurtsni ettec ,elp mexe raP .erianidro noitcno f enu e mmoc eleppa ert sap tuep en erbme m noitcno f enU .etnadnopserroc erutcurts al ed ep yt ud eticilpmi tnemugra nu tne m -eriotagilbo tioer ic-ellec euq tia f erbmem noitcnof enud leppal ed emm exatn ys a L 1
initialise (3,1) ;

t n i o p e p y t u d n oi t a si l i t u d t e n o it i n i f d e d e l p m e x E
Je suis en 5 2 Je suis en 3 6 Je suis en 1 -1

208

2 Notion de classe
se uqrameR
Classes et objets CHAPITRE 11
main() { point a, b ; a.initialise (5, 2) ; a.affiche () ; a.deplace (-2, 4) ; a.affiche () ; b.initialise (1,-1) ; b.affiche () ; }

: rini fd al ed snonev suon euq ellet tniop essalc al rap tniop erutcurts al ecalp mer nol euqsrol 4.1 ehpargarap ud em margorp el tneived euq ec iciov ,fitacidni ertit .erutcurts enud ellec em moc tnemelag tia f es essalc enud noitasilituL .essalc al ed )svirp uo scilbup( serb mem sed elbmesnel scca tno serbmem snoitcnof sec ,reilucitrap nE .)sevirp uo seuqilbup snoit -cno f ed essigas liuq( erutcurts enud serbmem snoitcno f sed ellec euq erina m em m al ed tnemetcaxe tia f es elle ,essalc enud serbmem snoitcno f sed noitini fd al enrecnoc iuq ec nE .seuqilbup tnos ehciffa te ecalped ,esilait -ini semmon serbmem snoitcno f sel euq sidnat ,svirp tnos y te x sm mon serb me m sel ,icI
essalc enud noitaralcD
public void void void } ; /* dclaration des membres publics */ : initialise (int, int) ; deplace (int, int) ; affiche () ;

: e t n a v i u s a l t n e m e l p m is ti ar es noitaralcd aS .seuqilbup tnos serb me m snoitcno f sel setuot te ,svirp tnos sennod serb mem sel suot elleuqal snad essalc enu tniop erutcurts etnedcrp erton ed snosia f ,elp mexe raP .etavirp te cilbup slc sto m sel tnasilitu ne svirp serbmem sel te )sennod uo snoitcno f( scilbup serb me m sel tnos sleuq resicrp ed ; ssalc lc tom el rap tcurts lc to m el recalp mer ed : t i f f us l i , t e f f e n E . er ut c ur ts e n u d e ll e c e d e ni si o v ts e e ss a l c e n u d n oi t ar al c d a L
209

#include <iostream> using namespace std ; /* ------------ Dclaration de la classe point ------------- */ class point { /* dclaration des membres privs */ private : int x ; int y ; /* ------------ Dclaration de la classe point ------------- */ class point { /* dclaration des membres privs */ private : /* facultatif (voir remarque 4) */ int x ; int y ;

2 - Notion de classe

. s er b m e m s n o i t c n o f s er t u a d r a p e u q s e l e p p a er t t n o rr u o p e n s e l l E . e ss a l c a l e d r u e i r t x e l e d s e l b is s e c c a s u l p t n or e s e n s n o i t c n o f s e l l e t e d , s a c e c s n a D . s e v ir p s e n i a tr e c er d n er n e d e l b i ss o p t i a f t u o t t s e l I . s e u q i l b u p t n e i a t s er b m e m s n o i t c n o f s e l s e t u o t , e l p m e x e er t o n s n a D 3 .redcca y ruop seirporppa serb mem snoitcn o f se d riovrp e t t i u q , s e n n o d s e d n o i t a l us p a c n e d e p i c n i r p e l r e t c e ps e r ar e h c r e h c n o , l ar n g n E .) c i lb up e rb me m n u x e d t i a f s n o i v a s u o n i s e t - p e c c a t i ar es n o i t c u rt s n i e t t e c , u d n e t n e n e i b( n o i t a l i p m o c e d c i t s o n g a i d n u t i a r i u d n o c : a erb m e m u d ) n i a m n o i t c n o f a l e d n i e s u a i c i ( e t c er i d n o i t as i l i t u d e v i t a t n e t e n u , is n i A .s e n n o d s e d e t l p m o c n o i t a l u s p a c n e e n u d n o p s err o c i u q e c , s v ir p t n o s t n i o p e d s e n n o d s er b m e m s e l s u o t , e l p m e x e er t o n s n a D 2 .s n or es i li t u s u o n euq emret reinred ec tne melarng tsec ; tniop ep yt ed stejbo sed tnos ec euq erocne uo ,tniop essalc al ed secnatsni sed tnos b te a euq tid no ,.O.O.P al ed nograj el snaD 1
a.x = 5

se uqrameR

)tniop ( essalc enud noitasilitud te noitinifd ed elpmexE


/* ----- Dfinition des fonctions membres de la classe point ---- */ void point::initialise (int abs, int ord) { x = abs ; y = ord ; } void point::deplace (int dx, int dy) { x = x + dx ; y = y + dy ; } void point::affiche () { cout << "Je suis en " << x << " " << y << "\n" ; } /* -------- Utilisation de la classe point -------- */ main() { point a, b ; a.initialise (5, 2) ; a.affiche () ; a.deplace (-2, 4) ; a.affiche () ; b.initialise (1,-1) ; b.affiche () ; }

210

Classes et objets CHAPITRE 11

public void void void } ;

/* dclaration des membres publics */ : initialise (int, int) ; deplace (int, int) ; affiche () ;

ssalc epyt ud ellec tnatser eudnapr sulp al niol ed noitautis aL .1

.sem - y n o n a s er u t c ur t s s e d r i n i f d t i a v u o p n o e m m o c , s e m y n o n a s es s a l c s e d r i n i f d t u e p n O 8 . 9 1 e rt i p a h c u a s n or e lr a p er n e s u o N .s e v i r d s e s s a l c e d s a c e l s n a d e u q t n e i vr e t n i n l e u q e l , v ir p t e c i l b u p er t n e er i a i d mr e t n i t u t a t s n u r i n i f d tr e s l i ; s e r t u a x u e d s e l e u q e r i n a m e m m al ed esilitus iuq ,)gtorp( detcetorp ,to m e misiort nu etsixe li ,rueugir etu ot nE 7 . s e p y t s t n er f f i d s e c e d s e c n a t s n i s e d r e n g is d r u o p t e j b o t o m e l s n or - e s i l i t u s u o n , e m m e D . n i o l s u l p u e p n u s n or e lr a p s u o n t n o d ) n o i n u ( n o i n u e n u er i o v , ) t c u r t s ( e r u t c ur t s e n u u o ) s s a l c ( e s s a l c e i ar v e n u t n e m m e r f f i d n i r e n g i s d r u o p e s s a l c t o m e l s n o r e s i l i t u s u o n , s er i a t n e m l p p u s s n o i s i c r p e d e c n es b a l n e , e t i us a l r a P 6
1

: t n i o p e p y t e m m e l t n e s s i n i f d s n o i t a r a l c d x u e d s e c , i s n i A . er u t - c ur ts e n u d t n e l a v i u q l t n e i t b o n o , es s a l c e n u d s er b m e m s e l s u o t s c i l b u p d n er n o l i S 5 . e l i t u t n e m er ar ar e s a l e C . s e l b i s s e c c a n i c n o d , s v ir p t n or e s s er b m e m s e s s u o t , es s a l c e n u d n o i t i n i f d a l s n a d t ar a p p a n s t o m x u e d s e c e d n u c u a i S . t n i o p e s s a l c er t o n e d n o i t i n i f d a l s n a d e l b a s n e p s i d n i s a p t i a t n t o m e c e d e c n e s r p a l i o u qr u o p t s e C . c a l p t t i a v a y e t a v i r p i s e m m o c es s a p es t u o t , n o i t i n i f d a l e d t u b d u a t ar a p p a n s t o m x u e d s e c e d n u c u a i S
class X { private : ... public : ... private : ... } ;

: e l p m e x e t e c s n a d e m m o c , es s a l c e n u d n o i t i n i f d a l s n a d s e s ir p e r sr u e is u l p e r t a r a p p a t n e v u e p e t a v ir p t e c i l b u p s l c - s t o m s e L 4
211

struct point { int x ; int y ; void initialise (...) ; ..... } ;

class point { public : int x ; int y ; void initialise (...) ; .... } ;

2 - Notion de classe

.senrecnoc ertd nosiar enucua tnon serbmem snoitcnof seL .1


b.x = a.x ; b.y = a.y ; b = a ; } ; { b = a ; { class point b.y = a.y ; b.x = a.x ; ....

: rap noitcurtsni ettec recalpmer ed ici elbissop sulp tsen li ,serutcurts sel ruop tid t a iuq ec tnemeriartnoC .b e d stnadnopserroc serbmem sel snad a ed y te x serb mem sed sruelav sed eipocer al areuqovorp : n oi tc ur ts ni l
point a, b ;

: )cilbup y te virp x ,tnemelleici fitra ,uvrp snova suon iciuq zeton( snoitar - al c d s e c c e v a , is n i A . , s enn od s erbm e m sed s rue lav sed eipocer enu tnemellerutan tuot dnopserroc ellE .ep yt emm ed stejbo )siarv( xua issua dnets elle siaM .selleusu serutcurts sel ruop euq noitaci fingis emm al ceva ,tne mmedecrp setnesrp sesilarng serutcurts xua dnets tilibissop ettec ,erdnetta ys tuep no e mmoC
n on u o sc il bup tne i os i c-x ue c euq
1

: euq elr e m m el euoj ellE .b ed xuec snad a ed spmahc sed sruelav sed elbmesnel eipocer noitcurtsni etteC : erirc tia f tuot zevuop suov
} ; point a, b ;

: setnavius snoitaralcd sel ceva ,isniA .ep yt emm ed er ut c ur ts ert u a e n u d r u el a v a l ) e ll e us u( er u t c urt s e n u r et c e f f a t n e m m o c u v j d s n o v a s u o N

212

3 Affectation dobjets

Classes et objets CHAPITRE 11

struct point

public : int y ; int x ; int y ; int x ;

tn iop

essalc al ed erbmem noitcnof enud nies ua etirc tiat

x.a = x.b

.emret ud egral snes uA .2 noitatceffal is fuaS .1

-acolla : elpmexe rap ,tne mennoitcno f nob nos seriassecn snoitarpod erbmon niatrec nu reutce ffe tiod tejbo nu ,silitu ertd em m tnava ,o sac el snad emm ed sulp av nen li ,sein -ifd non sruelav sed rus euq ici etrop en euqsir el is ,ertuo nE .tnemo m nob ua uluov leppal reutce ffe ruop tejbol ed ruetasilitul rus retpmoc sio fetuot egilbo ehcra md ellet enU .esilaitini noitcnof al ceva tniop ep yt erton ruop tiaf snova suon euq ec tseC .tejbo n u d s e n n o d x u a sr u el a v s e d r e u bir tt a r u o p er b me m n o it c n o f e n u le p pa eri a f e d eri ass ec n cnod tse li ,larng nE .orz sesilaitini sennod sruel tneiov seuqitats stejbo sel slues : tua fd rap noitasilaitini ruel tnanrecnoc selleutibah selgr sel tnevius stejbo sel ,iroirp A
2

. t e j b o e m m n u r us s e c n er f r x u e d e d e c n es r p n e sr o l a e v u or t er es n o ,noitatce ffa srpa : ecner fr ed eipocer enud tnemelp mis tigas li ,avaJ nE .ruelav ed eip -ocer enu dnopserroc stejbod noitatcef fad euqitna ms al euq erid tuep no ,++C nE
avaJ n E

.)noitasilitu nos ed noitcidretnil snad ,tnemelleutnev ,uo( = ruetarpol ed )enrecnoc essalc al ruop( noitini fdrus al snad euq etnasia fsitas n oi t ul os e d ar e v u ort e n i u q ,l a t n e m a d n o f t n i o p e c r us t n e m er u e ir tl u s n or d n ei v er s u o N . elleicifrepus ares elle ,tejbol ed euqiman yd eitrap ettec sap arenrecnoc en noitseuq ne eipocer al : seuqi man yd stne mecalp me sed rus sruetniop sed aretrop moc tejbo nuuq sd sac el tnem maton ares eC .etnasi ffusni arervas eipocer elanab ettec o secnatsnoc -ric sed snorrev suoN .selpmis sac sed ruop euq tsel en li ,tia f nE .ici lerutan ertarap tuep )sennod serbme m sed eipocer( rini fd el ed snonev suon euq let = ruetarpol ed elr e L

: euq neib areton nO . virp tse x rac ,sap tsel en eri merp al ,cilbup tse y ici euqsiup ,elagl tse noitatce ffa e mixued al is ,te ffe nE
1

4.1 Introduction

4 Notions de constructeur et de destructeur


e uqrameR
Laffectation a = b est toujours lgale, quel que soit le statut (public ou priv) des membres donnes. On peut considrer quelle ne viole pas le principe dencapsulation, dans la mesure o les donnes prives de b (les copies de celles de a, aprs affectation) restent toujours inaccessibles de manire directe. 4 - Notions de constructeur et de destructeur

213

.ertipahc niahcorp ua eidut ares epyt ec ed noitautis enU .eriomm al ed tnemeuqimanyd euollas iuq )euqitamotua elpmexe rap( tejbo nu ceva euqimanyd tejbo nu sap zednofnoc eN .1

: sruojuot tneivnoc etnavius noitaralcd al euq resnep zeirruop suov ,iroirp A ? essalc ettec resilitu tne mmoC
ruetcurtsnoc nud einum )tniop( essalc enud noitaralcD
class point { /* dclaration des membres privs */ int x ; int y ; public : /* dclaration des membres publics */ point (int, int) ; // constructeur void deplace (int, int) ; void affiche () ; } ;

: isnia srola etnesrp es tniop essalc ellevuon erton ed noitaralcd a L .)noitini fd as snad te noitaralcd as snad( tniop tnam moner al ne ruetcurtsnoc nu ne esilaitini erbme m noitcnof erton tnemelpmis snomro fsnart te etnedcrp tniop essalc al snordisnoC

r uetc urtsn o c

.)~( edlit nud dcrp ,essalc al euq mon e m m el etrop li ,ruetcurtsed ua tnauQ . e s s a l c a l e u q m o n e m m e l etr o p li u q e c t a n n o c er e s r u et c urt s n o c e l , n o i t n e v n o c r a P . ra lc d t a li o noitcno f al uo colb el ettiuq nol euqsrol ueil a tejbol ed noitcurtsed al ,seuq - it a m o t u a s t ej b o s e d s a c el s n a D . t e j b o l e d n o it c urts e d al e d t n e m o m u a t n e m e u qi t a m ot u a e le p p a er b m e m n o it c n o f e n u er i d- -ts ec , n u r e d ss o p iss u a arr u o p t e j b o n U .)31 ertipahc ua snordneiver y suon( wen rap src tnores euqiman yd essalc ed xueC .noitaralcd enu rap src tnos ici snoti mil suon suon sleuqxua seuqita motua stejbo sel euq zetoN .euqiman yd uo euqitamotua ,euqitats : tejbol ed noitac -ollad essalc al tios euq elleuq ueil arua iceC .tejbo nud noitarc euqahc tne meuqitamotua eleppa ares iuq )serbme m snoitcno f sertua sel e mmoc eini fd( erbmem noitcno f enud tigas lI . el : se mlborp sec retiart ruop tnamro frep srt e msinacm nu er ffo ++C .euqihportsatac rineved srola tuep noitasilaitinid erudcorp ed ecnesbaL ...bew etis nu noixennoc ,erutrevuo uo reihci f ed ecnetsixed noitacifirv , eriomm ed euqiman yd noit
ruet curts ed
1

214

4.2 Exemple de classe comportant un constructeur

Classes et objets CHAPITRE 11

point a ;

4 - Notions de constructeur et de destructeur

215

: tniop essalc ellevuon erton tnanetniam esilitu liuq ruop 2 ehpargarap ud em margorp el tpada ert tiarruop tne mmoc iciov ,elp mexed ertit

: elpmexe rap ,noitaralcd erton snad sinruo f ert tnemeriotagilbo tneviod ic-xueC .stnemugra xued ed nioseb a ruetcurtsnoc erton ,icI .a tejbol ed noitarc al ed srol )tnemeuqit -a motua( leppa ert riovuop tiod li ,ini fd tse ruetcurtsnoc nu o tne mom ud ritrap ,tia f nE
point a(1,3) ;

: uo f-edrag tnellecxe nu tia f ne tse etniartnoc etteC


partir du moment o une classe possde un constructeur, il nest plus possible de crer un objet sans fournir les arguments requis par son constructeur (sauf si ce dernier ne possde aucun argument !).
#include <iostream> using namespace std ; /* ------------ Dclaration de la classe point ------------- */ class point { /* dclaration des membres privs */ int x ; int y ; /* dclaration des membres publics */ public : point (int, int) ; // constructeur void deplace (int, int) ; void affiche () ; } ; /* ----- Dfinition des fonctions membre de la classe point ---- */ point::point (int abs, int ord) { x = abs ; y = ord ; } void point::deplace (int dx, int dy) { x = x + dx ; y = y + dy ; } void point::affiche () { cout << "Je suis en " << x << " " << y << "\n" ; } /* -------- Utilisation de la classe point -------- */ main() { point a(5,2) ; a.affiche () ; a.deplace (-2, 4) ; a.affiche () ; point b(1,-1) ; b.affiche () ; }

.sac ec snotimil suon suon iciuq snoleppaR .1

.trap ertuad niam rap eleppa tcf noitcno f enu snad ,trap enud niam noit -cno f al snad : stner ffid stiordne xued tset ep yt ed seuqitamotua stejbo sed snorc suoN .)r u el a v e m m al e n n ei t n o c e n s rc s te j b o s e d n u c ua u q r u o p s g narra s e m m os s u o n s u o n o erusem al snad( nrecnoc tejbol rei fitnedid temrep suon ruetcurtsnoc el rap silaitini mun ennod erbmem el ,ertuo nE .leppa ruel ed ecart enu isnia tnassinruo f suon egassem nu tnehci ffa ic-sellec ; serb me m snoitcno f xued sec euq tnatrop moc en tset em mon essalc enu s n os si n i f d y s u o N . es s a l c e n u d r u e t c urts e d e l t e r u et c urts n o c el t n e m e v it c e ps er s l e p p a t n o s o st n e m o m s el e c ne d iv n e t na tt e m e m m arg or p t it e p n u s uo sse d- ic s no so p or p su o v s u o N
1

. e s i c r p n o i t c a e n u sr o l a ar u a t u a f d r a p r u e t c u r ts n o c e l e u q s i o f e t u o t e c n er f f i d e t t e c c e v a , e i p o c er e d r u e t c u r ts n o c u d s a c e l s n a d e n m o n h p e m m e l sr u e l l i a d s n o r e v u or t e r s u o N . t u a f d r a p r u e t c ur t s n o c e c t n a s i l it u n e t i a f e s stnad nopserroc stejbo sed noitarc al ,ruetcurts noc ed ini fd sap an essalc en uuqsr ol e u q er i d sr o l a t u e p n O . n e i r t n a s i a f e n t u a f d r a p r u e t c u r ts n o c n u d t i as o p -sid elle is e m moc tia f ne essap es tu ot ,r uetcurtsnoc nucua ti ni fd e n essalc e nuuqsro L 3 . t u a f d r a p s t n e m u gr a s e d r e d s s o p u o i n i f dr u s er t t u e p r u e t c ur ts n o c n u ) er i a n - i dr o u o e r b m e m( n o i t c n o f e t u o t e m m o c , e u q er t i p a h c n i a h c o r p e l s n a d s n or r e v s u o N 2 ...ruerre e nu t i a r i u d n o c t e j b o n u e m m o c a e l ob m ys e l r es i l i t u d e v i t a t n e t e t u o t e uq t n e d i v ts e l i s i a m ,ruerre enu sap tiares en ec ,i os nE . tniop ep yt ed tatl usr nu t na yovner te ,tne mugra n u c u a t n a v e c e r e n , a e m m o n n o i t c n o f e n u d n o i t a r a l c d a l t i ar e t n e s r p e r a l e c , t i a f n E : st nem ugra sed tnatropm oc r u e t c ur t s n o c n u d n o i t a s i l i t u l c e v a e i g o l a n a r a p , er ir c d e d n ar g ts e n o i t a t n e t a l ,s e t r e C : r u e t c ur ts n o c e d s a p ti as o psi d e n ess al c al i s e u q er i n a m emm al ed erircs ed areunitnoc tniop ep yt ed stejbod noitaralcd al ,sac ec snaD .tnemugra snas ruetcurtsnoc nud tnasopsid tniop essalc enu essini fd nol euq snosoppuS 1
point a ; // dclaration utilisable avec un constructeur sans argument point a() ; // incorrect

ruetcurtsnoc nud einum )tniop ( essalc enud noitasilitud elpmexE


Je suis en 5 2 Je suis en 3 6 Je suis en 1 -1

216

4.3 Construction et destruction des objets


se uqrameR
Classes et objets CHAPITRE 11

4 - Notions de constructeur et de destructeur

217

#include <iostream> using namespace std ; class test { public : int num ; test (int) ; // dclaration constructeur ~test () ; // dclaration destructeur } ; test::test (int n) // dfinition constructeur { num = n ; cout << "++ Appel constructeur - num = " << num << "\n" ; } test::~test () // dfinition destructeur { cout << "-- Appel destructeur - num = " << num << "\n" ; } main() { void fct (int) ; test a(1) ; for (int i=1 ; i<=2 ; i++) fct(i) ; } void fct (int p) { test x(2*p) ; // notez lexpression (non constante) : 2*p } ++ ++ -++ --Appel Appel Appel Appel Appel Appel constructeur constructeur destructeur constructeur destructeur destructeur num num num num num num = = = = = = 1 2 2 4 4 1

4.4 Rles du constructeur et du destructeur


: )tnemugra ne einruo f tse iul iuq ruelav al te orz ertne sesirp moc tnos sruelav sec( lav ennod erb -mem el snad egnar liuq seriotala seritne sruelav xid euqirba f ruetcurtsnoc el elleuqal snad ,drasah em mon essalc enu tnatiolpxe emmargorp nu icioV .robal sulp puocuaeb ert tuep ruetcurtsnoc el rap silar liavart el siaM .stne mugra ne seuer tiava liuq sruelav sed edial t e j b o l e d n o i t as il ai t i n i e n u ti at i m il es r u e t c urts n o c u d e l r e l ,s t n e d c r p s e l p m e x e s e l s n a D

stejbo sed noitcurtsed te noitcurtsnoC

218

Classes et objets CHAPITRE 11

#include <iostream> #include <cstdlib> // pour la fonction rand using namespace std ; class hasard { int val[10] ; public : hasard (int) ; void affiche () ; } ; hasard::hasard (int max) // constructeur : il tire 10 valeurs au hasard // rappel : rand fournit un entier entre 0 et RAND_MAX { int i ; for (i=0 ; i<10 ; i++) val[i] = double (rand()) / RAND_MAX * max ; } void hasard::affiche () // pour afficher les 10 valeurs { int i ; for (i=0 ; i<10 ; i++) cout << val[i] << " " ; cout << "\n" ; } main() { hasard suite1 (5) ; suite1.affiche () ; hasard suite2 (12) ; suite2.affiche () ; } 0 2 0 4 2 2 1 4 4 3 2 10 8 6 3 0 1 4 1 1

.s e t i a h u os sr u e l a v e d er b m o n e l ,ela mixam ruelav al ertuo ,tnemugra ne evioer ruetcurtsnoc el euq riovrp ardua f li ,rs neiB

: isnia tnoreti mil es drasah essalc al ed sennod s e L . e m m-i u l r u et c urts n o c e l r a p e u q i m a n y d n oi t a c ol l a et t e c r e u t c e f f e eri a f e d l er ut a n t u o t srola tse lI .nnoisnemidrus ertd ueil ua tne meuqiman yd uolla tios )elbairav( ecapsel euq elbar frp tse li ,sac ec snaD .ruetcurtsnoc ud tne mugra ne inruo f ert arruop )01 xif ici( sruelav ed erbmon el elleuqal snad essalc enud resopsid sruelliad arer frp no ,euqitarp nE
class hasard { int nbval int * val ... } ; // nombre de valeurs // pointeur sur un tableau de valeurs

seriotala sruelav ed ruetcurtsnoc nU

4 - Notions de constructeur et de destructeur

219

.tnedcrp elp mexel snes ec ne retpada snoirruop suon tnem moc icioV . ess al c al e d r ue tc ur tse d u a l ia var t ec r e i f -noc ed lerutan tuot tarap li ,erocne L .elituni uneved ares liuqsrol noitarbil as ed reicuos es t u a f l i , t n e m e u qi m a n y d u o ll a t a t n e m e c al p m e n u o t n e m o m u d ri tr a p ,sr u el li a r a P
#include <iostream> #include <cstdlib> // pour la fonction rand using namespace std ; class hasard { int nbval ; // nombre de valeurs int * val ; // pointeur sur les valeurs public : hasard (int, int) ; // constructeur ~hasard () ; // destructeur void affiche () ; } ; hasard::hasard (int nb, int max) { int i ; val = new int [nbval = nb] ; for (i=0 ; i<nb ; i++) val[i] = double (rand()) / RAND_MAX * max ; } hasard::~hasard () { delete val ; } void hasard::affiche () // pour afficher les nbavl valeurs { int i ; for (i=0 ; i<nbval ; i++) cout << val[i] << " " ; cout << "\n" ; } main() { hasard suite1 (10, 5) ; suite1.affiche () ; hasard suite2 (6, 12) ; suite2.affiche () ; } 0 2 0 4 2 2 1 4 4 3 2 10 8 6 3 0 // 10 valeurs entre 0 et 5 // 6 valeurs entre 0 et 12

eriomm ed euqimanyd noitacolla enu eutceffe ruetcurtsnoc el tnod essalc ed elpmexE

: noitcurtsnil ,ruetcurtsnoc el snaD


val = new [nbval = nb] ;

; etiartsba essalc ed etid noitautis ettec rus drat sulp snordneiver suon ; cilbup ruetcurtsnoc nud resopsid tnorruop ,selle tnauq ,iuq sevird sessalc sed ,egatirh rap ,ecnas -sian rennod enitsed tse elle rac elleuq ellet esilitu sap ares en enrecnoc essalc al : reifitsuj es tuep virp ruetcurtsnoc nu o secnatsnocric seuqleuq icioV
seriatnemlpmoc snoitamrofnI

.e mm-elle essalc al ed serb me m snoitcno f sed rap fuas ,elbasilitu sulp ares en liuqsiup secneuqsnoc sedruol ed a ruetcurtsnoc nud noitasitavirp al ,ehcnaver nE .e li t u t ne m erar ts e al ec o er us e m a l s na d , e v ar g s a p t n e m el ar n g ts e n iuq ec ,tnemetcerid leppa ert sulp arruop en li ,virp tse ruetcurtsed nu is ,euq areton nO .scilbup erdner sel xueim tuav li ,eriartnoc el eria f ed snosiar sennob ed riovad sniom ,euqitarp nE .svirp uo scilbup ert tnevuep sruetcurtsed te sruetcurtsnoc ,eiroht nE .)ruerre enu tse diov ed ecnesrp al te( mon nos tnaved rerugi f tuep en ep yt nucua ,erocne L .ruelav ed sap eiovner en te stne mugrad resopsid sap tuep en ruetcurtsed nu ,noitini fd raP .)ruerre enu tse diov ed ecnesrp al ,sicrp sac ec snad( mon nos tnaved rerugi f tuep en ep yt nucua ; ruelav ed sap eiovner en ruetcurtsnoc nu ,noitini fd raP .nucua tnemelleutnev ,stne mugrad euqnocleuq erb mon nu retropmoc tuep ruetcurtsnoc nU

. e p y t e c e d s t e j b o d n o i t a t c e f f a l t n e m e t c err o c r e t i a r t e d sap tiarttemrep en elpmexe reinred el sna d eini fd drasah essalc al ,ti d tne mertu A . = r u e t ar p o l e d n o i t i n i f dr us a l r a p e ss a p n o i t u l o s a l t e e m l b or p e s o p a l e c , t n e m - e l a r n g ; s e u q i m a n y d s e i tr a p s e c s a p e nr e c n o c e n e p y t e m m e d s t e j b o er t n e n o i t a t - c e f f a l , t n e m e u q i m a n y d s u o l l a s t n e m e c a l p m e s e d r u s sr u e t n i o p s e d , e l p m e x e r e i nr e d e r t o n s n a d e m m o c , t n e i t n o c e s s a l c e n u u q s d , n n o i t n e m j d s n o v a l s u o n e m m o C 3 . er i o m m a l e d t n e m e u q i m a n y d r e u o l l a ) s er b m e m s n o i t c n o f s er t u a d u o r u e t c ur t s n o c n o s e d s i a i b e l r a p( n e m a ts e t e j b o l , e l p m e x e er t o n s n a d e m m o c , e u q s d t n e i v e d e l l i , e h c n a v er n E . e l b a s n e p s i d n i t n e m e r a r t s e r u e t c ur t s e d e l , t e j b o n u d s e n n o d x u a s e l a i t i n i sr u e l a v s e d r e u b ir t t a d e t n e t n o c es r u e t c ur ts n o c n u u qs r o L 2 .dr at s ulp s nor elr ap s u o n t n o d ,t ej b o n u d e u qi m a n y d n oi t a c ol l a e n u c e v a )r u et c ur ts n o c e l t n e v u os( t e j b o n u d er b me m n o it c n o f e n u d n i es u a e u tc e f fe e u q i m a n y d n o i ta c o l la e n u sa p z e d n o f n oc e N 1

220

4.5 Quelques rgles


se uqrameR

: e u q el r e m m e l e u o j
Classes et objets CHAPITRE 11

nbval = nb ; val = new [nbval] ;

.sialgna ne ,nrettaP .1

: euq e ll et no i tara l c d e nu
class exple1 { int n ; float x ; ..... } ;

: rap 1elpxe essalc enu ini fd snova suon is ,elp mexe raP .sennod serbmem serporp ses edssop tejbo euq -ahc ,essalc emm enud stejbo stnerffid erc no em margorp e mm nu snad euqsrol ,iroirp A

.elpmis noitasilaitinid snoitautis sed snad emm ,ruetcurtsnoc nu riovrp ed eriassecn sruojuot tnemeuqitarp tse liuq etros ed ,drat sulp snor -r e v el s u o n e m m o c , + + C n e s a p t n ets i x e n ) e ti ci l p x e n oi t as i l a it i ni t e t u a f d r a p n oi t a si l a it -ini( stilissop xued seC .)ep yt ud stejbo sel suot eubirtta srola tnat ruelav e m m al( noitaralcd ruel ed srol ssilaitini ert tnemelag tnevuep sli te ) ellun ruelav( tua fd rap ssilaitini sruojuot tnos sennod serbmem sel ,avaJ ne ,siaM .ruetcurtsnoc ed retrop -moc sap en tuep essalc enu te ++C neuq stirporp se m m sel edssop ruetcurtsnoc e L
avaJ n E

.t ej b ol ed ticinul ed erussas ,ertuo ne ,iuq te ,leutibah ruetcurtsnoc nud liavart el erid- -tsec ,seriassecn snoitacolla sel e m m-elle esilar iuq erbmem noitcnof enud leppa rap srola tia f es stejbod noitarc a L .)ini fdrus sap tsen ruetcurtsnoc ec is snio m ud( ep yt ud stejbo sed tne meticilpxe rerc ed elbissopmi tse liuq tia f ecnesrp al tnod )ediv sproc ed( virp ruetcurtsnoc nu riovrp tuep no ,sac ec snaD .tejbo euqinu tec ed ecner - f r a l r e y o v n er e d e t n e t n o c e s t ej b o l e v u o n n u d n o it a r c e d e v i t a t n e t e t u o t e u q t e t ej - b o l u es n u u q ec n assi a n r e n n o d ess i u p e n es sa lc e m m e n u u q etr os n e eri a f e d t i gas li ; notelgnis el : reilucitrap noitpecnoc ed fitom nu ervu ne erttem ehcrehc no ; cilbup tse nu snio m ua tnod ,)ini fdrus ert tuep ruetcurtsnoc nuuq ttneib snorrev suon( sruetcurtsnoc sertuad esopsid essalc al
1

5.1 Le qualificatif static pour un membre donne

5 Les membres donnes statiques

exple1 a, b ;

5 - Les membres donnes statiques

221

: sn a d e m m o c ,noitaralcd as ed srol euqitats erbmem nu resilaitinid elbissop tse liuq resnep tiarruop nO . ess al c al e d r u e t c ur ts n o c el r a p e ti a f er t s u l p t u e p e n n o it as il ai ti n i r u e l ,s n o it i d n o c s e c s n a D .) r c t erocne an essalc al ed tejbo nucua is e m m( essalc al ed stejbo sed tnemmadnepdni ,erialpmexe lues nu neuq tnetsixen seuqitats sennod serb me m sel ,e m m erutan ruel raP

.ess a lc al e t i m il t se e tr op al t n o d s e l a b ol g s el b air a v e d s e tr os s e d t n o s s e u qi t a ts s e n n o d s er b m e m s el e u q eri d t u e p n O b t ejb O x .b n .b a te jb O x .a n .a : is ni a r esi t a m h cs t u e p n ol e u q n o it a ut is e n u t i u d n o c


exple2 a, b ;

: r ap 2 e l p x e essalc enu snossini fd suon is ,elpmexe raP .essalc al ed stejbo sel suot ruop erialp mexe lues nu ne retsixe riov etiahuos nouq sennod serb me m sel citats fitaci filauq el ceva reralcd etsisnoc sennod sed regatrap ed stejbo srueisulp ertte mrep ed )sertuad imrap( noaf enU b tejbO x.b n.b a te jb O x .a n .a

222

5.2 Initialisation des membres donnes statiques

: is ni a r esi t a m h cs t u e p n ol e u q n o it a ut is e n u t i u d n o c
Classes et objets CHAPITRE 11

class exple2 { static int n = 2 ; ..... } ; class exple2 { static int n ; float x ; ... } ;

// erreur

: n oi t ar al c d a l

.siof elues enuuq seinifd ert tneiaved en selle siam ,siof srueisulp seralcd ert tneiavuop selle : C egagnal ne selabolg selbairav sel ruop enmonhp emm el tiavuort nO .1
#include <iostream> using namespace std ; class cpte_obj { static int ctr ; // compteur du nombre dobjets crs public : cpte_obj () ; ~cpte_obj () ; } ; int cpte_obj::ctr = 0 ; // initialisation du membre statique ctr cpte_obj::cpte_obj () // constructeur { cout << "++ construction : il y a maintenant " << ++ctr << " objets\n" ; }

.ruetcurtsed ud leppa euqahc 1 ed etne mrcd te ruetcurtsnoc ud leppa euqahc 1 ed etnemrcni tse ruelav aS .rtc erbmem el euqitats tubirttal ceva ralcd snova suon ,eria f ec ruoP .stnatsixe stejbod erb mon el ,tne mom tuot ,ertannoc ed ni fa , jbo_etpc em mon essalc enu snad tilibissop ettec tnatiolpxe emmargorp ed elpmexe nu icioV

: elp mexe raP .tnadnop -serroc eriom m tnemecalp mel ed noitavresr al reuqovorp ruop ,)sio f ettec ,ruelav snas( essalc al ed rueirtxel reralcd sel ed eriassecn e m m dnauq etser li siaM .noitaralcd ruel ed tnemom ua ssilaitini ert tne melag tnevuep stnatsnoc seuqitats serbme m se L

.orz tua fd rap silaitini sap tsen euq - it ats er b m e m n u , er i a ni dr o el b air a v e n u r u o p t i u d or p e s i u q e c t n e m eri art n o c ,sr u e l li a r a P .scilbup euq svirp seuqitats serb me m sel ruop neib issua elbasilitu tse ehcra md etteC
int exple2::n = 5 ;

: euq ellet noitcurtsni enu rap )essalc al ed noitaralcd al ed rueirtxel ( tnemeticilpxe silaitini ert cnod tiod euqitats erbme m nU . st ej b o s e lu d o m stnerf fid snad stne mecalpme stner ffid revresr riov es ed tiareuqsir euqitats erb mem el ,eraps noitalipmoc ed stilibissop sed unet etp moc ,rac si mrep sap tsen alec ,tia f nE
1

5.3 Exemple
class exple3 { static const int n=5 ; ..... } const int exple3::n ; // initialisation OK (depuis la norme ANSI) // dclaration indispensable (sans valeur)

e uqrameR

5 - Les membres donnes statiques

223

.+ + C s ap te mr ep en euq ec ,selbatucxe snoitcurtsni sed srola tneitnoc iuq noitasilaitinid colb nud siaib el rap ertl issua tnevuep sli siam ; noitaralcd ruel ed srol ssilaitini ert tnevuep sli ,++C ne em moC .)lc-to m ec ed noitaci fingis elues al sruelliad tsec( noitaralcd ruel ruop ci t at s l c t o m e l esi l it u n o t e , a v aJ n e t n e m e l a g t n et si x e s e u q it a ts s e n n o d s er b m e m s e L
avaJ n E

. n o i t a c i f i n g i s e m m a l c e v a s er b m e m s n o i t c n o f x u a r e u q i l p p a s a rr u o p l i u q er t i p - a h c n i a h c o r p u a s n o rr e v s u o N . es s a l c a l e d e c n a t s n i e u q n o c l e u q e n u d t n a d n e p d n i t i o s e n n o d er b m e m n u u q r e d n a m e d r u o p , e m is i o r t e n u r ir v u o c d n e i u l e d s n o n e v s u o N .)7 ertipahc ud 4.21 ehpargar -ap ua uv snoval suon e mmoc( ecruos reihci f nu snad elabolg elbairav enu rehcac ruop ; el a c o l el b a ir a v e n u e u q it at s n oi t a c ol l a d ess al c al r e u bir tt a r u o p : s n oi t a u t is s e c s n a d s il it u t i a t e c i t a t s l c - t o m e m m e c e u q u v j d s n o v a s u o N

e uqrameR

euqitats erbmem ed noitasilitud elpmexE


-- destruction : il reste maintenant 0 objets

224

Classes et objets CHAPITRE 11

-- destruction : il reste maintenant 1 objets -- destruction : il reste maintenant 1 objets ++ construction : il y a maintenant 2 objets -- destruction : il reste maintenant 2 objets ++ construction : il y a maintenant ++ construction : il y a maintenant ++ construction : il y a maintenant } void fct () { cpte_obj u, v ; } main() { void fct () ; } fct () ; cpte_obj b ; cpte_obj a ; cpte_obj::~cpte_obj () // destructeur { cout << "-- destruction : il reste maintenant " << --ctr << " objets\n" ; 2 objets 3 objets 1 objets

: tniop essalc al ed noitini fd al tnalipmoc ne ,tejbo eludo m nu srola areuqirba f ruetpecnoc el ,h.tniop e mmon es reihcif ec iS tniop essalc al ruop ett-ne reihciF
class point { /* dclaration des membres privs */ int x ; int y ; public : /* dclaration des membres publics */ point (int, int) ; // constructeur void deplace (int, int) ; void affiche () ; } ;

: t na vi us ett-ne reihci f el rerc arruop 2.4 ehpargarap ud tniop essalc al ed ruetpecnoc el ,elpmexe raP .noitacilppal relip moc ruop )edulcni# rap( erulcnid ari ffus liuq )h. noisnetxe( ett-ne reihci f nu snad essalc al ed noitaralcd ed snoitcurtsni selues sel relosi nema tnemelarng srola ares nO .snoitacilppa setner ffid sed raps tnasopmoc nu e mmoc esilitu larng trtnid essalc enu ceva ariudorp es iuq ec tnemeller - ut a n t u o t ts e C . n o i t as il i t u n os e d es s a l c al r el p u o c d t r t ni t n e v u os ar u a n o , e u qi t ar p n E .essalc al ed noitasilitul ; ess al c al e d n o it i ni f d a l ; ess al c al e d n o it ara lc d a l : se ni ts ed snoitcurtsnid setros siort e mmargorp e m m nud nies ua puorger snoiva suon ,iciuqsuJ

6.1 La classe comme composant logiciel

6 Exploitation dune classe

#include <iostream> #include "point.h" // pour introduire les dclarations de la classe point using namespace std ; /* ----- Dfinition des fonctions membre de la classe point ---- */ point::point (int abs, int ord) { x = abs ; y = ord ; } void point::deplace (int dx, int dy) { x = x + dx ; y = y + dy ; }

6 - Exploitation dune classe

225

...ekam reihcif ed ,tejorp reihcif ed ,tejorp ed tnevuos elrap nO .2 .sneil ed noitidl ed tnemom ua snrecnoc stejbo seludom sel reificps sap an no ,sdradnats snoitcnof sed sac el snad ,euq ecnerffid ettec cevA .1

.seleppa tne mevitce ffe snoitcno f sel euq tiud - ort n i n li r a c t n e m e l a mr o n ar el u or d e s s n ei l e d n o it i d l , er b m e m n o i t c n o f et t e c s a p es i l - it u n e m m ar g or p el i s , e h c n a v er n E . e c n es b a n os e d ar v e cr e p as n o u q s n ei l e d n o it i d l uq tsen ec ,erb me m noitcno f ettec leppa tia f emmargorp el iS .noitini fd ed essinruo f nen nouq snas eralcd ert tuep erbmem noitcno f enu ,erianidro noitcno f enu e mmoC

e uqrameR

.seutce ffe tnos seriassecn snoitalipmoc sel selues ,tios elleuq elleuq ,noitaci fido m enud srol ,sac ec snad ; snrecnoc stejbo sreihci f stner ffid sel te secruos sreihci f stner ffid sel ertne tnatsixe secnadnepd sel etp moc ne tnemeuqita m -otua erdnerp ed tnattemrep slituod tnesopsid stnemennorivned erbmon nob euq snolangiS .stini ffa seuqleuq tnadssop sessalc ed st n e m e p u or g er s e d r e u t c e f f e d el b iss o p sr u oj u o t ts e l i u q e tr o s e d ,s n ei l e d n o it i d l s e r o p -r o c n i t n or es s e s il i t u t n e m el l e r s n o i t c n o f s el s el u es , l ar n g n e , er o c n e L . d r a d n a t s e u q h t -oilbib al ed snoitcno f sel ceva tiudorp es iuq ec elbarap moc noa f ed ,ett-ne reihci f e m m nud te tejbo eludom emm nud nies ua setner ffid sessalc srueisulp arevuort no ,sio fraP . ess al c e n u r u o p sedohtm ed port riovrp ed erdniarc sap tuaf en liuq etros ed ,sesilitu tne meller snoitcno f sel euq tnesiudortnin sneil ed sruetid sed trapulp al ,uaevin ec ,epicnirp nE .em margorp erporp nos ed sneil ed noitidl ed tne mom ua ,tnadnopserroc tejbo eludom el areroprocni lI .r uetasilitul rap sinruo f ett- ne sreihci f s e l r u o p " . . . .. " e m r o f a l e r t u a l , s d r a d n a t s e t t - n e s r e i h c i f s e l r u o p > . . . . . < e m r o f a l e s i l i t u e n u l : s e n i s i o v s r t s e x a t n y s x u e d e d s s o p e d u l c n i # e v i t c e r i d a l e u q s n o l e p p a R
1

: e u q el l e t e vi t c eri d e n u r a p em margorp nos tnanetnoc ecruos reihci f el snad tniop essalc al ed noitaralcd al arulcni lI : isnia srola aredcorp ruetasilitul ,emmargorp nud nies ua tniop essalc al leppa eria f ruoP tniop essalc al ed tejbo eludom el rinetbo ruop relipmoc reihciF
void point::affiche () { cout << "Je suis en " << x << " " << y << "\n" ; }

226

Classes et objets CHAPITRE 11

#include "point.h"

.s et n er f f i d z ess a s n o it a ut is x u e d r e g a si v n e t u a f li ,tuot rgla m eriassecn ervas noitaci fidom enu iS .ei fido m ert sulp tiarved en te tniop ua tse elleuq tsec ,leicigol tnasopmoc nu em moc erdisnoc tse essalc enuuqsrol ,iroirp A

: e v it i ni f d n e u q ti o v n o , e u q it at s er b m e m n u e m m- i ul r esi l a i ti n i r u et asi l it ul r ess i a l e d e l b a n n osi ar er u g ts e n l i sr u e ll i a r a p e m m o C .ruerre ettec aretcetd sneil ed noitidl ,epicnirp ne ,te euqitats erb me m emm el ruop srng tnores stne mecalpme srueisulp ,essalc emm al tnasilitu ecruos sreihci f srueisulp tnemraps elipmoc ruetasil - it ul is ,t e f fe n e ; ne ir ts e ne n li ,t ia f n E .s elp it l u m sn o is ul c ni se l er tn o c g t orp t se li uq sr ol sd ,noitasilaitini ettec ruop tadidnac tnellecxe nu tse ett-ne reihci f el euq resnep tiarruop nO .)ecruos reihci f lues nuuq snoivan suon rac sap tiasop es en emlborp ec ,3.5 ehparg - ar a p u d e l p m e x e er t o n s n a d( r u e t a si li t u r e i h c i f , e s s al c a l e d n o i ti n i f d r e i h c i f , et t- n e r e i h c i f : noitasilaitini ellet enu recalp ecruos reihci f leuq snad riovas ed srola esop es emlborp el ,raps tnasopmoc nu em moc essalc enu rerdisnoc nema tse nouq sD .tnemeticilpxe silaitini ert sruojuot tiod euqitats ennod erbmem nuuq )2.5 ehpargarap( uv snova suoN

.H_ rap xi ffus ,)selucsujam ne( essalc al ed mon el isiohc snova suon ,icI .snolb -uod ed euqsir tuot retiv noa f ed isiohc ares ett-ne reihci f euqahc ruop ini fd elob m ys e L
#ifndef POINT_H #define POINT_H // dclaration de la classe point #endif

: s n a d e m m o c , e ll e n n o i ti d n o c n o it al i p m o c e d e u qi n h c et e n u r a p s el p it l u m s n o is u l c ni sed ett-ne reihci f tuot tne meuqita mts ys tnaegtorp ne e mlborp ec arelgr no ,larng nE . e nr e c n o c ess a l c al e d n o it i ni f d er al tne melpmis tuot seil ,noitalipmoc ed sruerre sed rituobad euqsir no ,snoitidnoc sec snaD .sevird sessalc ed te serbmem stejbod snoitautis sel s n a d s a c e l t n e m m a t o n ar es e C .) ! e c n ei cs n o c ti a n e n l i u q e m m s n as( e cr u os r e i h c i f e m m nud noitalip moc al ed srol ett-ne reihci f e m m nu sio f srueisulp erulcni essalc enud ruetasilitul renema tnavuop secnatsnocric setner ffid etsixe liuq snorrev suon ,drat sulP

6.4 En cas de modification dune classe 6.3 Cas des membres donnes statiques 6.2 Protection contre les inclusions multiples
Il est conseill de prvoir linitialisation des membres donnes statiques dans le fichier contenant la dfinition de la classe. 6 - Exploitation dune classe

227

.essalc ed noiton al sennod sed noitaluspacnel eicossa iuq ,elarng erinam enud .O.O.P al non tE .2 .tnemecalpme nu reuolla ruel ruop )seuqitamotua uo seuqitats( stejbo sed elliat al ertannoc ed ruetalipmoc el auq nioseb el rap eifitsuj es elle ,++C nE .O.O.P ed segagnal sel suot snad sap etsixen noitatimil ellet enU .1

siort sec ed nul ed selbairav sed rengisd ruop tejbod tnevuos elrap no ,emm eD .noinu uo tcurts ,ssalc ep yt nu tne mmer ffidni rengisd ruop essalc to m el tnevuos eiolpme ++C

e uqrameR

.seuqilbup ,tia f ed ,tnos selle : reilucitrap tutats nu reubirtta riov es sap tnevuep en setnadnopserroc sennod sel ,tcurts ep yt el ruop e mmoc ,euq neib zetoN .serb - m e m s n oi t c n o f e d r es o ps i d c n o d t u e p e p y t e C . s e s s a l c s e d i s s u a t n o s s n o i n u s e l , + + C r u o P .serb me m snoitcno f sed te sennod serb mem sed ,ep yt emm nud nies ua ,reic -ossad tse , ++C ennod iul euq egral snes ua ,essalc enud euqitsirtcarac a L .ssalc te tcurts r a p s i ni f d s e p yt s e l s ess al c e d t i a i fi l a u q + + C e u q er i d e d n oi s a c c ol u e j d s n o v a s u o N
2

.selleusu uep snoitautis sed rus noitamro fnid stne mlp moc seuqleuq ici snotroppa suoN

.esuac ne erttemer al snas )tniop ua ert esnec( essalc enu retpadad te mrep iuq egatirhd emsinac m ud noitasilitul rap sulosr ert tnevuos tnor -ruop semlborp sec euq sruelliad snorrev suoN .essalc al ed noitpecnoc ed etua f enu emmoc erdisnoc ert tiod ellE .elbissop ud erusem al snad etiv ert rs neib arved noitautis etteC .s n oi t a ci f i d o m s e d r e t iss e c n e d t n e u qs ir ess al c a l t n asi l it u s e m m ar g or p s el e u q r i a l c ts e li ,i c I
6.4.2 La dclaration des membres publics a chang

. e c a fr et n i n os e d n oi t a ci f i c ps al s a p t n a n g i e tt a n )...secnamro frep sed noitaroilma ,sruerred snoitcerroc( senretni snoitaci fido m sed retroppa etiahuos no elleuqal essalc enud elica f ecnanetniam enu temrep ++C euq cnod tiov nO .tejbo eludo m uaevuon el tnaroprocni ne sneil ed noitid enu etiusne aredcorp nO . tnadnopserroc ett-ne reihcif uaevuon el ceva slipmocer ert tneviod li ,sniomnaN .sifidom ert sap tnon essalc al tnasilitu semmargorp sel ,sac ec snaD . .. t n e m e ti art e d s e m h tir o gl a d noitaci fidom ed ,)sevirp( seluspacne sennod ed serutcurts ed noitamro fsnart ed rigas tuep lI .)emm al etser rueirtxel ceva ecafretni nos( essalc al resilitud erinam al rus noissuc -repr enuca tna yan ,senretni snoitaci fido m sed etimil es nouqsrol tiudorp es iuq ec tseC
1

228

7.1 Les autres sortes de classes en C++

7 Les classes en gnral


6.4.1 La dclaration des membres publics na pas chang
Classes et objets CHAPITRE 11

.essalc al ed stejbo sel suot ruop euqinu tse erbmem ec ,sac ec snad ; tnatsnoc euqitats erbmem nud tigas lis ,2.5 ehpargarap ua uv al no emmoc ,fuaS .2 .)regnahc tuep ruelav as ; emm el tnegatrap essalc emm enud stejbo sel suot( euqitats ennod erbmem ed noiton al te )eifidom ert sap tuep en ruelav as ; nu edssop ne tejbo euqahc( tnatsnoc ennod erbmem ed noiton al sap zednofnoc eN .1

.)serb me m stejbo xua fitaler( 31 ertipahc ud 6 ehpargarap ua etnesrp ares elleuq ellet ,)eriotagilbo cnod tneived iuq( ruetcurtsnoc ud erilucitrap exatn ys enu resilitu aretsisnoc noitulos elues al ,rinevrap y ruoP . noitaralcd as ed tne mom ua tnatsnoc erb me m el resilaitinid elbissop sap tios en liuq euqilpxe iuq ec tseC .p erbmem nu aredssop elpxe ep yt ud tejbo euqahc euq neib areton no ,sac ec snaD
2

: s n a d e m m o c , e s i r o t u a t s e s t na ts n oc se n n o d s er b m e m e d n oi tar al c d a l , e hc n a v er n E
1

: noitaralcd as ed srol ennod erb me m nu resilaitinid elbissop sap tsen li ,sruellia raP .tnevuos uep ertnocner es noitautis ettec ,euqitarp nE
class A { public : class B { ..... } ; // classe B dclare dans la classe A } ; main() { A a ; A::B b ; // dclaration dun objet b du type de la classe B de A }

: e l p m e x e t e c s n a d e m m o c ,) :: e tr o p e d n oi t ul os r e d r u et -arpol riruocer tuep no sia m( essalc al etimil tse etrop ruel ,sac ec snad ; sessalc sep yt sertuad sirpmoc y ,ep yt ed snoitaralcd sed rertnocner y tnemelag tuep no ,snio mnaN .euqnocleuq ep yt nud sennod serb me m ed snoitaralcd sed tnores essalc ed noitaralcd enu s n a d t n ar u g i f s n o i t c urt s n i s e d tr a p u l p a l ,s er b m e m s n o it c n o f e d s n oi t ar al c d s e d sr o h e d n E

.ssalc ep yt el rengisd ruop essalc eiarv ed snorelrap suon ,sicrp sulp ertd eriassecn ares liuqsro L .sennod sed noitaluspacnel temrep ssalc ep yt el lues ,si o fe t u ot ; e g at ir hl e d ua e vi n u a t ne m m at o n ,s t ir p or p s e m m se d t n e m e u q it ar p t nes -s i u o j s e p y t si ort s e c o er us e m a l s n a d , et i c il z ess a e l b m e s e g a g n al e d s u b a t e C . s e p yt
229

7.2 Ce quon peut trouver dans la dclaration dune classe

class exple { int n ; const int p ; ..... } ; class X { int n = 0 ; ..... } ;

// interdit

// membre donne usuel // membre donne constant - initialisation impossible // ce niveau - constructeur explicite obligatoire

7 - Les classes en gnral

. e tr o p e d n o it u l os r e d r u et ar p o euqnocleuq nu riruoer ed ,sio f ettec ,tilibissop snas ,noitcno f ettec eti mil tnemevisulcxe tne mellerutan tse etrop ruel ,sac ec snaD .noitcno f enu selacol sessalc sed reralcd ed si mrep tse li ,snio mnaN .labolg uaevin nu seralcd tnores sessalc sel ,sp met ud trapulp a L

.lanif tubirttal esilitu elle te tnemelag etsixe tnatsnoc erb me m e d n o i t o n a L . es s a l c al e d n oi t ar al c d al s n a d s er b m e m e d n o i t as il a it i ni l es ir ot u a a v a J


avaJ n E

230

7.3 Dclaration dune classe


Classes et objets CHAPITRE 11

: snossini fdrus suon leuqel snad ,elp mexe nu iciov nE .)tnemugrad sap edssop en liuqsiup ruetcurtsed ua sap sia m( ruet -curtsnoc ua sirpmoc y ,essalc enud serb me m snoitcno f xua tne melag euqilppas tilibissop et te C .s eri a ni dr o s n o it c n o f s el ri n i f dr us es ir o t ua s u o n + + C t n e m m o c u v j d s n o v a s u o N

. serb m e m sn o it -cno f sed rus sruetniop ed iolp mel euq isnia ,setnatsnoc serbmem snoitcno f sed te seuqitats serb me m snoitcno f sed sreilucitrap sac sel snorenimaxe suon ,ni fnE .siht lc-to m el tnas -ilitu ne ,eleppa tna yal tejbol ed esserdal ,erb me m noitcno f enud nies ua ,redcca tnem -moc etiusne snorrev suoN .sei ma snoitcno f sed erdac el snad ,drat sulp euq senimaxe tnores en ,noitaluspacned epicnirp ud noitaloiv enu tnadnopserroc ,snoitautis sertua sel ; erb mem ts e n o it c n o f a l t n o d ess a l c a l e u q e p y t e m m e d st ej b o d s a c u a s n or e ti mi l s u o n s u o n ,icI .essalc ep yt ed stejbo srueisulp uo nu ,)tne meticilpmi si msnart( eleppa tna yal tejbol ertuo ,tnemugra ne riovecer tuep erbmem noitcno f enu tne mmoc tnemelag snorrev suoN .ecner fr rap noissi msnart ,engil ne noitcno f ,tua fd rap stnemugra ,noitini fdrus : serianidro snoitcno f sel ruop ++C rap setre ffo stilibissop sed serbme m snoit -cno f xua noitacilppal liatd ne sulp uep nu reidut snolla suon ,icI .ruetcurtsed ed te ruetcurt -snoc ed ,tejbod ,essalc ed xuatnemadno f stpecnoc sel tnesrp a suov tnedcrp ertipahc e L

1 Surdfinition des fonctions membres

Les proprits des fonctions membres

12

232

Les proprits des fonctions membres CHAPITRE 12

. t ni o p u d s e n n o dr o o c s e l tnava tnadnopserroc etxet el ehci f fa elle ,sac ec snad : enahc ep yt ed tnemugra nu ceva ; tnavarapua emmoc tnemugra snas : releppal essiup nouq erinam ed ehciffa noitcno f al ; r t n o c n er j d s n o i v a s u o n e u q l e us u s a c el t s e c : s t n e m u gr a 2 ; s e n n o dr o o c x ue d x u a e n u m m oc r u el a v e d tr es l i : t n e m u gra 1 ; s el l u n x u e d s e t u o t t n os ti ur ts n o c t n i o p u a s e u bir tt a s e n n o dr o o c x u e d s el : t n e m u gr a 0 : stne mugrad er b m o n el t n a vi us i c i t n a si a f es r u et c urts n o c n o b u d xi o h c el , t n i o p r u et c urts n oc el
#include <iostream> using namespace std ; class point { int x, y ; public : point () ; // constructeur 1 (sans arguments) point (int) ; // constructeur 2 (un argument) point (int, int) ; // constructeur 3 (deux arguments) void affiche () ; // fonction affiche 1 (sans arguments) void affiche (char *) ; // fonction affiche 2 (un argument chane) } ; point::point () // constructeur 1 { x = 0 ; y = 0 ; } point::point (int abs) // constructeur 2 { x = y = abs ; } point::point (int abs, int ord) // constructeur 3 { x = abs ; y = ord ; } void point::affiche () // fonction affiche 1 { cout << "Je suis en : " << x << " " << y << "\n" ; } void point::affiche (char * message) // fonction affiche 2 { cout << message ; affiche () ; } main() { point a ; // appel constructeur 1 a.affiche () ; // appel fonction affiche 1 point b (5) ; // appel constructeur 2 b.affiche ("Point b - ") ; // appel fonction affiche 2 point c (3, 12) ; // appel constructeur 3 c.affiche ("Hello ---- ") ; // appel fonction affiche 2 }

. t na v i us ehp arg arap e l s n ad sr ue ll ia d sn orr ev el suon e mmoc ,ehciffa noitcno f al ruop ici sac el tseC .seini fdrus snoitcno f ed erb mon el reuni mid ed elbissop tnevuos ares li ,tuafd rap stnemugrad stilibissop sel tnasilitu nE 1 .sap tiatsixn )tni(f evirp noitcno f al is emmoc ,tni ne c ed noisrevnoc srpa ,)tni(f neib tiarelleppa )c(f.a ,elp mexe r e i nr e d e c s n a D . s e l b a t p e c c a s n o it c n o f s e d x i o h c e l s n a d e t p m o c n e sir p n ei b ts e erb me m noitcno f enud cilbup uo virp tutats el ,++C ne essap es iuq ec tnemeriartnoC

se uqrameR

avaJ n E

.)tni(f tiarelleppa )c(f.a ,tuot ud eini fd sap tsen )rahc(f is ; )c(f.a rap eleppa neib tiares elle ,euqilbup eini fd tse )rahc(f is : euq snoleppaR .)...rinevnoc up tiarua iuq )tni(f ed ecnetsixel rgla m ,icec te( tejer tse leppal te essalc al erueirtxe noitcnof enu siuped eleppa ert sap tuep en elle ,evirp tse ic-ellec em moc ,siaM .euqinu tse elleuq te noitcno f eruellie m al tse )rahc(f euq srola tulcnoc noitcno f eruelliem al ed ehcrehcer ed emhtiroglaL .)ednoces al ruop virp ,erimerp al ruop cilbup( tutats ruel ed tne mmadnepdni ,icec te ,)rahc(f te )tni(f snoitcno f xued sel rerdisnoc ruetalipmoc el enma )c(f.a leppaL
class A { public : void f(int n) { ..... } private : void f(char c) { ..... } } ; main() { int n ; char c ; A a ; a.f(c) ; } Je suis en : 0 0 Point b - Je suis en : 5 5 Hello ---- Je suis en : 3 12

: elp mexe tec zersidnoC

: ++C ne ,rO .euqilbup uo evirp ert tuep erb me m noitcno f enuuq ec e d et p m o c r i n e t t n a n et n i a m t u a f l i ,s e t n a d n e p d ni s n o it c n o f s e d n oi t i n i f dr us a l tr o p p ar r a P )ehci f fa te tniop( serbmem snoitcnof ed noitinifdrus ed elpmexE

Le statut priv ou public dune fonction nintervient pas dans les fonctions considres. En revanche, si la meilleure fonction trouve est prive, elle ne pourra pas tre appele (sauf si lappel figure dans une autre fonction membre de la classe). 1 - Surdfinition des fonctions membres

233

. e di v e n a h c a l ts e t u a f d r a p ruelav as te ,sennodrooc sed sruelav sel tnava rehcif fa egasse m el euqidni ic-iuleC .enahc ep yt ed tnemugra lues nud tnasopsid ehciffa noitcno f elues enuuq sulp edssop en tniop essalc erton euq ruop tnedcrp elpmexel rei fidom snoirruop suon tnem moc icioV .tua fd rap stnemugrad resopsid tnevuep serbmem snoitcno f sel ,serianidro snoitcno f sel e mmoC

. e l u oc d n e i u q t i v i sr u c r e d s us s e c or p e l i n i f e r d n er e d n e y o m e l u v r p a n o l o er u s e m a l s n a d , e m m- e l l e r e l e p p a s e m m t u e p er b m e m n o i t c n o f e n U . ) n o n u o e u q i l b u p t i os e l l e u q ( e r t u a e n u r e l e p p a n e s r u o j u o t t u e p e r b m e m n o i t c n o f e n u , t e f f e n E . ) ( e h c - i f f a e r b m e m n o i t c n o f e r t u a l l e p p a s n o s i a f s u o n , ) * r a h c ( e h c iff a n o i t c n o f a l s n a d , i c I 2
234
Les proprits des fonctions membres CHAPITRE 12

2 Arguments par dfaut

main() { point a ; a.affiche () ; point b (5) ; b.affiche ("Point b - ") ; point c (3, 12) ; c.affiche ("Hello ---- ") ; }

#include <iostream> using namespace std ; class point { int x, y ; public : point () ; // constructeur 1 (sans argument) point (int) ; // constructeur 2 (un argument) point (int, int) ; // constructeur 3 (deux arguments) void affiche (char * = "") ; // fonction affiche (un argument par dfaut) } ; point::point () // constructeur 1 { x = 0 ; y = 0 ; } point::point (int abs) // constructeur 2 { x = y = abs ; } point::point (int abs, int ord) // constructeur 3 { x = abs ; y = ord ; } void point::affiche (char * message) // fonction affiche { cout << message << "Je suis en : " << x << " " << y << "\n" ; }

// appel constructeur 3 // appel constructeur 2 // appel constructeur 1

: er i na m er i merp al t n atp o da n e elp me xe tnedcrp erton ed sruetcurtsnoc siort sel engil ne erdner snoirruop suon tnem moc icioV .ett-nel tnaved te noitaralcd al tnaved sio f al ertarappa tiod enilni fitaci filauq el ,sac ec snad ; essalc al ed noitaralcd al ed srohed ne noitinifd enu tnassinruo f ne erianidro noitcno f enu ruop e mmoc redcorp tios ; silitu ert sap an enilni fitaci filauq el ,sac ec snad ; ess a l c a l e d e m m n oi t ar al c d al s n a d n o i t c n o f a l e d n oi t i n i f d al t n e m e t c eri d r i nr u o f t i os : tuep no ,erb me m noitcno f enu engil ne erdner ruop ,te ffe nE .er v u n e esi m as t na nr ec n oc ec n a u n et i te p e n u t na d ne p ec t n a n ne y o m ,ser b m e m s n o it c n o f xua euqilppas tilibissop ettec ,erocne L .setruoc snoitcno f ed sac el snad e mmargorp nud ecneici ffel torcca iceC .engil ne snoitcno f sed rini fd ed temrep ++C euq uv snova suoN

: ruetcurtsnoc lues nu rini fd up snoirua s u o n , e ll u n e n n o dr o e n u u bir tt a sr o l a t i ar u a n o l e u q u a t ni o p u d es si cs b a l t n e m el p mis etnesrper reinred ec ,tnemugra lues nu tniop ruetcurtsnoc el snad ,euq uvrp snoiva suon is ,ehcnaver nE .tniop ruetcurtsnoc erton reuqilppal sap snovuop en suon ,ici ,elp -mexe raP .elbissop sruojuot sap tsen noitaci filp mis ettec ,udnetne neiB .tuafd rap tnem -ugra nu tna ya noitcno f elues enu rap seini fdrus snoitcno f xued calp mer snova suon ,icI

erbmem noitcnof enu snad tuafd rap stnemugrad noitasilitud elpmexE


Je suis en : 0 0 Point b - Je suis en : 5 5 Hello ---- Je suis en : 3 12

3 Les fonctions membres en ligne

#include <iostream> using namespace std ; class point { int x, y ; public : point () { x = 0 ; y = 0 ; } // constructeur 1 "en ligne" point (int abs) { x = y = abs ; } // constructeur 2 "en ligne" point (int abs, int ord) { x = abs ; y = ord ; } // constructeur 3 "en ligne" void affiche (char * = "") ; } ; point::point (int abs = 0, int ord = 0) { x = abs ; y = ord ; }

e uqrameR

3 - Les fonctions membres en ligne

235

. t n a v i u s e h p ar g ar a p u d e l p m e x e l s n a d r u e t c ur t s n o c l e t n u s r u e l l i a d s n or e s i l i t u s u o N
class point { ..... point (int abs = 0, int ord = 0) {x = abs ; y = ord ; } } ;

: e t t- n e l s n a d t n e m e t c er i d t u a f d r a p sr u e l a v s e l i f i c p s sr o l a s n o i r u a s u o n , ) e s s a l c a l e d n o i t a r a l c d a l s n a d e r g t n i n o i t c n o f e d n o i t i n i f d( e h cr a m d er i m er p a l c e v a ; e n g i l n e er d n e r e l n e i b i ss u a t u o t u p s n o ir u a s u o n ,) e h p ar g ar a p t n e d c r p u d e u q r a m er a l s n a d e m m o c ( t u a f d r a p s t n e m u gr a c e v a r u e t c u r ts n o c l u es n u d e u q n i o s e b u e s n o i v a n s u o n i S 2
class point { ..... public : inline point () ; ..... } ; inline point::point() { x = 0 ; y = 0 ; } .....

: )ruetcurtsnoc nuuq nnoitne m snovan suon ,ici( serianidro snoitcno f sed erina m al engil ne serb me m snoitcno f son ralcd snoiva suon is essalc erton ed noitaralcd al etnesrp tiares es tnem moc icioV 1

se uqrameR

engil ne serbmem snoitcnof ed elpmexE


Je suis en : 0 0 Point b - Je suis en : 5 5 Hello ---- Je suis en : 3 12

236

Les proprits des fonctions membres CHAPITRE 12

main() { point a ; a.affiche () ; point b (5) ; b.affiche ("Point b - ") ; point c (3, 12) ; c.affiche ("Hello ---- ") ; }

void point::affiche (char * message) // fonction affiche { cout << message << "Je suis en : " << x << " " << y << "\n" ; }

// "appel" constructeur 3 // "appel" constructeur 2 // "appel" constructeur 1

: isnia cnod aretnesrp es edic -nioc ed sproc e L .y.tp te x.tp rap sngisd tnos serb me m sel tnod ,tnemugra ne inruo f tejbol e d s el l e c c e v a ) y t e x r a p , e d u t i b a h d e m m o c , s n g i s d t n o s s e r b m e m s e s ( l e p p a n o s e d s r o l tnemeticilpmi inruo f tejbol ed sennodrooc sel rerapmoc cnod snoved suon ,edicnioc snaD : ) eri art n oc s ac el s na d 0 , ec n e d -icnoc ed sac ne 1( eritne ruoter ed ruelav enu tinruo f elleuq tnasoppus ne ,ett-ne nos ert tuep euq ec icioV .edicnioc noitcno f al erirc tne mmoc tnemsicrp sulp tnanetniam sno yoV : emlborp ud eirt m ys al ed unet etpmoc ,ici ,uo : emro f al ed leppa nu ariudnoc suon alec ,b em mon es liuq tnasoppus ne ; tnemugra ne tniop dnoces el ertte msnart tne mevitarpmi cnod ardua f lI .tniop ep yt ed tejbo nu tnat a : emro f al suos ,erb me m noitcno f etuot ruop e mmoc ,tne meriotagilbo aretnesrp es em margorp nud nies ua leppa noS .stniop xued ed elleutnev ecnedicnoc al retcetd ed egrahc ,edicnioc e mmon erb me m noitcno f enu eriudortni ,tniop essalc enud nies ua ,snoitiahuos suon euq zesoppus ,elp mexe raP .essalc as ed ep yt ud stnem -ugra srueisulp uo nu riovecer ,eticilpmi tne mugral ertuo ,tuep erbmem noitcno f enu siaM .)essalc euq ertua erid--tsec( erianidro ep yt nud stne mugrad erb mon niatrec nu ; leppa tna yal tejbol redccad tnatte mrep iul ,essalc as ed ep yt ud eticilp mi tnemugra nu : tiavecer erbmem noitcno f enu ,stnedcrp selpmexe sel snaD
a.coincide (...) a.coincide (b) b.coincide (a) int point::coincide (point pt)

. ) e s s a l c a l f i t a l er t e j b o e l u d o m u d e u q e s o p s i d e n r u e t a s i l i t u l e u q s r o l s d ( s er b m e m s n o i t c n o f s er t u a s e l r u o p sap etsi xen euqsir eC .rei fi do m sel ed sap aretnet en essalc ettec ed r uetasilitu n uuq e d u t i t r e c a l r i o v a s i a m a j a rr u o p e n e ss a l c e n u d r u e ss i n r u o f e l ; e n g i l n e s n o i t c n o f s e d n o i t i n i f d a l er t a n n o c sr u o j u o t a rr u o p ) e ss a l c e n u f i t a l er e t t - n e r e i h c i f u d t n e m er i o t - a g i l b o a r e s o p s i d i u q( e s s a l c e n u d r u e t a s i l i t u l e u q s i o f e t u o t t i o v n o , s a c s e l s u o t s n a D . e t t- n e r e i h c i f e m m e l s n a d , e s s a l c a l e d n o i t a r a l c d a l e d e t i u s a l e n g i l n e s n o i t - c n o f s e d s n o i t i n i f d s e l a r e c a l p n o , s a c e c s n a d , l ar n g n e ; e d n o c es a l c e v a i ar v s u l p t s e n e c , e h c n a v er n E . e h c r a m d e r i m er p a l e s i l i t u n o l e u q sr o l e s i l a r t n e m er i o t a g - i l b o t s e n o i t i d n o c e t t e C . e s i l i t u l i u q e m m a r g or p e l t i u d ar t l i u q sr o l r u e t a l i p m o c u d e u n - n o c e r t t n e m er i o t a g i l b o t i o d e n g i l n e n o i t c n o f e n u d n o i t i n i f d a l , e m m e r u t a n a s r a P 3
237

4 Cas des objets transmis en argument dune fonction membre


4 - Cas des objets transmis en argument dune fonction membre

e n e i r t m y s e t t e c r O . t n er f f i d n i t s e s t n i o p x u e d s e l er d i s n o c n o l e u q e l s n a d er dr o l e u q s n e s e c n e , e u q i r t m ys t s e s t n i o p x u e d e d e c n e d i c n o c a l e u q e r i d t u e p n o , e ir o h t n E 2 : e t n a v i us er i n a m a l e d e d i c n i o c erir c u p s n oir u a s u o N 1
return ((pt.x == x) && (pt.y == y)) ;

se uqrameR

: euq tnasid ne alec tnevuos tiudart nO .essalc ettec ed tejbo leuq etrop min ed )virp uo cilbup( erbme m leuq etropmin red -cca tuep essalc enud erbmem noitcno f elleuq etropmin ,++C ne ,tia f nE .b ed sennod xua redcca esirotua tse elle ,))b(edicnioc.a snad( a tejbol ruop edicnioc noitcno f al elleppa nouqsrol ,o eruse m al snad noitaluspacned epicnirp el eloiv nouq resnep tiarruop nO
erbmem noitcnof enu tnemugra ne simsnart tejbod elpmexE
a et b : 0 ou 0 b et c : 1 ou 1

: edicnioc te ruetcurtsnoc nu tniop essalc al ed serb - me m snoitcno f sel ti mil snova suon leuqel snad ,e mmargorp ed telpmoc elp mexe nu icioV
if ((pt.x == x) && (pt.y == y)) return 1 ; else return 0 ;

238

Les proprits des fonctions membres CHAPITRE 12

} main() // Un petit programme dessai { point a, b(1), c(1,0) ; cout << "a et b : " << a.coincide(b) << " ou " << b.coincide(a) << "\n" ; cout << "b et c : " << b.coincide(c) << " ou " << c.coincide(b) << "\n" ; }

#include <iostream> using namespace std ; class point // Une classe point contenant seulement : { int x, y ; public : point (int abs=0, int ord=0) // un constructeur ("en ligne") { x=abs; y=ord ; } int coincide (point) ; // une fonction membre : coincide } ; int point::coincide (point pt) { if ( (pt.x == x) && (pt.y == y) ) return 1 ; else return 0 ; // remarquez la "dissymtrie" des notations : pt.x et x

En C++, lunit dencapsulation est la classe (et non pas lobjet !)

: tnedcrp ehpargarap ud edicnioc noitcno f al rei fidom snoirruop suon tnem moc iciov ,elpmexed ertit .)* noitceridnid ruetarpol tna yolpme ne tnem maton( noitcno f al snad ecneuqsnoc ne retrpretni cnod tua f liuq te ,esserda enu ert evuort es iuq ruelav enu erttemsnart ed etnetnoc es no ; )ecner fr rap noissimsnart al ceva tiudorp es iuq ec tne meriartnoc( tne mugral ed noissimsnart ed edom el sap egnahc en no ,sac let nu snad ,euq snoleppaR .tejbo nud esserdal tnemugra ne tne meticilpxe erttemsnart ed elbissop tse lI

.)elleusu erutcurts enu ruop tia f snoival suon emmoc( stilibissop xued sec snon -imaxE .ecner fr rap noissi msnart enu ecalp ne ertte m ed uo ,ruelav al euq ttulp esserdal ertte msnart ned riovrp ed elbissop tse li ,erianidro tnemugra leuq etropmin ruop em moC .) tp mmon( edic -nioc lacol )tniop ep yt ed( tnemecalpme nu snad seipocer tnos b ed sennod sed sruelav sel : leppal ed srol ,euq cnod ei fingis alec ,tne msicrP .ruelav rap riovas ,edicnioc tne meuqissalc simsnart tiat tp tejbol ,tnedcrp elp mexel snaD
a.coincide (b)

. s e ir p or p p a i t i m a d s n o it a r a l c d s e d r a p ) n o i t a l u s p a c n e d e p i c n ir p e l t n e m e l b a t ir v r e l o i v e d , s i o f e t t e c , c n o d t e( n o i t c i dr e t n i e t t e c e d r i h c n a r f f a s e d ) er b m e m u o er i a n i d r o( n o i t c n o f e n u e l b i ss o p ts e l i u q dr a t s u l p s n orr e v s u o N . s c i l b u p s er b m e m x u a r e d c c a sr u o j - u o t t u e p e l l e , u d n e t n e n e i b ; ) e l p m e x e r a p n i a m , er i a n i dr o n o i t c n o f e n u t i arr u o p e l e n e u q s u l p s a p( B e ss a l c e d t e j b o n u d s v ir p s er b m e m x u a r e d c c a s a p t n e ms u e r u e h t u e p e n A e d er b m e m n oi t c n o f e n u , s e t n er f f i d s es s a l c x u e d t n o s B t e A is , i s n i A . s e t n a ts i x e s es s a l c s e l s e t u o t s a p , e n r e c n o c e ss a l c a l t s e n o i t a l u s p a c n e d t i n u l e u q n e i b z e t o N 3 . e ir t m y s e t t e c r e v u or t er e d t e mr e p e i m a n o i t c n o f e n u d n o i t a si l i t u l e u q , 4 1 er t i p a h c u d 1 e h p a r g ar a p u a s n or r e v s u o N . n o i t c n o f a l t n a l e p p a t e j b o l e d , e t i c i l p m i t n e m u gr a n e , n o i s s i m s n a r t a l e d t n e i v or p a l e C . l e p p a n o s s n a d e u q s u l p s a p , e d i c n i o c n o i t c n o f a l e d n o i t i n i f d a l s n a d s a p e v u o r t e r es
239

5.1 Transmission de ladresse dun objet

5 Mode de transmission des objets en argument

int point::coincide (point * adpt) { if (( adpt -> x == x) && (adpt -> y == y)) return 1 ; else return 0 ; }

.essalc al tne melag tse noitaluspacned tinuL


avaJ n E

5 - Mode de transmission des objets en argument

, s u ss e d - i c e t t- n e l e d i n u m e d i c n i o c s n a d , i s n i A . n o i t c n o f a l l e p p a t n a y a t e j b o l t s e u q eticilp mi tne mu gral ceva esirp ert sap tuep e n noituacrp ellet e nuuq sio fetuot zetoN : e p y t o t or p n o s t n e m e l l l ar a p t n a i f i d o m n e : ert up tiarua edicnioc ed ett-nel ,ici ,isniA .tsnoc fitaci filauq el re yolpme sruojuot zev -uop suov ,enrecnoc erb me m noitcnof al ed nies ua drob ed stef fe slet ed zengiarc suov iS .)eriartnoc sac el snad scilbup serbmem slues xua ,essalc as ed ep yt ed tejbo nud tigas lis serbmem sel suot scca a elle( sruelav sel rei fidom ne tuep ic-ellec ,erb me m noit -cno f enu tejbo nud esserdal zessinruof suov o tnemom ud ritrap uq sap zeilbuoN
int point::coincide (const point * adpt) int coincide (const point *) ;

e uqrameR

erbmem noitcnof enu tejbo nud esserdal ed noissimsnart ed elpmexE


a et b : 0 ou 0 b et c : 1 ou 1

: egatnavad tneived el )niam ed nies ua( edicnioc ed leppal ,ertnoc raP .etnauqohc erug tsen erutirc ettec ,erb me m noitcno f erton ed ellerutan eirtm yssid al ed unet etpmoC
240
Les proprits des fonctions membres CHAPITRE 12

main() // Un petit programme dessai { point a, b(1), c(1,0) ; cout << "a et b : " << a.coincide(&b) << " ou " << b.coincide(&a) << "\n" ; cout << "b et c : " << b.coincide(&c) << " ou " << c.coincide(&b) << "\n" ; } #include <iostream> using namespace std ; class point // Une classe point contenant seulement : { int x, y ; public : point (int abs=0, int ord=0) // un constructeur ("en ligne") { x=abs; y=ord ; } int coincide (point *) ; // une fonction membre : coincide } ; int point::coincide (point * adpt) { if ( (adpt->x == x) && (adpt->y == y) ) return 1 ; else return 0 ; }

: i fido m isnia telp moc e mmargorp el icioV


b.coincide (&a) a.coincide (&b)

: uo

: eugolana erinam ed rinevretni y tiarruop tsnoc fitaci filauq e L .ici tnemelag euq -ilppas drob ed ste ffed seuqsir sel rus )1.5 ehpargarap ed ni f ne( etnedcrp euqra mer a L

erbmem noitcnof enu tejbo nud ecnerfr rap noissimsnart ed elpmexE


a et b : 0 ou 0 b et c : 1 ou 1

: ecner fr rap si msnart tse tne mugra nos elleuqal snad edicnioc ed noitatpada enu icioV .sleppa stner ffid ses te enrecnoc noitcno f al ed erutircl tnatuad ei filp mis ellE .noitseg al emm-ios egrahc ne erdnerp ne riova snas ,esserda rap noissi msnart enu ecalp ne erttem ed te mrep secner fr sed iolp mel ,uv snoval suon em moC

. e c n a t s n o c r u e l e d u a e v i n u a r e i l u c i tr a p ne ,stne mu gra xued se d tne metiart ed tilagl rerussa d tiartte mrep ei ma n oitcno f e n u d n o i t a s il i t u l , 4 1 e rt i p a h c u d 1 e h p a r g ar a p u a s n o rr e v e l s u o n e m m o c , er o c n e L . x r e i f i d o m s r u o j u o t z e ir r u o p s u o v s i a m x > - t p d a r e i f i d o m s u l p z e ir r u o p e n s u o v
241

5.2 Transmission par rfrence

main() // Un petit programme dessai { point a, b(1), c(1,0) ; cout << "a et b : " << a.coincide(b) << " ou " << b.coincide(a) << "\n" ; cout << "b et c : " << b.coincide(c) << " ou " << c.coincide(b) << "\n" ; }

#include <iostream> using namespace std ; class point // Une classe point contenant seulement : { int x, y ; public : point (int abs=0, int ord=0) // un constructeur ("en ligne") { x=abs; y=ord ; } int coincide (point &) ; // une fonction membre : coincide } ; int point::coincide (point & pt) { if ( (pt.x == x) && (pt.y == y) ) return 1 ; else return 0 ; }

int point::coincide (const point & pt)

e uqrameR

5 - Mode de transmission des objets en argument

.noitcnof al ed leppal srpa tnemetaidmmi tejbol retiolpxed etnetnoc es nol is ehcram alec euq noisullil riova tuep no ,isniA .orz simer sap tsen rbil tnemecalpme nu ,snoitatnemlpmi seniatrec snaD .3 .etsixe lis ,ruetcurtsed ud leppa arua y li ,tnavius ertipahc ua liatd ne snorrev el suon emmoC .2 .setnerffid sesohc xued tnos noitasilaitini te noitatceffa ,++C neuq reton ed tnatropmi srt tse lI .1

.sruetarpod noitini fdrus al rcasnoc ertipahc el snad tniop ec rus liatd ne sulp snordneiver suoN . tnemiarv sulp tnat -sixen esohc euqleuq ed esserdal arerpucr etnaleppa noitcno f al ; noitcno f al ed eitros al sd rbil ares tejbo tec ed tne mecalpmel ,sac ec snad ,te ffe nE .euqita motua essalc ed erid --tsec ,noitcno f al lacol tejbo nud essigas liuq retiv xueim tuav li ,tejbo nud ecner fr al uo esserdal te msnart noitcno f enu iS .stnemugra sel ruop sap tiatsixen iuq e mlborp nu resop ed tneuqsir ecner fr rap noissimsnart al uo esserda enud noissimsnart al ,ehcnaver nE .)noitasilaitinid( reilucitrap ruetcurtsnoc nu riovrp ardua f li ,seuqi man yd stne m -ecalpme sed rus sruetniop sed tnatropmoc stejbo sel ruoP .tejbol ed eipocer elpmis rap tia f es elle ,tuafd rap : tnem medcrp euq euqramer emm al eticsus ruelav rap noissi msnart a L .sc ilb -up serb mem ses uq scca aruan noitcno f al sac leuqua ,essalc al ed tner f fid ep yt nud ; s vir p s er b m e m ses s cc a ar u a n oi t c n o f a l s ac l e u q u a , ess al c al e u q e p y t e m m u d : ert arr u op te jbo t e C .e c ner f r rap n o iss i ms n art ; esser d a rap n o iss i ms n art ; r u el a v ra p n o iss i ms n art : ertne risiohc tuep no te tejbo nu ert tuep erinred etteC .ruoter ed ruelav as tne melag euqilppas erbmem noitcno f enud stne mugra sed soporp tid snova suon euq eC
2

.reilucitrap sac nu eutitsnoc ruelav rap noissi msnart ed sac ne eipocer a l t n o d , n o i t a s i l a i t i n i l t e n o i t a t c e f f a l t n e m e v it c e f f e t n e n m ar es sr u e t ni o p s e d t n a n e t - n o c s t e j b o s e l r a p s s o p s e m l b or p s e l e u q s n orr e v s u o n ,sr u el li a d , e l ar n g er i n a m e n u D . er ti p a h c n i a h c or p el s d t n e m m o c s n or er t n o m s u o v s u o n ; r ei l u c itr a p ruetcurtsnoc nud iolpmel rap lgr ert tuep ruelav rap tre fsnart el rap sop iulec ,ruetarpo tec ed noitini fdrus al rap ulosr ert tuep noitatce ffal rap sop emlborp el euq emm eD .eipocer elpmis enud tne melag tigas li o erusem al snad ,seuqsir se m m sel etnesrp ruelav rap stnemugrad tre fsnart e L .st -niop stne mecalp me sed emm ed sap tialla nen li siam ,sipocer tnemevitcef fe tneiat sruet -niop seC .tne meuqi man yd suolla stnemecalp me sed rus sruetniop sed tneiadssop stejbo s e c o s a c e l s n a d s e m l b or p s e d r es o p ti a v u o p s t ej b o d n o i t a t c e f f a l e u q u v j d s n o v a s u o N
1

242

6 Lorsquune fonction renvoie un objet


5.3 Les problmes poss par la transmission par valeur
Les proprits des fonctions membres CHAPITRE 12

.e l eppa t na y al t ejb ol e d ess erd al tinruof ehciffa noitcnof al ,tniop essalc al snad : elocd elp mexe nu snosoporp suov suon ; relrap ed snonev suon tnod enahc etsil ed elpmexel reppolevd ed rutamrp tiares li ,icI . e le p pa t n a y al t ej b o l r us r ue t ni o p n u e n gis d ,er b m e m n o it c n o f e n u d ni es u a t ne m -euqinu elbasilitu ,ic-iuleC .siht : lc tom el uvrp a ++C ,semlborp slet ed erduosr ruoP .etsil al ed tnedcrp tejbol snad esserda nos recalp neib arduaf li ,)eticilp mi tnemugra ne simsnart soppus( tejbo levuon nu tnarsni erb me m noitcno f enu erirc ruop : erutan e m m ed stejbod enahc etsil enud noitseg al ,elpmexe rap ,zegnoS .elbasnepsidni tneived alec o secnatsnocric sed etsixe li rO .noitseuq ne tejbol ed esserdal tnemeticilpxe relupinam ed nioseb sap snoivan suon siaM .iciuqsuj srtnocner selp mexe sel suot reuqilpxe ruop i ffus a suon ,uol f tne mevitaler tios liuq neib , noita mrofni e mret e L .eleppa tna yal tejbol redccad tnattemrep iul noitamro fni enu tioer essalc enud erb me m noitcno f enuuq erid ed noisaccol tnevuos ue snova suoN

: e t t- n e t e c t n a s i li t u n e , e c n er f r r a p n oi s -s i ms n art e n u ri o v r p n e d l li es n o c s a p ti ar es e n l i ,s uss e d- i c u qi l p x e s n o v a l s u o n e m m o C .noitcno f al ed nies ua ser euqita motua tejbo nu rerc ed eriassecn t a liuq zetatsnoc suoV
point point::symetrique ( ) { point res ; res.x = -x ; res.y = -y ; return res ; }

: leppa tna yal iulec ed euqirt m ys tniop nu ruoter ne rinruo f ruop tniop essalc enu snad etiud -ortni ert tiarruop iuq euqirtemys e mmon erbmem noitcno f enu iciov ,elpmexed ertit
243

7 Autorfrence : le mot cl this

#include <iostream> using namespace std ; class point // Une classe point contenant seulement : { int x, y ; public : point (int abs=0, int ord=0) // Un constructeur ("inline") { x=abs; y=ord ; } void affiche () ; // Une fonction affiche } ; void point::affiche () { cout << "Adresse : " << this << " - Coordonnees " << x << " " << y << "\n" ; } point & point::symetrique ( )

7 - Autorfrence : le mot cl this

en leppa nos te ffe ne sac ec snaD .enrecnoc erbmem noitcno f al )citats lc tom( euqit -ats tnaralcd ne secaci ffe sulp te selbisil sulp sesohc sel erdner ed elbissop tse li ,tia f nE .noit - c n o f a l el it u s a p t n e m ul os b a ti os e n t ej b o t e c e d ess er d al e u q n e i b , e c t e , ess al c al e d t e j b o nu rus tne melleici fitra retrop tnasia f al ne noitcno f ellet enu releppa sruojuot setrec tuep nO .seuqitats sennod serbmem sed rus rigad tiaretnetnoc es iuq noitcnof enud sac el tne mmaton tiares ec ; tejbo euqnocleuq nud tnadnepdni tnemelatot elr nu tneia ess al c e n u d ser b me m s n o i tc n o f se n ia tre c e u q re n i g a m i t u e p n o ,e u g ol a na er i na m e n u D . ess al c r u e l e d s t e j b o s e d t n e m m a d n e p d n i ,)e n n o d ess al c e n u r u o p( eri al p m e xe l ue s n u ne t n ets i xe i c- x u e C . se u qi ta ts se n n o d s er b - me m sed rini fd ed te mrep ++C tnem moc )11 ertipahc ud 5 ehpargarap( uv jd snova suoN

.) a v aJ n e s a p e ts i x e n r u e t ni o p e d n oi t o n al , n o a f et u ot e d( + + C ne ess er d a n o s e d ue il ua ,er b m e m n oi tc n o f e n u le p pa t na y a t e j b ol e n gis d li : e n is i o v n o it a c i fi n g is e n u c e v a , a v aJ n e t n e m e l a g ets i x e s i h t l c t o m e L


avaJ n E
int point::coincide (point pt) { if ((this -> x == pt.x)) && (this -> y == pt.y)) return 1 ; else return 0 ; }

: 4 e h p ar g a r a p u d e d i c n i o c n o i t c n o f a l i s n i a t i a v - ir c n o l i s s a c e l s n i o m t i ar e s e C . t n e m er i a l c s u l p t ar a p p a y e m l b o r p u d e ir t m y s a L
int point::coincide (point * adpt) { if ((this -> x == adpt -> x) && (this -> y == adpt -> y)) return 1 ; else return 0 ; }

: erircs tiarruop 1.5 ehpargarap ud edicnioc noitcno f al , fitacidni tne merup ertit

244

8 Les fonctions membres statiques


e uqrameR

siht ed noitasilitud elpmexE


Adresse : 006AFDF0 - Coordonnees 5 0 Adresse : 006AFDE8 - Coordonnees 3 15

Les proprits des fonctions membres CHAPITRE 12

main() { point a(5), b(3,15) ; a.affiche (); b.affiche (); }

// Un petit programme dessai

8 - Les fonctions membres statiques

245

: e ssa lc as ed stejbod erb mon el tnemelpmis tnahci ffa ,etpmoc e mmon euqitats erbmem noitcnof enu tiudortni snova suon leuqel snad ,11 ertipahc ud 3.5 ehpargarap ua tnesrp elp mexel ed tigas li : euqitats erb me m noitcnof enud iolpmel tnartsulli em margorp ed elp mexe nu icioV .essalc as ed tejbo nucua etsixen liuqsrol eleppa ert e m m tuep euqitats erb -mem noitcno f ellet enu ,seuqitats serb me m sel ruop e mmoC .)etrop ed noitulosr ed ruetar - p o l e d ,t n e m el l er u t a n , n g a p m o c c a( e t n a d n o ps err o c ess a l c al e d m o n el e u q s ul p et iss e c n
#include <iostream> using namespace std ; class cpte_obj { static int ctr ; public : cpte_obj () ; ~cpte_obj() ; static void compte () ; } ; int cpte_obj::ctr = 0 ; cpte_obj::cpte_obj () { cout << "++ construction } cpte_obj::~cpte_obj () { cout << "-- destruction } void cpte_obj::compte () { cout << " appel compte } main() { void fct () ; cpte_obj::compte () ; cpte_obj a ; cpte_obj::compte () ; fct () ; cpte_obj::compte () ; cpte_obj b ; cpte_obj::compte () ; } void fct() { cpte_obj u, v ; } appel compte ++ construction appel compte ++ construction : : : : il il il il y y y y a a maintenant a a maintenant 0 1 1 2 objets objets objets objets // compteur (statique) du nombre dobjets crs // pour afficher le nombre dobjets crs // initialisation du membre statique ctr // constructeur : il y a maintenant " << ++ctr << " objets\n" ; // destructeur : il reste maintenant " << --ctr << " objets\n" ; : il y a " << ctr << " objets\n" ; // appel de la fonction membre statique compte // alors quaucun objet de sa classe nexiste

-leuqsel ,serb me m snoitcno f sec imrap ,resicrp tiod ruetasilitul euq eifingis aleC .serb me m snoitcno f sel rap sesilar tne melarng tnos snoitarpo sel rac ,selpmis snio m tnos sesohc sel ,tejbo nud sac el snad ,ehcnaver nE .)ruelav al rei fidom ne tnevuep iuq sellec( setidretni snoitarpo sel reifitnedi tne melica f zessa tuep ruetalipmoc el ,erianidro elbairav enud sac el snad ,tef fe nE .l rap dnetne nol euq ec erdnerpmoc li-tua f erocnE . sed rini fd tuep nouq ei fingis iuq ec ,sessalc xua dnets selbairav sed ecnatsnoc ed tpecnoc eC
stnatsn oc stejb o

: n o it c n o f e n u d et t- n e l s n a d tnatsnoc ralcd teu m tnemugra nud ruelav al rei fido m tuep en no ,erina m emm al eD : etcerrocni ares etnavius noitcurtsnil
const int n=20 ; n = 12 ; // incorrecte : n nest pas une lvalue

: n o it ara lc d et te c ce va , elp me xe raP . elba ira v e tt ec e d n o it ac i fi d o m e d se vi t at ne t se l -leutnevd retejer ed erusem ne isnia tse ruetalip moc e L .sap eulovn ruelav al euq etiahuos n o t n o d e l b a i r a v e n u r e n g i s d r i v r e s t u e p t s n o c fi t a c i f i l a u q el t n e m m o c u v j d s n o v a s u o N

.citats lc tom e m m ud e di al t ner al c d es s e ll e te a vaJ ne t ne me la g t ne tsi x e se uqi t ats s erb me m s no i tc n o f se L


avaJ n E

euqitats erbmem noitcnof enud noitasilitu te noitinifD


++ construction : il -- destruction : il -- destruction : il appel compte : il ++ construction : il appel compte : il -- destruction : il -- destruction : il y a maintenant reste maintenant reste maintenant y a y a maintenant y a reste maintenant reste maintenant 3 2 1 1 2 2 1 0 objets objets objets objets objets objets objets objets

246

9.1 Dfinition dune fonction membre constante

9 Les fonctions membres constantes

Les proprits des fonctions membres CHAPITRE 12

void f(const int n) // ou mme void f(const int & n) - voir remarque { n++ ; // incorrect : n nest pas une lvalue ..... }

: t n i o p t e j b o l e d s er b - m e m s e d r u e l a v a l r e i f i d o m s a p t n e v i o d e n n o i t i n i f d a s s n a d t n ar u g i f s n o i t c u r ts n i s e L 2
void f (const point p) { p.affiche () ; p.deplace (...) ; } // ou mme void f(const point & p) - voir remarque // OK // incorrecte

: tne mu gra ne uer tejbo n u tiare uqilppas euqra mer e m m a L : r u e t a l i p m o c e l r a p e t e j er ar e s i c- e l l e c , e h c n a v er n E


a.affiche () ; c.affiche () ; a.deplace (...) ; c.deplace (...) ;

: s n o i t ar a l c d s e c c e v a , is n i A .s a p ar e s e l e n t s n o c n o i t a r a l c d e n u d t e j b o l t i a f s a p a n i u q , e c a l p e d n o i t c n o f a l , e h c n a v e r n E . t n a t s n o c t n i o p n u r u o p e l b a s i l i t u t i a t e h c i f f a n o i t c n o f a l e u q i f i c ps s n o v a s u o n , i c I . t n a t s n o c r a l c d t e j b o n u r u o p e l b a s i l i t u t s e e ll E 1 : secneuqsnoc xued a etnatsnoc tse ehciffa noitcno f al euq rei ficps ed tia f e L

: tniop essalc enud noitini fd ed elp mexe tec snad e mmoc ,noitaralcd ruel snad tsnoc to m el tnasilitu ne are f el lI .stnatsnoc stejbo sed rus rerpo sesirotua tnos sel
247

9.2 Proprits dune fonction membre constante

class point { int x, y ; public : point (...) ; void affiche () const ; void deplace (...) ; ... } ;

class point { int x, y ; public : void affiche () const { x++ ; // erreur car affiche a t dclare const } } ; point a ; const point c ;

// incorrecte ; c est constant, alors que // deplace ne lest pas

: s e t c e rr o c t n o r e s s e t n a v i u s s n o i t c ur t s n i s e l

9 - Les fonctions membres constantes

.a v aJ n e s a p ets i xe n et n ats n o c er b me m n oi tc n o f e d n o i t o n a L
avaJ n E

. e s s a l c a l s n a d e t n a ts n o c e r a l c d t t n e m e v i t c e f f e s a p a n i c - e l l e c i s t n i o p e p y t e d t n a ts n o c t e j b o n u e h c i f f a e d o h t m a l r e u q i l p p a s a p ar r u o p e n n o , e l p m e x e r a P . t n a ts n o c t e j b o l e t n u s ti l a n n o i t c n o f s e n i a tr e c r e u q i l p p a r i o v u o p s u l p e n e d e u qs i r n o , e r i a r t n o c s a c e l s n a D .) t s n o c f i t a c i f i l a u q e l c e v a s e r a l c d er i d- - t s e c ( s e t n a t s n o c s er b m e m s n o i t c n o f s e d t n e m e c n e c er e l s n a d f i t s u a h x e t a e t n a d n o p s err o c e ss a l c a l e d r u e t p e c n o c e l e u q r s er t t u a f l i , t n a t s n o c t ej b o n u r er a l c d r i o v u o p r u o P 2 . t n a ts n o c n o n t e j b o n u eria f ed uvrp a nouq ec tnatsnoc tejbo nu eria f ed xueregnad tiares li ,ehcnaver ne ; tnatsnoc tiat lis emmoc tnatsnoc non tejbo nu tnatiart ne euqsir nucua truoc en no : e u q i g o l ts e e d u t - i t t a e l l e t e n U . n o n u o s t n a t s n o c s t e j b o s e d t n e m m er f f i d n i e u q i l p p a er t arr u o p e l l e , e i n i f d t s e ) ( e h c iff a d i o v ts n o c n o i t c n o f a l e l u e s i s , e h c n a v er n E . n o i t a l i p m o c n e e t e j e r sr o l a t i ar e s ) ( e h c iff a . c e u q e l l e t n o i t c ur t s n i e n u ; t n a ts n o c t e j b o n u e u q i l p p a e r t s a c n u c u a n e a rr u o p e n e l l e , e i n i f d t s e ) ( e h c iff a d i o v n o i t c n o f a l e l u e s i s e u q n e i b a r e t o n n O .I n oit - c n o f a l a r e l l e p p a ) ( e h c i f f a . c e u q s i d n a t I I n o i t c n o f a l a r e l l e p p a ) ( e h c i f f a . a n o i t c ur t s n i l : s noitaralcd sec cevA : s n oi t c n o f x u e d s e c r i n -i fd snovuop suon ,etnedcrp tniop essalc al snad ,isniA .tsnoc fitaci filauq ud ecnesbal uo ecnesrp al rus tnadno f es ne erbmem noitcno f enu rini fdrus ed elbissop tse lI 1
void affiche () const ; void affiche () ; // affiche I // affiche II point a ; const point c ;

se uqrameR

: r e i l u c i t ra p te j b o n u s i c o s s a s a p t n os e n s l i r a c , e l g r e t t e c n o i t p e c x e t n e m e l l e r u t a n t n o f s e u q i t a ts s er b m e m s e L
248
Les proprits des fonctions membres CHAPITRE 12

class compte { static int n ; public : void test() const { n++ ; // OK bien que test soit dclare constante, car n est // un membre statique } } ;

.s elb at u m serb me m ed riova y tuep en li ,iroitro f a ; stnatsnoc serbmem ed sap etsixen li ,avaJ nE
avaJ n E
class truc2 { public : int n ; mutable int p ; ..... } ; ..... const truc c ; c.n = 5 ; // erreur : lobjet c est constant et n nest pas mutable c.p = 5 ; // OK : lobjet c est constant, mais p est mutable void f1(.....) const { n++ ; x = 5 ; } } ;

: noitatce ffa rap selbai fidom tnos elbatum fitaci filauq el ceva sralcd scilbup serb mem sel ,erdnetta ys tuep no em moC
// OK car n est dclar mutable // erreur : f1 est const et x nest pas mutable

: elpmexe titep nu icioV .setnatsnoc serb mem snoitcno f sed rap em m ,noitaci fido m al etpecca no tnod sp mahc sed rengisd ruop elbatum fitaci filauq el tiud -ortni a ellE .etnangiartnoc port rervas sio frap tiavuop noitcirtser ettec euq guj a e mron a L .seuqitats non serb me m ed sruelav sel rei fido m sap tuep en etnatsnoc erbme m noitcno f enU

10 Les membres mutables

class truc { int x, y ; mutable int n ; // n est modifiable par une fonction membre constante void f(.....) { x = 5 ; n++ ; } // rien de nouveau ici

10 - Les membres mutables

249

. n o it ara lc d as e d t n e m o m ua tejbo nud noitasilaitinid reilucitrap sac nuuq tnatn tilibissop erinred ettec ,ep yt em m ed tejbo nu rap noitaralcd as ed srol tejbo nud noitasilaitini ,noitcnof enud tatlusr ne tejbo nud ruelav al ed noissi msnart ,noitcno f enud tnemugra ne tejbo nud ruelav al ed noissi msnart : ep yt ec ed snoitautis siort etsixe liuq snorrev suoN .tnatsixe tejbo nud eipoc enu resilar ed eriassecn tse liuqsrol erid--tsec , "tejbo nud noitasilaitini d setid snoit -autis sel snad tneivretni iuq ,eipocer ed ruetcurtsnoc ed noiton al etiusne snoredroba suoN . w e n ru et -arpol ed eigral exatn ys enu leppa tnasia f ne ,serianidro seuqi man yd selbairav sed rerc ruop e yolp me ellec elbarapmoc erina m enud seuqi man yd stejbo sed resilitu te rerc tnem moc snorertno m suon siuP .noitaralcd enu rap sinifd seuqitats te seuqitamotua stejbo sed noitcurtsed al te noitarc al reni maxe rap snorecnem moc suoN .stejbo xua reuqilppas tnemellerutan tnov )euqiman yd ,euqita motua ,euqitats( noitacollad sessalc siort seC .em margorp el rap elrtnoc tse eiv ed erud as ; euqimanyd etid srola tse elle ; eteled te wen sruetarpo sel tnasilitu ne ; noitaralcd as ed tne mecalpmel te erutan al rap eini fd tne metia frap tse eiv ed erud as ; euqitats uo euqitamotua essalc ed srola tse elle : noitaralcd enu rap : s n o a f x ue d e d e r c ert t u e p el b aira v e n u , + + C ne u q u v j d s n o va s u o N

Construction, destruction et initialisation des objets

13

; ]1+n * 2 = melen[ elbuod wen = rda * elbuod : euq ellet noitcurtsni enu ,elpmexe rap ,etpecca iuq ++C emmoc egagnal nu snad elbissop sruojuot sap tsen noitaralcd ed noitcurtsni te elbatucxe noitcurtsni ertne noitcnitsid aL .2 .++C ne seriaropmet stejbo sed ellec euq ecnatropmid sniom a ecnetsixe ruel siam ,seriaropmet selbairav sed jd etsixe li ,C nE .1

. n o it u c x e n os e d n i f al s r p a stiurtd te niam noitcno f al ed noitucxel ed tubd el tnava src tnos seuqitats stejbo se L . c i t a t s fi t a ci f il a u q u d e i tr o ss a si a m , n oi t c n o f e n u s n a d ; n o i t c n o f et u ot e d sr o h e d n e : eutis noitaralcd enu rap src xuec tnos seuqitats stejbo se L . c ol b u d e itr os a l e d srol tiurtd tse li ; )selbatucxe snoitcurtsni sertuad ,colb ec ed nies ua ,edcrp ert tuep ic -ellec ,erocne l( noitaralcd as ed ertnocner al ed srol rc issua tse tejbol : colb nu snad .noitcno f al ed noitucxel ed ni f al tiurtd tse lI . selbatucxe snoitcurtsni sertuad srpa eutis ert ,++C ne ,neib srt tuep elleuqal ,noitaralcd as ed ertnocner al ed srol rc tse tejbo L .stnedcrp sertipahc sed selp mexe sel snad sac el tiatc : noitcnof enu snad : noitaralcd enu rap src xuec tnos seuqitamotua stejbo se L .stejbo xua tne mellerutan tuot tnesopsnart es serianidro selbairav xua tnauqilppas selgr se L
2

.sruetcurtsed sed te sruetcurtsnoc sed sleppa sleutnev sel ; stiurtd tnos sli o iulec te src tnos sli o tnemom el erid--tsec ,eiv ed erud ruel : tnemraps snoni maxe suoN

.dnamed tnemeticilpxe tial ruem margorp el euq snas , emmargorp ud tnemeluord ud li f ua src ert tnavuop erid --tsec ,seriaropmet stid stejbo sel tnanrecnoc snoitacidni seuqleuq snorinruo f suon ,nifnE . te jbo nu e m m - i ul s a p t s e n u a el b at l e t n u u q et n atr o p m i s ni o m t n at u a d n oi t o n ,s t e j b o d u a e l b a t u d s a c el tne medipar snoredroba suoN .essalc ep yt nud se m m-xue sennod serb me m sed edssop essalc ep yt nu o sac el erid--tsec , serb mem stejbo sed sac el snoreni maxe suon siuP
1

252

1.1 Dure de vie

1 Les objets automatiques et statiques


Construction, destruction et initialisation des objets CHAPITRE 13

: rerper ed tnatte mrep egassem nu tnehcif fa ruetcurtsed el te ruetcurt -snoc el elleuqal snad ,tniop e mmon essalc enu ini fd snova suoN .seuqitamotua te seuqitats stejbod noitcurtsed al te noitarc al ecnediv ne tnattem e mmargorp ed elp mexe nu icioV

.tnemugra snas tniop ed ruetcurtsnoc nu etsixe li ; tniop ed ruetcurtsnoc ed sap etsixen li : s e t n e r f f i d tr o f s n o i t a u t i s x u e d s n a d e l b a t p e c c a ts e : e u q el l e t n o it a r a l c d e n U


point a ; // attention, point a () serait une dclaration dune fonction a

.tejbol ed noitcurtsed al tnava leppa tse ruetcurtsed el ; tejbol ed noitarc al srpa leppa tse ruetcurtsnoc el : euq erid tuep no ,eigolonorhc al enrecnoc iuq ec nE
point a ; point b(1, 7) ; // correct : appel du constructeur 1 // correct : appel du constructeur 2

: t n or d n e i v n o c i c-s el l e c s i a M
point a(5) ;

: e t ej er ares e t na vi us n oi tar al c d al

: stnavius sruetcurtsnoc sel etropmoc tniop essalc enu is ,isniA .xue ertned nul rap siuqer stnemugra sel etrop moc noitaralcd al euq ti ffus li ,sruetcurtsnoc srueisulp etsixe liS : ar d n e i v n o c , e h c n a v er n e ,i c- e ll e C
point a ; point b (3) ; point a(1, 7) ; // correct car le constructeur possde deux arguments

: se t cerr oc ni t n ore s s et n av i us s no i tara lc d s el


point (int, int)

: ep ytotorp ed ruetcurtsnoc el etrop moc tniop essalc enu is ,elpmexe raP .stnadnopserroc stnemugra sel retropmoc tnemeriotagilbo tiod )ruesilaitinid sap tneitnoc en elle ,tnatsnil ruop snosoppus el suon em moc ,euqsrol( noitaralcd as ,ruetcurtsnoc nu edssop tejbo nu is euq snoleppaR

1.3 Exemple
e uqrameR

1.2 Appel des constructeurs et des destructeurs

point ( ) ; // constructeur 1 point (int, int) ; // constructeur 2

// incorrect : le constructeur attend deux arguments // incorrect (mme raison)

// incorrect : aucun constructeur un argument

1 - Les objets automatiques et statiques

253

254

Construction, destruction et initialisation des objets CHAPITRE 13

.)s et n er f fi d sruelav sed edssop tniop ep yt ed tejbo euqahc euq etros ne tia f snova suon( nrecnoc tejbol ; leppa ruel ed tne mo m el
#include <iostream> using namespace std ; class point { int x, y ; public : point (int abs, int ord) // constructeur ("inline") { x = abs ; y = ord ; cout << "++ Construction dun point : " << x << " " << y << "\n" ; } ~point () // destructeur ("inline") { cout << "-- Destruction du point : " << x << " " << y << "\n" ; } } ; point a(1,1) ; // un objet statique de classe point main() { cout << "****** Debut main *****\n" ; point b(10,10) ; // un objet automatique de classe point int i ; for (i=1 ; i<=3 ; i++) { cout << "** Boucle tour numero " << i << "\n" ; point b(i,2*i) ; // objets crs dans un bloc } cout << "****** Fin main ******\n" ; } ++ Construction dun point ****** Debut main ***** ++ Construction dun point ** Boucle tour numero 1 ++ Construction dun point -- Destruction du point ** Boucle tour numero 2 ++ Construction dun point -- Destruction du point ** Boucle tour numero 3 ++ Construction dun point -- Destruction du point ****** Fin main ****** -- Destruction du point -- Destruction du point : 1 1 : 10 10 : 1 2 : 1 2 : 2 4 : 2 4 : 3 6 : 3 6 : 10 10 : 1 1

seuqitamotua te seuqitats stejbod noitcurtsed te noitcurtsnoC

.enrecnoc essalc al ed ruetpecnoc el rap semmargorp sehct ed tigas li ,++C ed sac el snad ; emmargorp ud ruetual rap tnemeticilpxe semmargorp sehct ed srola sap tigas en li siam )elpmexe rap sreihcif ed erutemref uo erutrevuo( C emmargorp nud sac el snad emm ed jd av ne li ,rueugir etuot nE .1

: rap rda esserda nos retce ffa te )sreitne xued ruop ecalp al ici cnod ardneitnoc iuq( tniop ep yt ed tnemecalpme nu tne meuqi man yd rerc snorruop suon : s n ora lc d s u o n is te
class point { int x, y ; public : void initialise (int, int) ; void deplace (int, int) ; void affiche ( ) ; } ; point * adr ;

: t n a v i u s t n i o p e p yt e l s n oss i ni f d s u o n i s , is ni A .ser u tc urt s se l r u o p e u q e m m el c n o d tse e u qi ma n y d n o its e g e d e ms i na c m e L

.)stne mugra ceva( wen ruetarpol ed eigral emro f enu leppa eriaf arduaf li ,ruetcurtsnoc nu aretropmoc essalc al euqsrol ,ehcnaver nE .serutcurts sed tneiares el em moc ssilitu tia f ne tnos ruetcurtsnoc snas essalc enud stejbo sel euq riov snolla suoN .stejbo xua tneuqilppas stilibissop sec ,udnetne neiB .serutcurts sed uo xuaelbat sed ,serialacs seuqiman yd selbairav sed eriurtd te resilitu ,rerc tne mmoc uv jd snova suoN

. t ne m e t i ar t n i a t - r e c n u , t u o t r g l a m , t n a s i l a r t e , ) e l c u o b e d r u o t u d e g a h c i f f a d n o it c ur t s n i l s n o i m - i r p p u s s u o n is e l p m e x e e r t o n e d s a c e l t i ar e s i u q e c ( s n o i t ar a l c d s e d e u q t n a tr o p m o c e n n i a m n o i t c n o f e n u r i o v e c n o c e t i m i l a l t i arr u o p n O . n i a m n o i t c n o f a l e d n o i t u c - x e l s r p a u o t u b d e l t n a v a t n e l u or d e s s n o i t ar p o d er b m o n n i a tr e c n u , t s e s u l p i u Q . e g a ss e m n u d e g a h c i f f a l e n ar t n e
1

: e u q el l e t e l a n a b n o it -aralcd enu ,ici ,elpmexe raP .e mmargorp ud snoitcurtsni sel snad tne meticilpxe sap tnes -siarappan iuq stne metiart sed tiudnoc sruetcurtsed ed te sruetcurtsnoc ed ecnetsixeL

2.1 Cas dune classe sans constructeur

2 Les objets dynamiques

adr = new point ;

point b(10, 10) ;

e uqrameR

2 - Les objets dynamiques

255

r uetc urts ed el

a re ll eppa

. eteled , t n a d n o ps err o c er i o m m t n e m e c al p m el e d n o i t ar b il al t n a v A .tejbo nud noitaralcd al tnauqilppas sellec euq selgr semm sel ,evitini fd ne ,l evuorter nO . e t e j er ar e s e x at n y s et te c , t n e m u gra n u s n i o m ua t n e d ss o p sr u et c urts n o c s el s u o t is ,e h c na ver n E . e t pe cc a ares
ru eta rp o l

: e xa t n ys al ,t n e m u gra s na s r u et c urts n oc n u e ts i xe lis u o ,r ue tc ur ts n o c e d s a p e tsi x e n lis , u d n et n e n ei B : e uq e ll et n o it ara lc d en u rap leppa t tiarua iuq iulec euq e m m el tse leppa ruetcurtsnoc el iciuq erid tuep no ,elp - m e x e r a P .l e p p a n os s n a d t n ar u gi f s t n e m u gr a s e d er u t a n al r a p t c i d ar es i ul w e n r a p l e p p a ar es i u q i ul e c e d x i o h c el , t n et si x e sr u e t c ur ts n o c sr u eis u l p e u qsr o l , el ar n g er i n a m e n u D
new point (2, 5) ; a = point (2, 5) ;

tejb ol ed ru et cu rt sn oc nu ar

- el le ppa

: e mr o f a l e d ei gr a l e x at n ys e n u d e d i a l s ei n u o f t n or es i ul s e ll e ,t i a f nE .setnadnopserroc snoita mro fni sed esopsid liuq eriassecn tse li ,stne mugrad tnasopsid ruetcurtsnoc nu releppa essiup wen euq ruop euq tiov nO . w en ,siuqer erio mm tnemecalp mel ed euqi man yd noitacollal srpA : tnemsicrp sulP .seuqi man yd stejbo xua tne melag euqilppas eihposolihp etteC .tejbo nud noitcurtsed al ed srol ruetcurtsed el ruop e m m ed av ne lI .tejbo nud noitarc al ed srol gilbo egassap nu )etsixe liuq srol sd( ruetcurtsnoc ud tia f ++C euq uv jd snova suoN
ru eta rp o l

.)scilbup tneiares sedohtm te spmahc sel suot euq tnat essalc enu ceva ecner ffid elues al( sesilarng serutcurts xua tne mellerutan tuot tneiareuqilppas ruetcurtsnoc snas essalc ed sac el snad ici seuqov stilibissop se L

: rap ,erocne ici ,are f es elle ,noitseuq ne tejbol ed noisserppus al tnauQ .elbarap moc noa f ed tiaredcca y no ,scilbup sennod serbmem sed tianetnoc tejbol iS : rap ,>- ruetarpol resilitu snas ,tnemelleutnev ,uo : emro f al ed sleppa sed rap are f es rda rap tniop tejbol ed serb me m snoitcno f xua sccaL
256
Construction, destruction et initialisation des objets CHAPITRE 13
adr -> initialise (1, 3) ; adr -> affiche ( ) ; (* adr).initialise (1, 3) ; (* adr).affiche ( ) ;

2.2 Cas dune classe avec constructeur

delete adr ;

new point

// ou

new point ()

e uqrameR

2 - Les objets dynamiques

257

2.3 Exemple
.ruetcurtsed el te ruetcurtsnoc el sleppa tnos sleuqxua stnemo m sel ecnediv ne erttem ed tnettemrep shc -if fa segassem se L .)niam rap eleppa( tcf noitcno f enu snad tiurtd el iuq te niam noitcnof al snad tniop ep yt ed tejbo nu tnemeuqiman yd erc iuq em margorp ed elpmexe nu icioV
#include <iostream> using namespace std ; class point { int x, y ; public : point (int abs, int ord) // constructeur { x=abs ; y=ord ; cout << "++ Appel Constructeur \n" ; } ~point () // destructeur (en fait, inutile ici) { cout << "-- Appel Destructeur \n" ; } } ; main() { void fct (point *) ; // prototype fonction fct point * adr ; cout << "** Debut main \n" ; adr = new point (3,7) ; // cration dynamique dun objet fct (adr) ; cout << "** Fin main \n" ; } void fct (point * adp) { cout << "** Debut fct \n" ; delete adp ; // destruction de cet objet cout << "** Fin fct \n" ; } ** ++ ** -** ** Debut main Appel Constructeur Debut fct Appel Destructeur Fin fct Fin main

enu leppa tnasia f ne tnemeticilpxe suolla tnos stnemecalpme se L .euqi man yd erinam ed riovas ,tejbo nu euolla erio m m al rerg ed erina m elues enuuq etsixen lI

stejbod euqimanyd noitarc ed elpmexE


avaJ n E

. sialgna nE .2 ...tnerffid epyt nud tejbo nu uo ruelav enu ceva tejbo nu resilaitini tuep nol o snoitautis sed sap tiatsixen lis noitasilaitini emret ua retimil suon up snoirua suoN .1
rotcurtsnoc ypoc

nO .serbmem sed nucahc ed eipoc enu reutcef fed etnetnoc es ruetcurtsnoc eC .ruetalipmoc el r a p t n e m e u qi t a m ot u a r n g , n u d l e p p a sr ol a y l I
tuaf d rap eip o cer ed ru et cu rt sn oc

.reilucit -rap sac nu te xuapicnirp sac xued reugnitsid tua f li sia m ,eipocer ed ruetcurtsnoc nud leppa sruojuot y li eipocer rap noitasilaitinid noitautis etuot snad euq erid tuep no ,evitinifd nE . t u a f d r a p ei p o c er e d r u e t c urt s n o c n u esi l it u n o u q , et n el a v -iuq noaf ed ,erid tuep no ; uvrp tse tua fd rap tnemetiart nu ,sap etsixen ruetcurtsnoc let nu iS .)redssop tiod liuq etcaxe emro f al niol sulp snorrev suon( tid reilucitrap ruetcurtsnoc nu resilitud uvrp a ++C ,noitasilaitini ellet enu resilar ruoP . e p y t e m m e d ,t n ats i x e t ej b o n u d eipocer rap tejbo nud noitarc al cnod tse tejbo nud eipocer rap noitasilaitini enU . d mon el suos snoitautis siort sec epuorger no ,elarng erinam enuD .ep yt e m m e d t ej b o ert u a nu ceva ,noitaralcd as ed srol ,silaitini tse tejbo nu o sac el riovas ,ep yt ec ed noitautis emisiort enu etsixe liuq snorrev suoN .tatlusr ud eipoc enu tios iuq tejbo nu ,etnaleppa noitcno f al lacol tne mecalp me nu snad ,rerc srola tua f li ; noitcno f enud tatlusr emmoc ruelav rap yovner tejbo nud sac el snad esop es emlborp em m e L . fitce ffe tnemugral ed eipoc enu tios iuq tejbo nu ,noitcno f al lacol tne mecalp me nu snad ,rerc ed eriassecn tse li ,sac ec snaD .noitcno f enu tne mugra ne esimsnart ert tiod tejbo nud ruelav al o ellec ts e e t n e u q r f s ul p al n o it a ut is a L . al e c r u o p r u e t c ur ts n o c e d u v r p s a p a n r u e m m ar g or p e l i s e m m ,t ej b o n u eri ur ts n o c e d eri ass e c n ts e l i s e l l e u qs e l s n a d s e c n at s n o cri c s e d ets i x e li si a M .)tejbol ed ruetpecnoc el rap let emmoc guj sniom ud( elbanevnoc laitini tat nu snad calp t riova snas rc ert arruop en tejbo nuuq edutitrec al ennod liuqsiup latne madno f tse tniop eC .wen rap uo noitaralcd enu rap rc tejbo nu ruop ruetcurtsnoc nud leppal tiassitnarag ++C tne mmoc uv snova suoN
2

rap n o ita si lait ini

. s c -ner fr sulp tnos en iuq stnemecalp me sel rerpucr nitsed setteim-essamar nu ecrg ,tnemeuqitamotua tia f es noitarbil ruel ,ehcnaver nE .wen tnemelag e mmon edoht m
258
Construction, destruction et initialisation des objets CHAPITRE 13

3.1 Prsentation

3 Le constructeur de recopie

3.1.1 Il nexiste pas de constructeur appropri


e ip oc er ed r uetc urtsn o c
1

e ip oc er

.tuafd rap sruelav sed tnedssop sliuq uvruop ,seriatnemlppus stnemugrad tnasopsid ruetcurtsnoc nu tnemelag etpecca ++C ud ISNA emron al ,rueugir etuot nE .1

.)! r ue tas i li tu n os s ap , ess al c al ed ruetpecnoc el euq enrecnoc en tniop ec te( sneil ed noitidd ruerre enu tnoretimil es erb -mem noitcno f enu rap seipocer sel selues te )eticilpxe egasse m nu ceva( noitalipmoc ne set -cetd tnoretser ruetasilitul rap eipocer ed sevitatnet sel ,sac ec snad ; noitinifd snas ,evirp noitaralcd enu reutce ffed erid--tsec ,stilibissop xued sel renibmoc ed xueiciduj ert tuep li ,elarng erina m enuD .sneil ed ruetidl rap etejer ares )sio f ettec ,erb me m noitcnof enu rap e m m( eipoc ed evitatnet etuot sac ec snad : noitini fd ed rinruo f ne snas noitcnof e n u r er al c d e d + + C r a p etr e f f o t il b iss o p a l r e si li t u iss u a t u e p n O . ess al c al e d r u e t as il i t u nu rap elbaleppa sap tsen virp ruetcurtsnoc nu ,riov el ed snonev suon em moc ,elpmexe raP .stibissop setner ffid ed alec ruop srola esopsid lI .essalc ettec ed stejbo sed eipoc al eridretni rehcrehc arruop ruetpec - n oc el , u l u o v ei p oc er e d r ue tc ur ts n o c u d ess al c e n u ri n u m e d e u q t t u l p ,s ac s n ia tre c s na D .etnasia fsitas sap tiatn sruetniop sed tnanetnoc stejbo sed tua fd rap eipoc al euq uv a nO
3.1.3 Lorsquon souhaite interdire la contruction par recopie

.noitalipmoc ed ruerre enu ariudnoc essalc al ed ruetasilitul rap stejbod eipocer ed evitatnet etuoT .essalc al ed serbmem snoit -cno f sed rap euq elbaleppa tsen li ,virp tse eipocer ed ruetcurtsnoc ec is euq areton nO .) e d n o f or p ei p o c t e e ll ei ci fr e p us e i p o c( li a v ar t u d t il ar g t n il egrahc ne erdnerp ed ruetcurtsnoc ec tsec : etnedcrp noitautis al tne meriartnoc ,elleicif -repus eipocer enu e m m sap ,euqitamotua noa f ed etia f tsen eipocer enucua ,udnetne neiB .tejbol ed noitarc al srpa ,elleutibah erinam ed leppa tse ruetcurtsnoc ec ,sac ec snaD )& tniop tsnoc( tniop )& tniop( tniop : )tniop e mmon es enrecnoc essalc al is( se mro f xued sec ed enul ed tnem - er i ot a gi l b o er t t i o d e t t- n e n o s e u q e i fi n gi s a l e C . e c n er f r r a p t n e m eri o t a g il b o s i m s n art te essalc al ed ep yt ud tnemugra lues nud tnasopsid cilbup ruetcurtsnoc nud rigas srola tiod lI . eipocer ed ruetcurtsnoc nu essalc ertov snad tnemeticilpxe rinruof zevuop suoV
1

.s i o f xued stiurtd ertd ,elpmexe rap ,srola tneuqsir sli ; sap tnores el en stniop stne mecalpme sel ,seipocer tnores sruetniop sed sruelav sel selues euq erid--tsec , elleici frepus eipoc enu eria ffa tnemelp mis arua nO .seuqiman yd stnemecalp me sed rus sruetniop sed tnan -etnoc stejbo sel ruop semlborp se m m sel cnod aresop ellE .ep yt emm ed stejbo ertne noit -atce ffa enud srol )tua fd rap( ecalp ne esi m tse iuq ellec eugolana noitautis enu l evuorter
259

3.1.2 Il existe un constructeur appropri


3 - Le constructeur de recopie

ettec ,eini fd siof enu ,rac noitucxel ed srol elbassini fd elliat ed erid ttulp tiarved no( elbairav elliat ed sreitned xuaelbat sed rerg ed tnattemrep tcev essalc enu resilitu snolla suon ,eriaf ec ruoP .essalc al snad ini fd eipocer ed ruetcurtsnoc ,tua fd rap eipocer ed ruet -curtsnoc : reuqovd snonev suon euq snoitautis xued sel rerapmoc ed snosoporp suov suoN

.enolc e mmon tejbo nud ednoforp eipoc enu tne meticilpxe rerc ed elbissop etser li ,nioseb ed sac nE .sap etsixen eipocer ed ruetcurtsnoc ed noiton a L .ecner fr rap siam ,ruelav rap non slupinam tnos stejbo se L
avaJ n E

.) n o i t a t c e f f a l e u q s u l p s a p( e i p o c e r a l r e v i t c as d n e d e l b is s o p s u l p ar e s e n l i , s r u e n e t n o c s e d s n a d s ti u d or t n i er t d s e l b i t p e c s u s s t e j b o s e d e c n a ss i a n r e n n o d e n i ts e d ts e es s a l c e n u i s e u q s n orr e v s u o N 4 .) sr u e t ar p o s e d n o i t i n i f d r us a l r c as n o c er t i p a h c e l s n a d er i a f s n or d n e r p p a s u o n e u q e c( n o i t a t - c e f f a l r u o p = r u e t ar p o l e d n o i t i n i f dr u s , n o i t a s i l a i t i n i l r u o p e i p o c e r e d r u e t c u r ts n o c n u d n o i t i n i f d : s t n e r f f i d s e ms i n a c m s e d r a p e ss a p e d n o f or p e i p o c e n u d e t p m o c n e e s ir p a l , ) e l l e i c i fr e p u s e i p o c( e l b a l b m e s t u a f d r a p t n e m e t i a rt n u t n e d s s o p s n o i t ar p o xued sel euq neiB .rini fd al e d sno ne v suo n euq ellet eipocer rap noitasilaitini d n oit - a u t i s e n u s a p c n o d t s e n n o i t a t c e f f a l ; j d t n e i a t s i x e s n r e c n o c s t e j b o x u e d s e l sr o l a s i a M . n o i t a t c e f f a l e d s a c e l s n a d e i p o c er e d s n o i t a u t is s e d r t n o c n e r j d s n o v a s u o N 3 .) e s s u a f t n e m e l l er u t a n t n a t e u q or p i c r a l , e l b a ir a v t e j b o n u r e u q i l p p a s s r u o j u o t t u e p t n a ts n o c t e j b o n u r u o p e u v r p n o i t c n o f e n u ( s e u q o v s n o i t - a u t is x u e d x u a e l b a c i l p p a i s n i a a r e t s er i u q , e mr o f e d n o c e s a l e u q r i n i f d e n e d l l i e s -noc tse li ,t nem ugra ne uer tejbol rei fido m ri oluov e d nosiar enucua t ne meuqigol a n e i p o c er e d r u e t c ur t s n o c l e t n u e m m o c , l a r n g n E . t n a t s n o c t e j b o n u r a p n o i t a s i l a i t i n i d s a c n e e s i l i t u t i a r es e d n o c e s a l e u q s i d n a t , e u q n o c l e u q t e j b o n u r a p t e j b o n u d n o i t a s - i l a i t i n i d s a c n e e s i l i t u t i a r e s er i m er p a l , s a c e c s n a D . e s s a l c e m m e n u d n i e s u a r e t - s i x e t n e i a rr u o p ) ) & t n i o p t s n o c ( t n i o p t e ) & t n i o p ( t n i o p ( s e t n e d c r p s e m r o f x u e d s e L 2 : n o i t a l i p m o c n e e t e j er t i ar e s e t n a v i u s e m r o f a l , t i o s n e l i u q i o u Q ) .c te , e m m-i u l ,i uq eip oc er ed r ue t -curtsnoc ud leppa nu cnod ,tnemugral ed eipocer rap noitasilaitini enu tiareuqilp mi eip -ocer ed ruetcurtsnoc ud leppal nonis ,euqsiup euqigol tse iuq ec( ecner fr rap si msnart tios tne mugra euqinu nos euq eipocer rap ruetcurtsnoc ua esop mi ++C euq neib zetoN 1
point (point) ; // incorrect

260

3.2 Exemple 1 : objet transmis par valeur


se uqrameR
Construction, destruction et initialisation des objets CHAPITRE 13

: leppa nos tnauqidni egasse m nu rehci ffad euq ertuad neir tia f en iuq ,tcf e m m o n er ia ni dr o n oi tc n o f e n u t c e v e p yt e d t ej b o n u r ue la v ra p ert te ms nar t e d s n ot n et n oc s u o n s u o n ,i c I .)s t e j b o d s n oi t c ur ts e d t e s n oi t c ur ts n o c s e l e c ar t al er vi us r u o p s e g a ss e m e d segahci ffa sed tuoja snova suon( etnedcrp tcev essalc al ed noitasilitud elp mexe nu icioV
3.2.1 Emploi du constructeur de recopie par dfaut

: e h c u a b er i m er p e n u t i u d n o c s u o n al e C .ruetcurtsnoc el rap uolla tne mecalpmel tnarbil ruetcurtsed nu ; euqiman yd noitacolla ettec ed grahc reitne tnemugra nu tnavecer ruetcurtsnoc nu ; t n e m e u q i m a n y d s u ol l a s t n e m e c al p m e sr u el t n or -r e v sl e u qs e l ,s t n e m l s es r us r u et n i o p n u t e u a e l b a t u d e ll i a t al ,s e n n o d s er b m e m e m m o c : tcev ruop riovrp ed lerutan srola tarap lI .elliat as tnatnesrper eritne noisserpxe enu tnat mid : e mr o f a l su os uaelbat nu eralcd essalc ettec ed ruetasilitul euq snotiahuos suoN .)sulp aregnahc en elliat
261
vect t (dim) ;

#include <iostream> using namespace std ; class vect { int nelem ; // nombre dlments double * adr ; // pointeur sur ces lments public : vect (int n) // constructeur "usuel" { adr = new double [nelem = n] ; cout << "+ const. usuel - adr objet : " << this << " - adr vecteur : " << adr << "\n" ; } ~vect () // destructeur { cout << "- Destr. objet - adr objet : " << this << " - adr vecteur : " << adr << "\n" ; delete adr ; } } ; void fct (vect b) { cout << "*** appel de fct ***\n" ; } class vect { int nelem ; double * adr ; public : vect (int n) ; ~vect ( ) ; } ;

3 - Le constructeur de recopie

: n o i t a ut is e tt e c r i t u o b a s n ot i a h u os s u o n , ti d t n e m -ertuA .uaelbat ud sruelav sed egakcots ed tne mecalpme erporp nos issua sia m ,rda te melen sennod serbmem ses ceva ,tcev ep yt ed tejbo levuon nu tnemelargtni rerc esiudnoc : leppal euq etros ne tnasia f ne emlborp ec retiv tuep nO . n o it at n e m l p m il c e va t ne ira v se c ne u qs n o c s el t n o d n oi t uc x e d ruerre enu eutitsnoc evitatnet etteC .tne mecalpme e mm el ...erbil iuq ec ,a ruop leppa tse ruetcurtsed el ,niam noitcno f al ed noitucxel ed nif al ; rda rap tniop tnemecalp mel erbil iuq ec ,b ruop leppa tse tniop~ ruetcurtsed el ,tcf noitcno f al ed noitucxel ed ni f al
b
fct (a) ;

: )rc isnia tejbo levuon el tse b( isnia esitamhcs ert tuep noitautis a L .a ed rda te melen serbmem sed sruelav sel ipocer a no leuqel snad ,tejbo levuon nu rc a : leppal ,retatsnoc el zevuop suov e mmoC
inifd t an eipocer ed ruetcurtsnoc nucua euqsroL
+ const. usuel *** appel de fct - Destr. objet - Destr. objet adr objet : 006AFDE4 - adr vecteur : 007D0320 *** adr objet : 006AFD90 - adr vecteur : 007D0320 adr objet : 006AFDE4 - adr vecteur : 007D0320 fct (a) ;

262

3.2.2 Dfinition dun constructeur de recopie

Construction, destruction et initialisation des objets CHAPITRE 13

main() { vect a(5) ; fct (a) ; }

.euqimanyd noitseg al sesimuos seitrap sel tnemelpmis siam ,rda te tni serbmem sel ici erid--tsec ,emm-iul tejbol rerc sap an ruetcurtsnoc el euq neib zetoN .1
#include <iostream> using namespace std ; class vect { int nelem ; // nombre dlments double * adr ; // pointeur sur ces lments public : vect (int n) // constructeur "usuel" { adr = new double [nelem = n] ; cout << "+ const. usuel - adr objet : " << this << " - adr vecteur : " << adr << "\n" ; }

: tnedcrp elpmexel snad eipocer ed ruetcurtsnoc ec snosiudortnI .)tnemecalpme levuon ud esserda = rda ,tne mugra ne uer tejbol ed melen erb -mem ud ruelav = melen( tejbo levuon ud sennod serbmem sel tne melbanevnoc rengiesner ; tnemugra ne uer tejbol tnad -nopserroc sruelav sel eipocer li leuqel snad tne mecalpme levuon nu tnemeuqiman yd rerc : tiod ) tejbo levuon nud noitarc al srpa leppa( ruetcurtsnoc eC . t c f e d l e p p a l e d sr ol ,reilucitrap ne ,cnod noitasilaitinid noitautis etuot snad leppa ares liuq snovas suon tnod
1

: e mr o f al e d ei p o c er r a p r u e t c ur ts n o c n u , t c e v e ss a l c al e d n i e s u a ,s n oss i ni f d s u o n , er i a f e c r u o P
b

vect (const vect &) ;

// ou, a la rigueur

3 - Le constructeur de recopie

vect (vect &)

263

: i s n i a t i a t n e s r p e s t c e v e s s a l c a l e d f e r b m e m n o i t c n o f e r t o n is sac el elpmexe rap tiares iuq ec ,ruetcurtsnoc ec e d nioseb ar uan erb me m noitcno f e n u c u a u q r er us s a s e d er i as s e c n e t s er l i u q t n a d n e p e c ar e t o n n O . n o i t i n i f d e n u c u a r i nr u o f e n e d s r o l a t i f f u s l i , e t i dr e t n i t s e e i p o c er a l e l l e u q a l s n a d e s s a l c e n u r i n i f d e d t s e t u b e l i S . e l b i n o p s i d s a p ts e n e i p o c er e d r u e t c ur t s n o c n u u q t n a s i c r p n o i t a l i p m o c e d r u err e e n u t i ar e n ar t n e ) a ( t c f l e p p a l , v ir p r a l c d t i a t ei p o c er e d r u e t c u r ts n o c er t o n i S 3 . D e x e n n A l e u q i l p x e l e m m o c , s e c n er f r e d r u e t - p m o c n u d t n a t o d a l n e n o i t a c i l p u d e t t e c r e t i v r e h cr e h c arr u o p n o ,s a c s n i a tr e c s n a D .ruetcev ud e uqi man yd eitrap al tnauqilpud ne edno forp eipoc e nu re utce ffe tnatsisn oc e l l er u t a n s u l p a l e h c r a m d a l e i p o c er r a p r u e t c u r ts n o c er t o n r u o p is i o h c s n o v a s u o N 2 .= ruetarpol ed noitini fdrus al rap euq erduosr es tuep en tniop reinred ec ,ses -irper srueisulp langis jd snoval suon e mmoC .tcev ep yt ed stejbo ertne noitatce ffad s a c n e t i ar e s o p es i u q i u l e c l g r t n a t u a r u o p s a p s n o v a n s u o n , e p yt e m m u d t e j b o ertua nu rap tcev ep yt ed tejbo nud noitasilaitinil ed e mlborp el lgr snova suon iS 1 . e m lb orp s n as t ne lu or d e s s e viss ec c us sn o it c urts e d sel ,erio m m tnemecalp me erporp nos tnadssop tejbo euqahc euq sio f ettec zetatsnoc suoV
eipocer ed ruetcurtsnoc nud noitasilitu te noitinifD
objet : 006AFD88 - adr vecteur : 007D0100 objet : 006AFDE4 - adr vecteur : 007D0320

se uqrameR

264

Construction, destruction et initialisation des objets CHAPITRE 13

+ const. usuel + const. recopie *** appel de fct - Destr. objet - Destr. objet main() { vect a(5) ; }

vect (const vect & v) // constructeur de recopie { adr = new double [nelem = v.nelem] ; // cration nouvel objet int i ; for (i=0 ; i<nelem ; i++) adr[i]=v.adr[i] ; // recopie de lancien cout << "+ const. recopie - adr objet : " << this << " - adr vecteur : " << adr << "\n" ; } ~vect () // destructeur { cout << "- Destr. objet - adr objet : " << this << " - adr vecteur : " << adr << "\n" ; delete adr ; } } ; void fct (vect b) { cout << "*** appel de fct ***\n" ; }

fct (a) ;

- adr - adr *** - adr - adr

objet : 006AFDE4 - adr vecteur : 007D0320 objet : 006AFD88 - adr vecteur : 007D0100

.leppa nos ed e msinacm el rertsulli uq tres en li : )euqiman yd eitrap enucua etrop moc en iuq( essalc erton ed tne mennoitcno f nob ua elbasnepsidni sap tsen eipocer ed ruetcurtsnoc el ,tnedcrp elpmexel tnemeriartnoc ,iciuq neib zetoN .eleppa tna yal iulec ed euqirtm ys tniop nu ruoter ne tnassinruo f ,euqirtemys e mmon erb -mem noitcno f enud etod tniop essalc enu leppa tnasia f em margorp ed elpmexe nu icioV .)eipocer as ed iulec b te tne mugra nud elr el tiauoj a leuqel snad ,1.2.3 ehpargarap ud a mhcs el ze yover( emm-iul tne mecalp mel ed unetnoc el rei fido m tia f tuot tuep elle ,ruetniop ec ed siaib el rap ,siam tne mecalpmel ed esserdal ed eipoc enu neib tioer enrec -noc noitcno f al ,sac ec snad ,te ffe nE .ruelav rap noissi msnart al er ffouq snoitaci fido m sed ertnoc noitcetorp al ed eci fnb el ertuo ne drep no ,tejbol ed euqi man yd eitrap al ruop siaM .2.3 ehpargarap ua suqov xuec euq se m m sel srola tnos erio m m tne mecalp me nud noitar -bil elbuod ed seuqsir se L .tejbol ed serbme m sel euq tnanrecnoc en elleici frepus eipoc enu tiudnoc tua fd rap eipocer al ed iolpmel ,euqiman yd eitrap enu etropmoc tejbo nu iS .tejbol ruop uvrp eipocer ed ruetcurtsnoc el r a p t i os ,t u a f d r a p ei p o c er e d r u et c urts n o c el r a p t i os e si l a r ,t i d s n o v a l s u o n e m m o c ,tse eipocer ettec ,tejbo nu enrecnoc elleuqsro L .eipocer enu ervu ne te m elle ,ruelav rap ueil a noitcno f enud ruoter ed ruelav enud uo tnemugra nud noissi msnart al euqsro L

3.3 Exemple 2 : objet en valeur de retour dune fonction

#include <iostream> using namespace std ; class point { int x, y ; public : point (int abs=0, int ord=0) // constructeur "usuel" { x=abs ; y=ord ; cout << "++ Appel Const. usuel " << this << " " << x << " " << y << "\n" ; } point (const point & p) // constructeur de recopie { x=p.x ; y=p.y ; cout << "++ Appel Const. recopie " << this << " " << x << " " << y << "\n" ; } ~point () { cout << "-- Appel Destr. " << this << " " << x << " " << y << "\n" ; } point symetrique () ; } ; void f() { void fct (vect) ; // dclaration de la fonction ordinaire fct vect v1(5) ; fct (v1) ; // appel de fct --> appel contsructeur de recopie vect v2 = v1 ; // initialisation par appel constructeur de recopie }

3 - Le constructeur de recopie

265

: )l e us u r ue tc ur ts n oc n u d ei n u m( ess a lc e tt ec dr o ba d s n or d is n o C . t n e m m e d c r p t n e s r p ei p o c er ed ruetcurtsnoc el ares silitu ruetcurtsnoc el ,sac ec snad : silaitini tejbol euq ep yt e m m ud ert ,tnemelleutnev ,arruop iuq ruesilaitinil ed ep yt el rus noitcirtser enucua esopmin ++C ,sulp eD .ruetcurtsnoc nu ruop stne mugra sed ,ellerutan uep emro f enu suos ,rinruo f e d t t u l p si a m s er b m e m s es t n e m e l p m is r es i l a it i ni d r e t n e t n o c es e d s u l p t i g as e n l i ,t e f f e n e ; tejbo nud sac el snad emm ed sulp av nen li ,)sruelav sel uo al rinruof ned euq tigas en li( stejbo non selbairav ed sac el snad ios ed av ruesilaitini let nud elr el is siaM .noitaralcd ruel ed srol ruesilaitini nu rinruo f tuep no : stejbo xua tneuqilppas stilibissop sec ,eiroht nE
int n = 12 ; int t[] = {2, 8, 3, 9} ; struct chose { int x ; float y ; } ; chose c = {2, 4.5} ;

: s n a d e m m o c , n o it ar a l c d a l e d sr ol r u es i l a it i ni n u t n ass i n -r u o f n e , er u t c urts e n u u o u a el b at n u , e l b a ir a v e n u r es il ai t ni d el b iss o p t s e li u q s n o v a s s u o N

266

4 Initialisation dun objet lors de sa dclaration

ruelav rap noissimsnart ed sac ne eipocer ed ruetcurtsnoc ud leppA


-1 -3 1 3

Construction, destruction et initialisation des objets CHAPITRE 13

class point { int x, y ; public : point (int abs) { x = abs ; y = 0 ; } ..... } ; ++ ++ ** ++ ++ --** --Appel Appel avant Appel Appel Appel Appel apres Appel Appel Const. usuel 006AFDE4 Const. usuel 006AFDDC appel de symetrique Const. usuel 006AFD60 Const. recopie 006AFDD4 Destr. 006AFD60 Destr. 006AFDD4 appel de symetrique Destr. 006AFDDC Destr. 006AFDE4 0 0 -1 -3 -1 -3 -1 -3 1 3 0 0

point point::symetrique () { point res ; res.x = -x ; res.y = -y ; return res ; } main() { point a(1,3), b ; cout << "** avant appel de symetrique\n" ; b = a.symetrique () ; cout << "** apres appel de symetrique\n" ; }

r u e t c ur t s n o c n u d l e p p a l e n ar t n e e l l e u q r e s n e p t n e m e u q i g o l t i arr u o p n O . t n i o p e p y t e d n o i ss er p x e e n u d u t i ts n o c r u e s i l a i t i n i n u t n a t r o p m o c n o i t ar a l c d e n u d n e i b t i g a s l I : n o i t a r al c d a l s n or d is n o c t e sr e i t n e s t n e m u gr a x u e d r u e t c u r ts n o c n u d e i n u m t i o s t n i o p e ss a l c e n u u q s n o s o p p u S 2 . t r t n i d er u g e t n e s r p e n t i l i b i s s o p e t t e c , e u q i t ar p n e ; s c i l b u p t n o s s e r b m e m s e l s u o t s e l l e u q s e l s n a d t e r u e t c u r ts n o c e d s a p t n a s o p s i d e n s es s a l c s e d e l b a c i l p p a e m m ts e l I .)s e r b m e m s n o i t c n o f s e d t n a tr o p m o c( s e s i l ar n g s er u t c u r ts s e l r u o p s ir p m o c y , + + C n e e l b a s i l i t u s r u o j u o t t s e i c- i u l e C . er u t c u r ts e n u u o : uaelbat nu selaitini sruelav sed rennod ruop yolpme iulec ceva essalc enud ruesilaitinil erdno fnoc sap tua f en lI 1
int t[5] = {3, 5, 11, 2, 0} ; point a = point (1, 5) ;

se uqrameR

. a t ej b ol tnemugra ne te msnart no leuqua ,)ini fd a y nouq iulec ,tnahc sac el ,uo tua fd rap iulec( tniop ed eipocer rap ruetcurtsnoc ud leppal ed eivius ,tniop ep yt ed tejbo nud noitarc al t n e m e v it c e f f e t n e n ar t n e ) ) a ( b t n i o p t e a = b t n i o p ( s n o it ar a l c d x u e d s e c , t i o s n e li u q i o u Q : tnaralcd ne tatlusr emm el unetbo tiarua no ,tne metse finaM
point a ; point b = a ; point b(a) ; point a(3) ; // on cre lobjet b, en utilisant le constructeur par recopie // de la classe point, auquel on transmet lobjet a
, r u e si l a i t i n i

: euq ellet noitautis enu issua cnod euqilppas aleC .ep yt ec ed tnemugra l u es n u r u et c ur ts n o c n u e tsi x e li u q n oi t i d n o c , nu d e n u er t nu ceva tejbo nu eralcd nol euqsrol ,elarng erina m enuD t uep r ei nr ed ec . s e t n e l a vi u q t n os
euqn oc le uq epyt no iss erp xe

: s n oi t ar al c d x u e d s el , e v i ti n i f d n E .3 ici ,ruesilaitinil ed ruelav al tne mugra ne temsnart no leuqua ruetcurtsnoc ud leppal ; a tejbo nud noitarc al : e n art n e n oi tar al c d e tt e C : erirc tnemelag esirotua suon ++C : euq ellet noitaralcd enud elr el tiares leuq uv jd snova suoN
267
point a = 3 ;

point a(3) ; point a = 3 ;

// on initialise b avec lobjet a de mme type

4 - Initialisation dun objet lors de sa dclaration

al redcca sap arruop en li ,ehcnaver nE .noyarffa.c rap noyarffa edoht m al tne meuqis -salc redcca tuep c tejboL .tniop ep yt ed ,ertnec virp ennod erb me m nu edssop c tejbol : sr o l a s n or a l c d s u o n i S
class cercle { point centre ; int rayon ; public : void affrayon ( ) ; ... } ; cercle c ;

: ri n i f d sn o v u o p s u o n
class point { int x, y ; public : int init (int, int) ; void affiche ( ) ; } ;

: i n i f d t n a y a ,e l p me x e r a P .essalc ep yt ed emm-iul ennod erb me m nu edssop essalc enuuq elbissop tia f tuot tse lI

. ) t n i o p es s a l c al r u o p + r u e t a r p o l e d n o it i n i f dr us a l es o p p u s i u q ( ) 5 , 1 ( t n i o p + b e u q e l l e t n o i ss e r p x e e n u s n es n u r e n n o d s ir p p a s n or u a s u o n e u q sr o l
point a = b + point (1, 5)

: s n a d e r v u n e e s i m ar es i u q e l l e c n o i t i s o p p o r a p n o i t p e c x e e n u s n i o m s a p er u e m e d n e n e l l E . e c ir t a c i f i l p m is t e e l l er u t a n z es s a ts e e h c r a m d e t t e C . l e p p a t s e n e i p o c er e d r u e t c ur t s n o c n u c u A . t e j b o t e c r u o p ) l e u s u ( r u e t c ur t s n o c u d l e p p a t e a t e j b o l u e s n u d n o i t a r c a y l i , t i d t n e m er t u A : e m m o c n o i t a r a l c d e t t e c r e t i ar t e d u v r p a + + C ,ruetcurtsnoc ud eticilpxe leppa rap tejb o nud noitasilaitini d sicrp sac ec snad ,tia f nE . ) 5 , 1 ( t n i o p er i ar o p m e t n o is s er p x e l c e v a r c t n e m e l l e v u o n a t e j b o l r e s i l a i t i n i d e u v n e ) f i t c e f f e u o t u a f d r a p( e i p o c e r e d
268
Construction, destruction et initialisation des objets CHAPITRE 13
point a(1, 5) ;

5.1 Introduction

5 Objets membres
: snad u o
point a = b ;

.esrevni erdrol snad sleppa tnores sli ,sruet -curtsed sed etsixe liS .elcrec ,tniop : tnavius erdrol snad sleppa tnores sruetcurtsnoc se L . tniop s i ms n art t n ores iuq stne mugra sed etsil al ,stniop-xued sel srpa ,ei ficps elcrec ed ett-nel euq ze yov suoV
class cercle { point centre ; int rayon ; public : cercle (int, int, int) ; } ; cercle::cercle (int abs, int ord, int ray) : centre (abs, ord) { ... } class point { int x, y ; public : point (int, int) ; } ;

: ruetcurtsnoc nos ed te elcrec ed noitini fd al ert tiarruop euq ec icioV .elcrec sinruo f xuec i mrap tnemeriotagilbo sisiohc ert tneviod ic-xuec : tniop ed ruetcurtsnoc ua rinruo f stnemugra sel rei ficps ,trap ertuad ; elcrec ruop ruetcurtsnoc nu rini fd ,trap enud : c n o d t u a f lI .)? erttemsnart iul no-tiarruop sruelav selleuq( leppa ert tiarruop en ruetcurtsnoc nos siam ,)elcrec ep yt ed tejbo nud noitarc enud srol( tne mecalpme nu reubirtta setrec tiarrev es ertnec erb me m nos ,snoisia f el suon is ,te ffe nE .ruetcurtsnoc snas etnedcrp elcrec essalc al rinifd sulp snovuop en suoN

: ruetcurtsnoc nu ceva eini fd t tia tniop essalc erton euq ,sio f ettec ,snosoppuS

. t ne tsi x e s li uqsr ol stejbo stner ffid sed sruetcurtsnoc sel ervu ne si m tnos tnemmoc tnanetnia m sno yoV .)er t ebrev ud( tse noitaler ep yt ed ,egatirhl rap etiudni ares iuq noitaler al esoppos noitaler ed ep yt eC .)tniop ep yt ed( ertnec nu )a( edssop elcrec nuuq ici erid neib tuep no ,tnem -evitce ffE .)riova ebrev ud a noitaler issua tid no( noissessop ed noitaler ep yt ud ses -salc ertne noitaler enu dnopserroc serb me m stejbod noitautis al ,elarng erinam enuD .)( ehciffa.ertnec.c uo )( tini.ertnec.c rap ertnec ed sedoht m xua redcca tiarruop no ,cilbup tiat ertnec iS .virp tse ertnec rac ertnec erbmem ud tini edohtm
269

5.2 Mise en uvre des constructeurs et des destructeurs


5 - Objets membres

270

Construction, destruction et initialisation des objets CHAPITRE 13

-euqitamotua leppa ares iuq ertnec ed ruetcurtsnoc ud noitanitsed tne mugrad rei ficps sap en tuep elcrec ed ruetcurtsnoc el ,tnemugra snas ruetcurtsnoc nud esopsid tniop iS 1 se uqrameR

cercle::cercle (int abs, int ord, int ray) { rayon = ray ; centre = point (abs, ord) ; cout << "Constr. cercle " << rayon << "\n" ; }

: i f i d o m i s n i a e m m ar g or p e m m u d n o i t u c x e l e r t n o m e l e m m o c , er i a t n e m l p p u s t n i o p e p y t e d er i ar o p m e t t e j b o n u t i ar e r c n o , s a c e c s n a d s i a M

serbmem stejbod sac el snad sruetcurtsnoc stnerffid sed leppA

: elcrec ed ruetcurtsn oc el isnia erirc tiarr uop nO 2 . t ne m

: telpmoc elpmexe nu icioV


#include <iostream> using namespace std ; class point { int x, y ; public : point (int abs=0, int ord=0) { x=abs ; y=ord ; cout << "Constr. point " << x << " " << y << "\n" ; } } ; class cercle { point centre ; int rayon ; public : cercle (int , int , int) ; } ; cercle::cercle (int abs, int ord, int ray) : centre(abs, ord) { rayon = ray ; cout << "Constr. cercle " << rayon << "\n" ; } main() { cercle a (1,3,9) ; } Constr. point 1 3 Constr. cercle 9

.tnasiafsitas sruojuot sap tiatn iuq ec ,)ypoc esiwtib( tib tib tiasia f es eipoc al ,++C ed snoisrev serimerp sel snaD .ypoc esiwrebmem
e d elra p no , sial gna nE .1

ei po cer e d ru et cu rt sn oc erp orp n os


1

.)etnadnopserroc essalc al snad ini fd ruetcurtsnoc nu tios ,tua fd rap ruetcurtsnoc nu tios ert arruop iuq( tn al -eppa ne areipocer el no ,tejbo nu emm-iul tse serbme m sed nul is ,tid tnemertua ; erb mem rap erbme m tiaf es )tua fd rap( eipocer al ,serb mem stejbo sed etrop moc tejbol euqsro L .se n no d ser b m e m st n er f f id s ed sruelav sel reipocer ed srola tigas liuqsiup ,serb me m stejbod sap tnatrop moc en stejbod sac el snad elpmis tse elr noS . fitce ffe eipocer ed ruetcurtsnoc ed ecnesbal ne leppa tse iuq ,tua fd rap eipocer ed ruetcurtsnoc nu uvrp tse li ,essalc etuot ruop ,euq uv snova suoN

. ) t c e p s er sr u o j u o t ts e s n o i t a c ir b m i s e d er dr o l( s er t u a s i or t s e l s r p a u q t u c x e ar es e n C r u e t c ur t s n o c e l , e r d n e t t a y s t u e p n o e m m o c , e h c n a v er n E . e c n a tr o p m i l e d r i o v a t i arr u o p er d r o t e c o s n o i t a t u t i s s e d a r e t i v n o , e u qi t a r p n E . sr u e s i l a i t i n i s e d i u l e c s a p n o n t e , e ss a l c a l s n a d n o i t ar a l c d r u e l e d i u l e c e ir o h t n e t s e s t u c x e t n os sr u e t c ur t s n o c s i or t s e c l e u q e l s n a d er dr o l e u q n e i b z e t o N . 2 a e d A r u e t c u r ts n o c u a r s i u p , b e d B r u e t c ur t s n o c u a q t e x , 1 a e d A ruetcurtsnoc ua si msnart ares p ,tioer li uq r te q ,x ,p ,n stne mu gra sel i mraP .engil n e t i a t C e d r u e t c ur t s n o c e l e u q s o p p us s n o v a s u o n , er u t i r c l r e i f i l p m i s r u o p , i c I

: e lp m e x e n u i c i o v n E . e l u gr i v e n u r a p e t s i l e u q a h c t n ar a p s n e t i a f es sr u e t c u r ts n o c s t n er f f i d x u a s n i ts e d s t n e m u gr a s e d n o i t c e l s a l , s e r b m e m s t e j b o sr u e i s u l p t n a tr o p m o c s t e j b o d s a c e l s n a D 3
Constr. point 0 0 Constr. point 1 3 Constr. cercle 9

5.3 Le constructeur de recopie


class A { ..... A (int) ; ..... } ; class C { A a1 ; B b ; A a2 ; ..... C (int n, int p, double x, int { ..... } ..... } ; q, int r) : a1(p), b(x,q), a2(r) class B { ..... B (double, int) ; ..... } ;

5 - Objets membres

271

: isnia redcorp arruop no ,ehcnaver nE : curt ed ruetcurtsnoc el snad n resilaitini ruop isnia redcorp ed elbissop sap tsen li
class truc { const int n ; public : truc () ; ..... } ; truc::truc() { n = 12 ; } // interdit : n est constant

: essalc ettec ceva ,elp mexe raP . tnatsnoc ennod erbmem nud noitasilaitinid : sac ne elbasnepsidni rineved tuep )ruetcurtsnoc nu sniom uad tnasopsid sesilarng serutcurts xua tnemelag euqilppas iuq( tilibissop etteC : e u q issa lc r ue tc urt s n o c ert o n r ec al p m er ruop eria f sulp ed neir a yn liuqsiup ,ici ediv tse sproc noS .dro te sba sruelav sel tne m -evitcepser ceva y te x serb me m sed noitasilaitinil areuqovorp tniop ruetcurtsnoc ud leppaL
class point { int x, y ; public : point (int abs=0, int ord=0) : x(abs), y(ord) {} ..... } ; point (int abs=0, int ord=0) { x=abs ; y=ord ; }

: elpmexe raP .tejbo nud sap tigas en lis e m m ,erbmem leuq etrop min reuqilppas tia f ne tuep erbmem tejbo nud ruetcurtsnoc nu stnemugra sed ertte msnart ruop 2.5 ehpargarap ua etircd snova suon euq exatn ys a L

.2.5 ehpargarap ua etircd euqinhcet al tnasilitu ne ,serb me m ses ed sniatrec ed )non uo tua fd rap( eipocer rap sruetcurtsnoc xua seriassecn snoitamro fni sel erttemsnart alec ruop arruop no ,tnadnepeC .tejbol ed eipocer al ed tilargtnil egrahc ne erdnerp srola arved reinred eC .irporppa eipocer ed ruetcurtsnoc nud rinu m el ardua f li ,sruetniop sed tneitnoc tejbol is ,ehcnaver nE .)sirporppa eipocer rap sruetcurtsnoc sed sinum xue tnauq tneios sliuq noitidnoc ( tnetropmoc ne serb me m st ej b o s es e d s ni atr e c is e m m ,s e u qi m a n y d s ei tr a p s e d r u s sr u e t ni o p e d s a p t n e it n o c e n li u q srol sd etnasia fsitas ares tejbo nud )tua fd rap( eipocer rap noitcurtsnoc al euq ei fingis aleC
272
Construction, destruction et initialisation des objets CHAPITRE 13

6 Initialisation de membres dans len-tte dun constructeur

truc::truc() : n(12) { ..... }

.stejbo siarv ed tnores iuq )noitucxel ed li f ua reirav arruop elliat al tnod( seuqim -an yd xuaelbat sed rini fd ed arttemrep dradnats euqhtoilbib al ed rotcev essalc al euq zetoN
class courbe { point p[20] ; ..... } ;

: rap ebruoc ep yt n u r in i f d s n oirr uo p s u on , is ni A . st ej b o d ua el b at nu t se ser b m e m se d nu t n o d ess al c e nu rini fd ed elbissop sruojuot etser li ,ehcnaver nE .tejbo nu sap tsen stejbod uaelbat nU

e uqrameR

: rap stniop sel suot rehci ffa arruop no ,e m m eD .)seshtnerap ed rihcnarf fas ed tnettemrep ][ te . sruetarpo sed sevitaler stiroirp sel( ]i[ebruoc tniop el ruop tini erbmem el arelleppa : noitcurtsniL .tniop ep yt ed tejbo nu arengisd ]i[ebruoc noitaton al ,reitne nu tse i iS : rap tniop ep yt ed stejbo tgniv ed ebruoc uaelbat nu reralcd snovuop suoN
class point { int x, y ; public : void init (int, int) ; void affiche ( ) ; } ; point courbe [20] ; courbe[i].affiche () ;

. sr u e s il ai t i n i x u a t e sr u et -curtsnoc sed leppal s fitaler stniop sniatrec resicrp ardua f suon li ,ehcnaver nE .elp mexe nud ritrap releppar ed retnetnoc suon snolla suon euq snoitaton sed uaevin ua serilucitrap stluci ffid ed sap etnesrp en tpecnoc eC .stejbod xuaelbat sed srola tiudnoc iuq ec ,essalc ep yt ed sirpmoc y ,ep yt leuq etrop min ed stne ml sed redssop tuep uaelbat nu ,++C nE .s p m e t r ei m er p n u s n a d r o n gi er t t u e p e h p ar g ar a p e C
.B.N

.)7 ertipahc ud 2.31 ehparg - ar a p e l t n e m e ll e ut n e v z e y o v er( r u e l a v el l e v u o n e n u r et c e f f a i u l s i a m a j , e c n er f r e ll e t e n u resilaitiniuq tuep en no ,te f fe nE .ecnerfr enu tse iuq ennod erbmem nud noitasilaitinid
273

7.1 Notations

7 Les tableaux dobjets

for (i = 0 ; i < 20 ; i++) courbe[i].affiche() ;

: rap eini fd ,ruetcurtsnoc snas tniop essalc enu tioS

7 - Les tableaux dobjets

.sreinred sel ert tnemeriotagilbo tneviod stnauqnam stneml sel ,tnatsnil ruop siaM .1
#include <iostream> using namespace std ; class point { int x, y ; public : point (int abs=0, int ord=0) // constructeur (0, 1 ou 2 arguments) { x=abs ; y =ord ; cout << "++ Constr. point : " << x << " " << y << "\n" ; } ~point () { cout << "-- Destr. point : " << x << " " << y << "\n" ; } } ;

.)stne mugra xued te nu ,orz sruetcurtsnoc siort ecalp mer li : tua fd rap stne mugrad tnasopsid ruetcurtsnoc nu isiohc snova suon( stilibissop sec tnartsulli elp mexe nu icioV .ruelav enucua dnopserroc en sleuqxua stne ml sel ruop )retsixe cnod tiod iuq( tne m -ugra snas ruetcurtsnoc ud leppa a y li ,sac ec snaD . stne mld an uaelbat el euq sruelav ed sniom retrop moc tuep ruesilaitinil ,ertuo nE .)nioseb a ne no o tne mo m ua elbaluc -lac tios elleuq uep ruop( euqnocleuq noisserpxe enu ert tnevuep ruesilaitinil ed sruelav sel ,euqitamotua essalc ed xuaelbat sel ruoP .)tnadnopserroc ruetcurtsnoc el etsixe li o eruse m al snad ,sertua sed snu sel stner ffid tne melleutnev ,seuqnocleuq sep yt ed ert cnod tnev -uep sruelav sel( irporppa ruetcurtsnoc nu esimsnart ares ruelav euqahc ; sruelav ed etsil enu tnatropmoc ruesilaitini nu rap noitaralcd ellet enu retlpmoc ed elbissop tnadnepec tse lI .nu snio m ua etrop moc ne )tniop( enrecnoc essalc al euq srol sd ,ruetcurtsnoc nu rap egas -sap el ritnarag ed erusem ne sulp tsen ++C ,te ffe ne sac ec snaD .noitalip moc ed ruerre enu ariudnoc etnedcrp noitaralcd al ,tnemugra snas ruetcurtsnoc nu tsen tniop ed sruetcurt -s n o c s e d n u c u a is , e h c n a v er n E . e b r u o c u a e l b a t u d ) t n i o p e p y t e d ( s t n e m l s e d n u c a h c r u o p tne mevisseccus leppa ares ic-iulec ,tnemugra snas ruetcurtsnoc nu etropmoc essalc al iS .ruetcurtsnoc snas essalc enu tse tniop o sac el snad
1

: n o it ar a l c d a l e d n oi t a ci f i n g is a l r i o v e d s n o n e v s u o N

.tejbo nu issua tse esab ed ep yt nud stne mld uaelbat elpmis nu emm siam ,tejbo nu tse stejbod uaelbat nu tnemelues noN
avaJ n E

274

7.2 Constructeurs et initialiseurs


Construction, destruction et initialisation des objets CHAPITRE 13

point courbe[20] ;

.uaelbat ud stneml sed nucahc ruop tnadnopserroc ecapsel ed noitarbil al te tniop ed ruetcurtsed ud leppal areuqovorp ic-elleC : )stejbod uaelbat nu eria ffa a nol euq tnesicrp iuq ][ stehcorc sed ecnesrp al zeton( noitcurtsnil ed ari ffus li ,stejbod uaelbat erton eriurtd ruoP .)2.6 ehpargarap riov( seuqitats uo seuqitamotua xuaelbat ed sac el snad elb -issop tse alec euq srola ,ruesilaitini nu rinruo f ed tilibissop enucua ici etsixen li ,ertnoc raP .ruetcurt -snoc nucua etropmoc en tniop essalc al is aresop es en reilucitrap e mlborp nucua ,udnetne neiB .noitalipmoc ed ruerre enu ariudnoc etnedcrp noitcurtsnil ,tne mugra snas ruetcurt -snoc nu tsen tniop ed sruetcurtsnoc sed nucua is ,ehcnaver nE .stejbo tgniv sed nucahc ruop leppa ares reinred ec ,tne mugra snas ruetcurtsnoc nu etropmoc tniop essalc al is ,erocne L . e b r u o c d a s n a d s t e j b o s e c e d r ei m er p u d ess er d al ecalp te ,tniop ep yt ed )s fitucsnoc( stejbo tgniv eriassecn erio m m tnemecalpmel euolla : elpmexe raP .wen ruetarpol leppa tnas -ia f ne stniop ed uaelbat nu tne meuqi man yd rerc tuep no ,tniop essalc enud esopsid nol iS
point * adcourbe = new point[20] ; delete [] adcourbe

)0.2 noisrev( stejbod uaelbat nud noitasilaitini te noitcurtsnoC


++ Constr. point : 7 0 ++ Constr. point : 3 0 ++ Constr. point : 11 0 ++ Constr. point : 0 0 ++ Constr. point : 0 0 *** fin programme *** -- Destr. point : 0 0 -- Destr. point : 0 0 -- Destr. point : 11 0 -- Destr. point : 3 0 -- Destr. point : 7 0

7.3 Cas des tableaux dynamiques dobjets


main() { int n = 3 ; point courbe[5] = { 7, n, 2*n+5 } ; cout << "*** fin programme ***\n" ; }

7 - Les tableaux dobjets

275

.b + x * a noisserpxel ed noitaulavl ed tatlusr el rillieucer nitsed eriaropmet tnemecalpme nud noitarc neib a y lI .b + x * a = y euq ellet noitatcef fa enu esilar nol euqsrol emm ed av ne li ,tia f nE .1

.esserda nos tnemelag siam tejbol ed sruelav sel tnemelues non rehci ffad ,tniop essalc erton ed ruetcurtsed el te ruetcurtsnoc el snad ,uvrp snova suon ,iciuq zeuqrameR .seriarop met stejbod iolpmel tnartnom e mmargorp ed elp mexe nu icioV .elbissop euq sd tiurtd tios liuq tiovrp e mron a L .etucxe tse noitatce ffad noitcurtsnil euq sd trtnid sulp an li ,rc isnia eriaropmet tejbol tnauQ .)ep yt e mm ed ertua nu tejbo nud noitatce f fa( a snad eriaropmet tejbo tec ed eipocer al ; )2 te 1 ici( si ficps stne mugra sed noissimsnart ceva ,eriarop met tejbo tec ruop tniop ruetcurtsnoc ud leppal ; )em margorp ua elbissecca sap tsen li siam ,esicrp esserda enu a li( tniop ep yt ed eriarop met tejbo nud noitarc al : t i u dn o c
1

: noisserpxel ed noitaulavl ,noitcurtsni ellet enu snaD : euq ellet noitatce ffa enu erirc ,tniop ep yt ed tejbo nu tse a is ,snovuop suon : ruetcurtsnoc el edssop tniop essalc enuuq snosoppus suon is ,elp mexe raP .eriaropmet tejbo nud noitarc srola a y lI .)seriassecn stne mugrad etsil al ceva( tnemeticilpxe leppa ert tuep reinred ec ,ruetcurtsnoc nud esopsid essalc enuuqsro L .spmet rei merp nu snad rongi ert tuep ehpargarap eC .B.N
point (int, int) ; a = point (1, 2) ;

276

8 Les objets temporaires

Construction, destruction et initialisation des objets CHAPITRE 13

#include <iostream> using namespace std ; class point { int x, y ; public : point (int abs, int ord) { x = abs ; y = ord ; cout << "++ Constr. point << " a ladresse : " } ~point () { cout << "-- Destr. point << " a ladresse : " } } ; point (1, 2)

// destructeur ("inline") " << x << " " << y << this << "\n" ; " << x << " " << y << this << "\n" ; // constructeur ("inline")

.euqimanyd eitrap enu etropmoc )tejbo emm-iul( erbmem nu tnod stejbo sel sac ec snad snoulcni suoN .1

.e n n o d e ss a l c e n u d s t e j b o d t c a x e t n e m er b m o n d e l e l i c i f f i d er d n e r t u e p ) e m r o n a l r a p s o p m i t n e m e t i a fr a p s a p t s e n n o i t c ur t s e d e d t n e m o m e l t n o d ( s er i a r o p m e t s t e j b o d e c n e s r p a L 4 . e i p o c er e d r u e t c ur t s n o c u d l e p p a r a p s i l a i t i n i ts e er i ar o p m e t t e j b o l ,s a c x u e d s e l s n a D .etnaleppa noitcno f al ed nies ua eriaropmet te j b o n u d n o it arc a y li ; n oi tc n o f e n u d r u ot er e d r u el a v n e t ej b o n u d n o iss i m s n art ; enrecnoc noitcno f al ed nies ua eriarop met tejbo n u d n oi t a r c a y l i ; n o it c n o f e n u d t n e m u gr a n e t e j b o n u d r u e l a v a l e d n o iss i m s n art : r i o v as , s er i ar o p m e t s t e j b o s e d s r c t n o s s e l l e u qs e l s n a d s e c n a t s n o cr i c s er t u a d e t s i x e l I 3 . n o i t a t c e f f a d r u e t ar p o l e d n o i t i n i f d r u s a l r i o v as , n o i t u l os e m m a l r e s i l i t u a rr u o p n O . i c i s e l b a l a v t n e t s er , s e u q i m a n y d s e i tr a p s e d t n e tr o p m o c s l i s t n e m m a t o n ,s t e j b o er t n e n o i t a t c e f f a e n u e t n e s r p e u q s e u qs i r s e l r u s s e u qr a m er s e L 2 .a r u op u a e v i n e c r u e t c ur t s n o c e d l e p p a d s a p a y n l i t e r c er t s a p c n o d a n l I . j d e t s i x e a t e j b o l
1

: euq e ll et no i ta tc e f fa e n u s n ad e uq sn o tp R 1

.a euqitamotua tejbol enrecnoc ,noitucxel ed nif al srpa esilar ,noit -curtsed erinred a L .srpa etius ed tuot tiurtd evuort es iuq ,a ed tcnitsid eriaropmet tejbo nud noitarc al tnenartne niam noitcno f al ed snoitatceffa xued sel euq tnemerialc tiov nO
seriaropmet stejbod noitarc ed elpmexE
ladresse : 006AFDE4

+ Constr. + Constr. - Destr. + Constr. - Destr. ***** Fin - Destr.

main() { point a(0,0) ; // un objet automatique de classe point a = point (1, 2) ; // un objet temporaire a = point (3, 5) ; // un autre objet temporaire cout << "****** Fin main ******\n" ; }

a = point (1, 2) ;

se uqrameR

point 0 0 a point 1 2 a point 1 2 a point 3 5 a point 3 5 a main ****** point 3 5 a

ladresse ladresse ladresse ladresse ladresse

: : : : :

006AFDE4 006AFDDC 006AFDDC 006AFDD4 006AFDD4

8 - Les objets temporaires

277

278

Construction, destruction et initialisation des objets CHAPITRE 13

: e u q s e l l e t s n o i t a u t i s s e d s n a d t n e m m a t o n , s er i ar o p - m e t s t e j b o d s n o i t a r c s e n i a t r e c r e m ir p p us sr u e t a l i p m o c s e l e s ir o t u a I S N A e mr o n a L 5
f (point(1,2) ; // appel dune fonction attendant un point avec un // argument qui est un objet temporaire ; limplmentation // peut ne pas crer point(1,2) dans la fonction appelante return point(3,5) ; // renvoi de la valeur dun point ; limplmentation // peut ne pas crer point(3,5) dans la fonction

.svirp serbmem sel emmoc stiart tnos sgtorp serbmem sel euq rerdisnoc zevuop suov ,tnatsnil ruoP .91 ertipahc ua snorelrap ne suon ; egatirhd sac neuq tneivretnin )detcetorp( gtorp tutats eL .1

snad eriudortni tnemelag zeirruop suoV .noitcetorp ruel ed eci fnb el srola zeirdrep suov sia m ,sessalc xued sov ed sennod sel seuqilbup erdner sruojuot zeirruop suov ,udnetne neiB .)e ssa lc enucuad erb mem erid--tsec( etnadnepdni noitcno f em moc sniom erocne te ,ecirtam essalc al ed erbmem noitcno f emmoc in ,ruetcev essalc al ed erbmem noitcno f em moc in noit -cno f ettec rini fd snoirruop en suon ,++C ed tnemelleutca snossiannoc suon euq ec ceva ,rO .ruetcev nu rap ecirtam enud tiudorp el reluclac ed tnattemrep noitcno f enu rini fd srola zer -etiahuos suov euq elbaborp tse lI . ecirtam essalc enu te )! etrop mi uep ,elbairav uo exi f elliat ed( ruetcev essalc enu ini fd ze ya suov euq elp mexe rap zesoppuS .secnatsnocric seniatrec snad etnang ervas etniartnoc ettec rO .essalc ertua enud sevirp sennod sed redccad essalc enud erbmem noitcno f enu tidretni noitaluspacned epicnirp emm ec ,ehcnaver nE .21 ertipahc ud 4 ehpargarap ua etnesrp )tniop ep yt ed stejbo xued ed ecnedicnoc al ed nemaxe( edicnioc noitcno f al snad tiasiudorp es iuq ec tseC .essalc as ed stejbo sel suot redcca tuep erbmem noitcno f e mm enuuq erid--tsec ,essalc al tse noitcetorp ed tinul ++C neuq uv issua snova suoN . r ue ir tx el ed selbissecca tnos scilbup serbmem sel slues te ) sevirp uo seuqilbup( serb me m snoit -cno f xuauq selbissecca tnos en )snoitcno f uo sennod( svirp serbmem sel : ++C ne ervu ne erttem al tne mmoc uv snova suoN .sennod sed noitaluspacnel esopmi erup .O.O.P a L
1

Les fonctions amies

14

.sialgna ne ,dneirF .1

li ,sio f ettec( tniop ep yt ed stne mugra xued tiarvecer edicnioc euq uvrp snova suon ,tne mel -lerutaN .dneirf lc tom ud dcrp ,edicnioc noitcno f al ed ep ytotorp ud tne msicrp tigas lI : ri o va s ,eirporppa itimad noitaralcd al tniop essalc al snad eriudortni tua f suon li ,drobad tuoT .tniop essalc al ed ei ma etnadnepdni noitcno f enu edicnioc noitcno f al ed sio f ettec tnas -ia f ne ,e mlborp e mm el erduosr ed ici snosoporp suov suoN .tniop essalc al ed erb me m noitcno f enu tia f snova ne suon ,eria f ec ruop ; tniop ep yt ed stejbo xued ed ecnedicnoc al tnanimaxe edicnioc noitcno f enu tiudortni snova suon ,21 ertipahc ud 4 ehpargarap uA
friend int coincide (point, point) ;
1

. e ss a l c e n u d n o it at i ol p x e l r u s s e i m a s n o i t c n o f e d e c n e tsi x el e d e c n e d i c n il s n orr e v s u o n , ni f n E . i ti m a d s n o it a ut is s e c e d e n u c a h c li at d n e e ti us n e s n or e n i m a x e s u o N . e i m a n oi t c n o f e n u d n oi t a s -ilitu te noitini fd ,noitaralcd ed xuarng sepicnirp sel retnesrp arivres suon erimerp a L . es s a l c er t u a e n u d s e i m a , ess al c e n u d s er b m e m s n o i t c n o f s el s e t u ot ; s es s a l c sr u ei s ul p e d ei m a n o it c n o f ; essalc ertua enud eima ,essalc enud erbmem noitcno f ; ess a l c e n u d ei m a , e t n a d n e p d n i n o it c n o f : s it i m a d s n oi t a u tis sr u e is ul p e tsi x e l I ! ert u a enu ruop ressap eria f es sio frap tuep noitcno f enu o eruse m al snad ,tarap yn liuq ecaci ffe sniom uep nu tse noitcetorp al euqitarp neuq sio fetuot snorrev suoN .essalc al snad uvrp t sap an alec is essalc enud eima noitcno f e mmoc resopmis sap tuep en no : enrecnoc essalc al ed uaevin ua scca sed elrtnoc el ertte mrep ed tse edohtm ettec ed egatnavaL .erb me m noitcno f elleuq etropmin euq ertit em m ua ,sevirp sennod xua redcca srola esirotua sel itimad noitaralcd ellet enu ; sei ma sed tnos )essalc al serueirtxe( snoitcno f srueisulp uo enuuq reralcd ed elbissop te ffe ne tse li ,essalc enud noitinifd al ed sro L .seuqilbup sennod sed te sevirp sennod sed elle mro f noitaluspacne ertne simorpmoc nud e mrof al suos ,etnassertni noitulos enu esoporp eima noitcnof ed noiton al ,tia f nE . .. n oi t u c x e d s p m e t n e si l a n p sr ol a z e ir es s u o v s i a m ,s e n n o d x u a r e d c c a d t n at t e mr e p s e u q il b u p s n oi t c n o f s e d s ess al c x u e d s e l
280
Les fonctions amies CHAPITRE 14

1 Exemple de fonction indpendante amie dune classe

e m m e l s n or e v u or t er s u o N . e u q ir t m ys t n e m e t i a fr a p t n a n e t n i a m ts e e d i c n i o c n o i t c n o f er t o n , 2 1 er t i p a h c u d 4 e h p ar g a r a p u a t i a s i u d or p e s i u q e c t n e m er i ar t n o c , i s n i A .) s i h t ( eticilp mi t nem ugrad ici s ulp sn ovan s uon ,reuqramer tia f jd sn oval su on e m moC 3 .ruerre e nu sap tiare utitsn oc en ei ma noitcn o f al e d e ul frep us noitaralc d e nu ,sni om - n a N . ) e d u l c n i # r a p t n e m e l ar n g( n o i t ar a l c d a l e r i u d o r t n i n e sr o l a a r d u a f l i u q s i u p , t n e m r a p s e l i p m o c t a es s a l c a l o ) l e u s u( s a c e l s n a d e l b a l a v e t s e r a l e C . e n - r e c n o c es s a l c a l s n a d e r a l c d t n e m er i o t a g i l b o j d ts e e l l e r a c , es i l i t u l n o o e cr u os r e i h c i f e l s n a d u o n o i t c n o f a l s n a d e i m a n o i t c n o f a l r er a l c d e d er i a ss e c n s a p ts e n l I 2 . t ner f - fidni tnemulosba tse tniop essalc al ed nies ua itimad noitaralcd al ed tnemecalpmeL 1

se uqrameR

tniop essalc al ed eima )edicnioc( etnadnepdni noitcnof ed elpmexE


a coincide avec b a et c sont differents

: em margorp ed elpmexe nu icioV .reilucitrap e mlborp nucua esop en edicnioc noitcno f al ed erutircL .)leppa tna yal tejbol tnadnopserroc siht eticilp mi tne mugrad sap cnod arvecer en elle : erbmem noitcno f enud sulp tigas en
281

#include <iostream> using namespace std ; class point { int x, y ; public : point (int abs=0, int ord=0) // un constructeur ("inline") { x=abs ; y=ord ; } // dclaration fonction amie (indpendante) nomme coincide friend int coincide (point, point) ; } ; int coincide (point p, point q) // dfinition de coincide { if ((p.x == q.x) && (p.y == q.y)) return 1 ; else return 0 ; } main() // programme dessai { point a(1,0), b(1), c ; if (coincide (a,b)) cout << "a coincide avec b \n" ; else cout << "a et b sont differents \n" ; if (coincide (a,c)) cout << "a coincide avec c \n" ; else cout << "a et c sont differents \n" ; }

1 - Exemple de fonction indpendante amie dune classe

.sinifdrus sruetarpo sed sac el snad eriotagilbo ares ec siaM .1

. e u ver n e re s -sap sel tnanetniam snolla suoN .setnerf fid tne mergl srt itimad snoitaralcd sed eriud -noc tnevuep selle ,epicnirp emm el rus sedno f ; selbissop tnos itimad snoitautis sertuaD .essalc al snad o etrop min rerugi f tuep itimad noitaralcd al euq snoleppar suov suon ,tniop ed euqilbup eitrap al snad ici ecalp sno yal suon euq neiB
)tniop( essalc enud eima )edicnioc( etnadnepdni noitcno F

: tn a vi us a m hc s e l r ap e m us r ert tuep ic-elleC .essalc enud eima etnadnepdni noitcno f enud sac el reni maxed snonev suoN

. 2 1 er t i p a h c u d 6 e h p ar g ar a p u a u q o v t j d a e n m o n h p e C . n o i t c n o f a l e d e i tr o s a l r b i l t t i ar u a i u q er i o m m t n e m - e c a l p m e n u d e ss er d a l t i ar v e c er e t n a l e p p a n o i t c n o f a l ,) e ss e r d a r a p u o ( e c n er f r r a p n o i s s i m s n ar t e n u d s a c e l s n a d ; r u e l a v r a p u e i l t i a n o i s s i m s n ar t a s e u q f i t a r p m i sr o l a t s e l I . n o i t c n o f a l l a c o l t e j b o n u d e l l e c t i o s r u e l a v e t t e c e u q t n e u q r f t s e l i , e s s a l c e t t e c e d e p y t u d r u o t er e d r u e l a v e n u t i nr u o f es s a l c e n u d e i m a n o i t c n o f e n u u qs r o L 6 . . . n o i t c n o f e t t e c x ua c o l s t e j b o d s v i r p s er b m e m x u a r e d c c a d n i o s e b t n a y a n o i t c n o f e n u r e n i g a m i t i a rr u o p n o : n o it a g i l b o e n u s a p s i o f e t u o t t s e n e C . )s t n a d n o p s err o c s t e j b o s e d s v ir p s er b m e m x u a s c c a d n i o s e b n os ar e i f i t s u j i u q e c ts e c ( e ss a l c e tt e c e d e p y t u d r u o t er e d r u e l a v e n u uo stne mu gra sr ueisulp uo nu aredssop essalc enu d ei ma noitcno f en u ,tne melarn G 5 . ) s i h t e d e mr o f a l s u o s( e c n er f r r a p s i m s n ar t e c i f f o d t s e n o i t c n o f a l t n a l e p p a t e j b o l , er b m e m n o i t c n o f e n u d s a c e l s n a d , e u q z e t o n ; e c n er f r rap ertl tneiarr uop slI .ruelav rap simsnart tn os edicnioc e d stne mugra xued sel ,ic I 4 . ) e u q ir t m y s( e i m a n o i t c n o f e n u u o ) e u q ir t m ys s i d ( e r b m e m n o i t c n o f e n u e r t n e r is i o h c s n o rr u o p s u o n , er i a n i b r u e t a r p o n u r i n i f dr u s r u o p , e u q sr o l e n m o n h p
1

282

2 Les diffrentes situations damiti

Les fonctions amies CHAPITRE 14

class point { // partie prive ..... // partie publique friend int coincide (point, point) ; ..... } ;

int coincide (point ..., point ...) { // on a accs ici aux membres pri// vs de tout objet de type point }

: e d A e d n o i t ar a l c d a l r e d c r p t n a s i a f n e r u e t a l i p m o c u a e u l u o v n o i t a mr o f n i l ar i nr u o f n o , t n a v a er t a r a p p a u p a n B e d n o i t ar a l c d a l , t i d er t d t n e i v i u q e c s r p a d , e m m o C . e s s a l c e n u d t i g a s l i u q r i o v a s e d t i f f us i u l l I . A e d s e u q i t s ir t c ar a c s e l t n e m s i c r p er t a n n o c e d n i os e b s a p a n r u e t a l i p m o c e l , B e ss a l c a l e d n i e s u a t n a r u g i f : n o i t ar a l c d a l t n e m e l b a n e v n o c r e l i p m o c r u o p , e h c n a v er n E . A e d e l l e c t n a v a e l i p m o c t r i o v a ar v e d ) s er b m e m s n o i t c n o f s es e d n o i t i n i f d a l t n e m e r i as s e c n s a p s i a m ( B e d n o i t ar a l c d a l e u q e i f i n g i s a l e c ; B e d s e u q i t s ir t c ar a c s e l er t a n n o c e d n i o s e b a r u e t a l i p m o c e l : e u q el l et it i m a d n oi t ar al c d e n u t n a n e t n o c A ess al c e n u d s n o it ar a l c d s e l t n e m el b a n e v n o c r e li p m o c r u o P 1
friend int B::f(char, A) ; int f(char, A)

)A( essalc ertua enud eima ,)B( essalc enud ) f( noitcnoF


class B { ..... int f (char, A) ; ..... } ; int B::f (char ..., A ...) { // on a accs ici aux membres privs // de tout objet de type A }

: noitautis al ed fitalutipacr a mhcs nu icioV : r a p ess al c al e d n i es u a e i m a eralcd ares elle ,A ed svirp serb me m xua redcca riovuop tiod f ,elbaborp tse li e mmoc ,iS : ep ytotorp ed ,f erbmem noitcno f enud B snad nioseb sno ya s u o n e u q t e B t e A se m m o n s essa l c x ue d ri n i f d s n o ya s u o n e u q sn os o p p us , el p m e xe ra P .)::( etrop ed noitulosr ed ruetarpol ed edial ,enrecnoc noitcno f al tneitrappa elleuqal essalc al ,itimad noitaralcd al snad ,resicrp ed tnemelpmis ti ffus li ,tia f nE .etnedcrp noitautis al ed reilucitrap sac nud uep nu tigas lI
int f(char, A) ; friend int B::f(char, A) ;

2.1 Fonction membre dune classe, amie dune autre classe

class A { // partie prive ..... // partie publique friend int B::f (char, A) ; ..... } ;

class A ;

se uqrameR

2 - Les diffrentes situations damiti

283

.)tnanerprus issua tuot tiares iuq ec( A ed erbmem nucua tiadccan erinred ettec is te f snad tiassiarappan epyt ec ed tnemugra nucua is A ruop emm ed tiari ne lI .)tnanerprus tiares iuq ec( serbmem ses ed nucua tiadccan f is B ruop ueil tiarua noitpecxe enU .1

)B te A( sessalc xued ed eima ) f( etnadnepdni noitcno F


class A class B { // partie prive { // partie prive ..... ..... // partie publique // partie publique friend void f(A, B) ; friend void f(A, B) ; ..... ..... } ; } ; void f(A..., B...) { // on a accs ici aux membres privs // de nimporte quel objet de type A ou B }

: B t e A ses sa lc x u e d e d e i m a noitcno f enud elpmexe nu icioV .sessalc setner ffid snad itimad snoitaralcd ed tejbol essa f )erb mem noitcno f uo etnadnepdni tios elleuq( noitcno f emm enuuq ehcpmen neiR

. ) 3 . 2 e h p ar g a r a p u a er i a f e l s n o r d n er p p a s u o n e m m o c ( e r t u a l e d e i m a s es s a l c s e d e n u s n i o m u a r er a l c d e ts i s n o c r i n e vr a p y d n o a f e l u e s a l ,s e t n e r f f i d s es s a l c x u e d e d s n o i t c n o f e r t n e s e s i o r c s i t i m a d s n o i t a r a l c d e d n i o s e b a n o l i S 2
class A ; class B { ..... int f(char, A) ; ..... } ; class A { ..... friend int B::f(char, A) ; ..... } ; int B::f(char..., A...) { ..... }

: f n o i t c n o f a l t e B t e A s es s a l c x u e d s o n r e l i p m o c e d n o a f e n u i c i o v , f i t a c i d n i er t i t . t n a v a er t ar a p p a c n o d t n or v e d s n o i t ar a l c d s r u e l ; B t e A s es s a l c s e d s e u q i t s ir t c ar a c s e d e c n as s i a n n o c a l ) l ar n g n e( e t i ss e c n f n o i t c n o f a l e d n o i t i n i f d a l e d n o i t a l i p m o c a l , u d n e t n e n e i B
1

284

2.2 Fonction amie de plusieurs classes


Les fonctions amies CHAPITRE 14

. t c e v e s s al c al e d e i m a t e e c i r t a m e d e r b m e m t s e d o r p ; e c i r t a m t e t c e v s ess al c x ue d se d ei ma t e et n a d n e p d ni ts e d o r p : dorp e m m o n e i m a n o i tc n o f e n u d i o l p me l r us s e d n o f s n oi t ul os x u e d s n o ssi nr u o f s u o v s u o N .ecirtam ruop )ehciffa( egahci f fad noitcnof enu ; e c i r t a m r u o p t e t c e v r u o p r u e t c ur ts n o c n u : s er b m e m s n o it c n o f s e l ti mi l s n o v a s u o n , t i c il p mis e d i c u os r a P .) e c i r t a m e s s a l c e d t e j b o ( e c i r t a m enu rap )tcev essalc ed tejbo( ruetcev nud tiudorp el renimretd ed tnatte mrep noitcno f enu resilar riovas ,noitcudortni ne uqov emlborp el erduosr ed ici snosoporp suov suoN

. s e nr e c n o c s n o i t c n o f s e d s e t t- n e s e l r i nr u o f e d e t i v i t i m a d n o i t ar a l c d e d e p y t e C 2 : e d r e d c r p eri a f a l e d ari f f us l i , A e ss a l c a l e d n oi t ar al c d a l r e li p m o c r u o p ,si o f e tt e C 1


class B ;

: n o it ar a l c d a l , A ess al c al s n a d , ar e c al p n o , A ess al c al e d s e i m a t n os B e ss a l c al ed serbmem snoitcno f sel setuot euq erid ruop ,isniA .elabolg noitaralcd enu reutce ffed el p m is s u l p t se li si a M .s e nr ec n oc s n o it c no f e d a y li u q i ti ma d s n oi tar al c d e d t n at ua reutce ffe sruelliad tiarruop nO .1.2 ehpargarap ua uqov sac ud noitasilarng enu tseC

.B ed te A ed snoit - a r a l c d s e l t n e m e l ar n g ar e t is s e c n f e d n o i t i n i f d a l e d n o i t a l i p m o c a l , u d n e t n e n e i B .) n o n i s B s s a l c , A t n a v a e r u g i f B i s A s s a l c ( s e t i c s n o i t ar a l c d x u e d s e d e n u l r es i l i t u ar d u a f l i , B t e A e d s n o i t ar a l c d x u e d s e l s p m e t e m m n e e l i p m o c n o l i S : n o i ta r a l c d a l e d r e d c r p t n a s i a f a l n e , A e d e l l e c s n a s e l i p m o c er t t u e p B e d n o i t ar a l c d a l , e m m e D : noitaralcd al ed redcrp tnasia f al ne ,B ed ellec snas elip moc ert tuep A ed noitaralcd al ,icI
class B ; class A ;

3 Exemple
se uqrameR

2.3 Toutes les fonctions dune classe amies dune autre classe

friend class B ;

e uqrameR

3 - Exemple

285

286

Les fonctions amies CHAPITRE 14

3.1 Fonction amie indpendante


#include <iostream> using namespace std ; class matrice ; // pour pouvoir compiler la dclaration de vect // *********** La classe vect ******************* class vect { double v[3] ; // vecteur 3 composantes public : vect (double v1=0, double v2=0, double v3=0) // constructeur { v[0] = v1 ; v[1]=v2 ; v[2]=v3 ; } friend vect prod (matrice, vect) ; // prod = fonction amie indpendante void affiche () { int i ; for (i=0 ; i<3 ; i++) cout << v[i] << " " ; cout << "\n" ; } } ; // *********** La classe matrice ***************** class matrice { double mat[3] [3] ; // matrice 3 X 3 public : matrice (double t[3][3]) // constructeur, partir dun tableau 3 x 3 { int i ; int j ; for (i=0 ; i<3 ; i++) for (j=0 ; j<3 ; j++) mat[i] [j] = t[i] [j] ; } friend vect prod (matrice, vect) ; // prod = fonction amie indpendante } ; // ********** La fonction prod ***************** vect prod (matrice m, vect x) { int i, j ; double som ; vect res ; // pour le rsultat du produit for (i=0 ; i<3 ; i++) { for (j=0, som=0 ; j<3 ; j++) som += m.mat[i] [j] * x.v[j] ; res.v[i] = som ; } return res ; }

3 - Exemple

287

// ********** Un petit programme de test ********* main() { vect w (1,2,3) ; vect res ; double tb [3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 } ; matrice a = tb ; res = prod(a, w) ; res.affiche () ; }

14 32 50

3.2 Fonction amie, membre dune classe


#include <iostream> using namespace std ; // ********* Dclaration de la classe matrice ************ class vect ; // pour pouvoir compiler correctement class matrice { double mat[3] [3] ; // matrice 3 X 3 public : matrice (double t[3][3]) // constructeur, partir dun tableau 3 x 3 { int i ; int j ; for (i=0 ; i<3 ; i++) for (j=0 ; j<3 ; j++) mat[i] [j] = t[i] [j] ; } vect prod (vect) ; // prod = fonction membre (cette fois) } ; // ********* Dclaration de la classe vect class vect { double v[3] ; // vecteur 3 composantes public : vect (double v1=0, double v2=0, double v3=0) { v[0] = v1 ; v[1]=v2 ; v[2]=v3 ; } friend vect matrice::prod (vect) ; void affiche () { int i ; for (i=0 ; i<3 ; i++) cout << v[i] << " " cout << "\n" ; } } ; **************

s e ss al c xued sed eima etnadnepdni noitcnof enud edial ruetcev nu rap ecirtam enud tiudor P
// constructeur // prod = fonction amie ;

noitcno f enud tigas lis ,ehcnaver nE .)iolp me nos seriassecn sessalc ed snoitaralcd se ll e ut ne v s e d sr o h e d n e( g n a h c tse n ne ir , ess al c e n u d ser b me m ,s ei ma s n o it c n o f e d tigas lis ,tia f nE ? sei ma snoitcno f sed esilitu nol euqsrol stilibissop sec tnenneived euQ . ess a l c e tt e c e d s t e j b o s e d u n e t n o c el r u s rinevretni sap tuep en )essalc al ed ruetpecnoc el ert tnemelleutnev tuep iuq( tneilc el : tilibasilitur al rerussa ned temrep sessalc sed eraps noitalipmoc ettec ,sac sel suot snaD . et t- ne re i hc i f e m m nu snad tnemelleutnev te tejbo eludo m e m m nu snad sessalc srueisulp repuorger ed elbis -sop sruojuot tse li ,udnetne neiB .noitaralcd ruel tnanetnoc ett-ne reihci f nud te serb me m snoitcno f sruel tnanetnoc tejbo eludo m nud ritrap aref es noitasilitu rue L .tnemraps sel -ipmoc tnemelarng tnores sessalc sel ,11 ertipahc ua nnoitne m jd snoval suon e mmoC

essalc ertua enud eima erbmem noitcnof enud edial ruetcev nu rap ecirtam enud tiudorP
14 32 50

288

4 Exploitation de classes disposant de fonctions amies


Les fonctions amies CHAPITRE 14
// ********** main() { vect w (1,2,3) ; vect res ; double tb [3][3] matrice a = tb res = a.prod (w) res.affiche () ; } // ********* Dfinition de la fonction prod ************ vect matrice::prod (vect x) { int i, j ; double som ; vect res ; // pour le rsultat du produit for (i=0 ; i<3 ; i++) { for (j=0, som=0 ; j<3 ; j++) som += mat[i] [j] * x.v[j] ; res.v[i] = som ; } return res ; } = { 1, 2, 3, 4, 5, 6, 7, 8, 9 } ; ; ; Un petit programme de test *********

...eiredruot elpmis enud sap non te ,)liavart niatrec nu tnadnamed( e r b il d n o it c a e n u d ti g as li u q t i a f e l r a p c n a u n er t t i o d n o l m a c t e f f e d e u qs ir e C .. .se vir p s e n n o d x ua d n et n el l i e m m o c re d c ca si u p ,e t t- ne e m m ed noitcno f ertua enu emm-iul rinruo f te sneil ed noitidl eima noitcno f al reroprocni sap en sruojuot tuep eima noitcno f enud tnasopsid essalc enud ruetasilitul ,sac ec snad ,te ffe nE . n o it al us p a c n e d e pi c nir p el r e l oi v ess al c al e d r u et as il it u l ri o v e d e u qs ir el tr u o c no ,raps tejbo eludo m nu eria f ne etiahuos nol is euq riov neib ardua f li ,etnadnepdni
289

4 - Exploitation de classes disposant de fonctions amies

.esab ed sepyt stnerffid sel rus tnatrop sruetarpo sel rinifdrus ed elbissop sap ares en liuq tnemelpmis ei fingis noitcirtser etteC .1

elleuqsiup etnassiup tro f euqinhcet enud l tigas lI . tejbo nu sniom ua rus etrop liuq uep ruop )erianib uo erianu( tnatsixe ruetarpo leuq etropmin rini fdrus zerruop suov ,++C nE .) r d a * = a s n a d e m m o c( n oi tc eri d n i e n u u o s le r e d u o sre it n e d n oi t a ci l pi t l u m al r et n es r p er , e t x e t n o c el t n a v i us , t u e p * el o b m ys e l , er i n a m e m m a l e D . ct e ; )elbuod( noisicrp elbuod sler xued ed noitiddal ; )taolf( sler xued ed noitiddal ; sreitne xued ed noitiddal : b te a ed ep yt el tnavius ,rengisd tuep + elobm ys el
1

: e u q el l e t n oi ss er p x e e n u s n a d , el p m e x e r a P .sr u et ar p o s ni atr e c e d n o it i ni f dr us a l j d es il a r ,s e g a g n a l s ert u a d p u o c u a e b e m m o c , + + C ,t i a f n E .sr u et ar p o s e d r i ni f dr us e d ,s n oi ti d n o c s e ni atr e c s n a d ,t n e m el a g t e mr e p + + C s i a M .stne mugra sed ep yt el te erbmon el tnavius ,ruetalip moc el rap utce ffe tse noitcnof ennob al ed xiohc el ,leppa nud srol ; setner ffid snoitcno f sed m o n e m m e l r e u b irt t a e tsi s n o c e u q i n h c et e tt e c e u q s n o l e p p a R .s e t n a d n e p d n i s n o it c n o f ed uo serb mem snoitcnof ed essigas liuq ,snoitcno f ed ) egrahcrus emret el issua ertnoc - n er n o( n o it i ni f dr u s a l es ir ot u a + + C e u q 7 er ti p a h c u d 0 1 e h p ar g ar a p u a u v s n o v a s u o N

La surdfinition doprateurs

a + b

15

! noitacifingis elleuq etropmin reubirtta riov es tuep ruetarpo elobmys leuq etropmin euq sap zeilbuon ,teffe nE .tnediv issua ertcarac nu sap an ruetarpol ed noitacifingis al leuqel snad elpmexe nu risiohc tnadnepec snorfrp suoN .noitcudortni ne euqov exelpmoc essalc al ed elpmexel erdnerp neib issua tuot up snoirua suoN .2 .erbmem noitcnof enu uo eima noitcnof enu esilitu nol euq tnavius )b(emmos.a uo )b,a( emmos euq sellet sesohc sed tiariudnoc ellennoitcnof noitaton enU .1

. se n - n o dr o o c sr u e l e d e m m os a l t n os s e n n o dr o oc s el t n o d t ni o p n u tse s t ni o p x ue d e d e m m os al euq snordneivnoc suon ,icI .tniop ep yt ed tnos b te a euqsrol ,b + a euq ellet noisserpxe enu noitaci fingis enu rennod ed ni fa + ruetarpol rini fd snoitiahuos suon euq snosoppus te
2

: tniop essalc enu snordisnoC

. et el ed te w e n sr ue tar po s el t na s -sini fdrus ne erio m m al ed noitseg al egrahc ne erdnerp tnem moc snorenimaxe suon ,nifnE .se u qi ma n y d s t ne me c -alp me sed rus sruetniop sed tnatrop moc stejbo sed iulec riovas ,rtnocner jd e mlborp el relgr ed temrep noitatce ffal ed noitini fdrus al tne mmoc snorrev suon ,reilucitrap nE .sesirp ert tneviod snoituacrp ed erb mon niatrec nu ,essalc ed etxetnoc nu snad elbatpecca te eller -utan noitaci fingis enu sruetarpo sec rennod etiahuos nol o tnemo m ud ritrap uq tnor - ert n o m s li s i a m , s e l p m e x e d e u q ar i g as e n l i ,s e tr e C .][ t e = sr u et ar p o x u a s n or e u q il p p a l suon ,setimil ses te stilibissop ses ,sruetarpod noitini fdrus al tnesrp riova suov srpA .seini fdrus snoitcno f sellevuon ed erutircl ne tnemelpmis aretsisnoc ++C ne sruetar -pod noitini fdrus al ,tid tnemertuA .ruetarpo nud tia f ne tigas liuq rei ficps ed tnatte m -rep laicps mon nu reubirttad tnemelp mis ari ffus li elleuqal noitcno f enud ellec emmoc areluord es noitini fd etteC .reubirtta ruel zetiahuos suov euq tcaxe elr el tnai ficps ne / te * ,- ,+ sruetarpo sel zerini fdrus suov ,alec ruoP . exelpmoc ep yt ed stejbo sed tnat b te a
1

: euq sellet snoisserpxe sed noitaci fingis enu rennod ed elbissop ares suov li ,sexelp - m o c ser b m o n se d re t nes r per e ni tse d e x e l p m o c e ssa lc e n u z ess i ni f d s u o v is , el p me xe r a P .)noitcno f ed leppa rap( ellennoitcno f noitaton enuuq elbisil )! tne mmegilletni d n er p ys n o l i s s n i o m u d( t e esi c n o c s u l p p u o c u a e b er t d e g a t n a v a l ar u a ar el u o c d n e i u q eriotarpo noitaton a L .srgtni tne metia frap sruetarpod ,esab ed sep yt sel e mmoc ,sinu m erid--tsec ,eritne trap sep yt sed ,sessalc sed siaib el rap ,rerc ed ertte mrep suov av
292
La surdfinition doprateurs CHAPITRE 15

1 Le mcanisme de la surdfinition doprateurs


a + b a - b a * b a/b

class point { int x, y ; ..... } ;

: s t ni o p e d n oi t i d d a d ruetarpo erton ed noitasilitul te noitini fd al tnartnom emmargorp ed elp mexe nu icioV . n o it c n o f a l e d n oi ti n i f d ; t n i o p ess al c al e d n i e s u a it i m a d n oi t ar al c d : euqissalc tse liavart ud etser e L .tniop ep yt e d sr u el av s ed uqilppa ares liuqsrol + ruetarpol ed sednarpo xua tnordnopserroc stnemugra xued seS : ares + rotarepo noitcno f erton ed ep ytotorp e L
point operator + (point, point) ;

. e i m a n oi t c n o f al ri o v as , el l er u t a n s u l p a l t s e i u q el l e c r a p t n a n e m m o c n e ,s n oi t u l os x u e d s el i c i s n o ni m a x E .essalc al ed svirp serb mem xua redcca riovuop arved elle rac ,ei ma noitcno f enud tnemelarng arigas li ,sac rein -red ec snad ; etnadnepdni noitcno f enu uo enrecnoc essalc al ed erb me m noitcno f enu ert rg erton tuep noitcno f ettec ,erutan as enrecnoc iuq ec nE .ep yt e m m ud ruoter ed ruelav enu rinruo f te tniop ep yt ed stnemugra xued ed resopsid tiod + rotarepo noitcno f erton ,icI .) ruetaraps ed tres + ,C ne ,rac ecapse nu riovrp ed eriotagilbo s a p t i a r e s e n l i , t n e s r p s a c e l s n a d ( n r e c n o c r u e t a r p o l e d i v i u s t s e r o t a r e p o l c t o m e L : m o n e d n o it -cno f enu rini fd etsisnoc + ruetarpo tec rini fdrus ruop ++C rap etpoda noitnevnoc a L
293
operator +

1.1 Surdfinition doprateur avec une fonction amie

} point (int abs=0, int ord=0) { x=abs ; y=ord ;} // constructeur friend point operator+ (point, point) ; void affiche () { cout << "coordonnees : " << x << " " << y << "\n" ; } } ; point operator + (point a, point b) { point p ; p.x = a.x + b.x ; p.y = a.y + b.y ; return p ; #include <iostream> using namespace std ; class point { int x, y ; public :

1 - Le mcanisme de la surdfinition doprateurs

: tpada ert tiarruop tnedcrp elpmexel tnem moc icioV : cnod ares + rotarepo erbmem noitcno f erton ed ep ytotorp e L : e m m oc r u et al i p m o c e l r a p etrpretni srola ares b + a euq ellet noisserpxe enu ,elpmexe raP .erbmem noitcno f al leppa tna ya tejbol ares ec : tne meticilpmi simsnart revuort es av ,etnedcrp + rotarepo noitcno f al ed tne mugra rei merp ua tnadnopserroc ,ruetarpo erton ed ednarpo reimerp el ,sio f etteC
a.operator + (b) point operator + (point) coordonnees coordonnees coordonnees coordonnees (a + b) + c operator + (a, b) : : : : 1 2 3 6 2 5 7 14

: e m m o c e u l a v t s e n o i ss e r p x e e t t e c e u q t n e m e l p m i s z e t o n , t n a t s n i l r u o P . t n i o p e c r u s n i o l s u l p s n or d n e i v er s u o N . + r u e t ar p o l e d s e l l e u t i b a h t i v i t a i c os s a d t e t i r o ir p e d s e l g r s e d e t p m o c t n a n e t n e e u l a v t s e c + b + a e u q e l l e t n o i s s e r p x e e n U 2 .b + a = c e d u e i l u a : er i r c s n o i rr u o p s u o n , t r t n i d er u g e t n es r p e n a l e c e u q n e i B : leppal e mmoc ruetalipmoc el rap etrpretni tia f ne tse b + a euq ellet noisserpxe enU 1
c = operator + (a, b)

eima noitcnof enu tnayolpme ne ,tniop epyt ed stejbo sed ruop + ruetarpol ed noitinifdruS

294

1.2 Surdfinition doprateur avec une fonction membre


: e l l e n n o i t c n o f n o i t a t o n a l t n a s i l i t u n e er i d - - t s e c
La surdfinition doprateurs CHAPITRE 15
main() { point a(1,2) ; a.affiche() ; point b(2,5) ; b.affiche() ; point c ; c = a+b ; c.affiche() ; c = a+b+c ; c.affiche() ; } operator + (operator + (a, b), c)

se uqrameR

: n o i t a t c e f f a l t n a u Q
c = a.operator + (b) ;

: e m m o c e t r pr e t n i ts e
c = a + b ;

: noitatce ffal ,icI 2 .niol sulp uep nu snordneiver y suoN .enia mod ec snad etiv port red -icd ed redrag es sio fetuot tuaf lI .erbme m noitcno f enuuq ttulp eima noitcnof enu ris -iohc ruetasilitul reticni siofrap tuep eirtm yssid etteC .dnoces el ruop x.a te )eticilp mi tnemugra( ednarpo rei merp el ruop x ton tse x erbme m el ,elp mexe raP .sednarpo xued sel ertne eirtm yssid enu ertarappa tia f + rotarepo noitcno f al ed noitini fd al ,siof etteC 1

erbmem noitcnof enu tnayolpme ne ,tniop epyt ed stejbo sed ruop + ruetarpol ed noitinifdruS
coordonnees coordonnees coordonnees coordonnees : : : : 1 2 3 6 2 5 7 14

#include <iostream> using namespace std ; class point { int x, y ; public : point (int abs=0, int ord=0) { x=abs ; y=ord ;} // constructeur point operator + (point) ; void affiche () { cout << "coordonnees : " << x << " " << y << "\n" ; } } ; point point::operator + (point a) { point p ; p.x = x + a.x ; p.y = y + a.y ; return p ; } main() { point a(1,2) ; a.affiche() ; point b(2,5) ; b.affiche() ; point c ; c = a+b ; c.affiche() ; c = a+b+c ; c.affiche() ; }

c = a + b + c ;

se uqrameR

1 - Le mcanisme de la surdfinition doprateurs

295

.ecner fr rap tiaf es erbmem noitcnof enu tnaleppa tejbol ed noissimsnart al euq snoleppaR .1

.)! noitcno f al ed srohed neuq eria f el arruop en no te noitseuq ne tne mec -alp mel tnemelbanevnoc rerbil ardua f li( emmargorp el uep euqleuq areuqilp moc ,sulp ed ,te erueirtlu eipocer as euq sp met ed sulp ardnerp alec ,tnemelarnG .p ed tnemecalp mel tne meuqi man yd reuolla regnos tiarruop no ,ruoter ed ruelav ettec ed eipocer al retiv ruoP ! e h cra m alec euq noisullil rennod tuep elleuqsiup erip al tnemeniatrec tse noitautis erimerp a L . .. or z er tt e m el er iar t no c u a t uep e ll e ; sp me t ni atr ec n u . .. t na d nep e lba la v ets er unetnoc nos sac leuqua ,elbinopsid tse liuq reton ed retnetnoc es tne melpmis tuep elle : erio mm tnemecalp me nu erbil ennod noitatne mlpmi enu tnod erinam al rus eshtop yh enucua eria f snovuop en suon ,snio mnaN .)ruetarpo nu ceva sac el tnemelarng tse iuq ec( niam noitcno f al snad ruoter el sd ,p ed ruelav al tnemetaidm mi ici snosilitu suon ,setreC .r bi l eri o m m e d t ne me ca lp me nu d ess er da l er t te m sn art t iar d ne i ver ec n er - fr rap noissimsnart al re yolpme ,snoitidnoc sec snaD .noitucxe nos ed ni f al sd tiurtd cnod ares li ; noitcno f al snad tne melacol rc tse p tniop el ,tef fe nE .ruoter ed ruelav al reuqilppal tiahcrehc no is emlborp nu tiaresop ecner fr rap noissimsnart al ,ehcnaver nE
point operator + (point & a, point & b) ;
1

: er t t iarr u op + rotarepo ei ma noitcno f al ed ep ytotorp el ,elpmexe raP .elliat ednarg ed stejbod sac el snad reilucitrap ne ,ecner fr rap tre fsnart ua leppa eria f ed regasivne tuep no ,udnetne neiB . r u el a v rap tiasia f es + rotarepo ed ruoter ed ruelav al ed te )erbmem noitcno f enu ruop nu ,eima noitcno f enu ruop xued( stne mugra sed noissimsnart al ,stnedcrp selp mexe xued sel snaD

.) t u a f d r a p r u e t c u r ts n o c u d e c a l p a l t n a n er p e i p o c er e d r u e t c ur t s n o c n u e r i u d o r t n i d s a p t n a i l b u o n n e ( s t e j b o d s n o i t a rc s e l s e t u o t t n a h c i f f a n e r u e t a l ip m o c n u r ap t i a f x i o hc e l r e t c e t d t u e p n O : t n e d c r p l e p p a l r a p y o v n er t e j b o l e d e l l e c , + r o t a r e p o t n a l e p p a t e j b o l e d es s er d a e m m o c t n a t t e ms n a r t n e , is n i a t n or e d c o r p s e r t u a D : t er i ar o p m e t t e j b o n u t n o r e r c sr u e t a l i p m o c s n i a tr e C . n o i t a t r p r e t n i n os t n e m e t c a x e s a p e s i c r p e n + + C e g a g n a l e l
296
La surdfinition doprateurs CHAPITRE 15
t = a.operator + (b) ; c = t.operator + (c) ; c = (a.operator + (b)).operator + (c) ;

1.3 Oprateurs et transmission par rfrence

.tnemugral ed snoisrevnoc seniatrec resirotua arruop tsnoc tubirtta tec ed ecnesrp al ,61 ertipahc ua arrev el no emmoc ,tnadnepeC .1

.sr u et ar p o d n oi ti n i f dr us al ed tnasuba ne elbisnehrpmocni em margorp nu erdner ed elica f tse liuq te segral srt erocne tnos selleuq egasul zerrev suov ,tia f nE .sevitcirtser ertarap suov tnevuep selgr sellet eD : e mmoc etrpretni ares : )exelpmoc ep yt ud ssoppus tnat c te b ,a( etnavius noisserpxel ,exelpmoc ep yt el ruop * te + serianib sruetarpo sel zessini fdrus suov is ,elpmexe raP .tivitaicossa ruel te evitaler tiroirp ruel tnevresnoc sli ,)non uo sini fdrus t ne io s s li u q( n ois ser p xe e m m e n ud ni es ua s n i b m oc t n os sru et ar p o sr u eis u l p e u qsr o L .erianib ++ ed uo erianu = ed rini fd sap zerruop en suov siam ,erianib + ruetarpo nu uo erianu + ruetarpo nu rinif - dr us z err u o p s u o v , is ni A .l ai ti n i r u et ar p ol e d ) eri a ni b , eri a n u( t il ar u l p a l r e vr es n o c t u a f lI . ser ia tn e m lpp us se t ni art n oc se uq le uq t nes op m i s ert u ad e uq te ). ed sac el tsec( tuot ud sini fder ert sap tnevuep en sruetarpo sniatrec euq sruelliad snor -rev suoN .selobm ys xuaevuon ed rerc ed elbissop sap cnod tsen lI .esab ed sep yt sel ruop ini fd jd ruetarpo nu ert tne meriotagilbo tiod rotarepo lc to m el tnavius elobm ys e L
a * b + c (a * b) + c
1

.elarng erinam enud eria f ed elbissop tse liuq ec tnanetniam snonimaxE .erb mem noitcno f em moc ,eima noitcno f e mmoc : snoa f xued ed ec te ,tniop ep yt ed sednarpo xued ti o er l i u qsr o l + eri a ni b r u et ar p ol e d n oi ti n i f dr us e d el p me xe n u r i o v e d s n o ne v s u o N

.se l ba i fi d o m tnoretser seuqi man yd seitrap sel ; sgtorp tnores sruetniop sec slues ,seuqiman yd seit -rap sed rus sruetniop sed tnatrop moc stejbod sac el snad tsnoc esilitu nol is ,tnemellerutaN : ert tiarruop + rotarepo ed ett-nel ,elp mexe rap ; tsnoc lc to m ua leppa eria f sruojuot arruop no ,ecner - fr rap simsnart tnemugra nu snoitaci fidom selleutnevd ertnoc regtorp ehcrehc nol iS
297
point operator + (const point& a, const point& b) ;

2.1 Se limiter aux oprateurs existants

2 La surdfinition doprateurs en gnral


2 - La surdfinition doprateurs en gnral

.][eteled ed eteled te ][wen ed wen neib eugnitsid nO )6( . tsop noitaton al dnopserroc iuq )tni epyt ed fitcif ednarpo emixued ceva( erianib noitinifd enu etsixe ne li siam ; rp noitaton al tnednopserroc sruetarpo sec ,erianu noaf ed sinifd tnos sliuqsroL )5( .)erbmem noitcnof( essalc enu ruop tios ,)etnadnepdni noitcnof( labolg uaevin nu tioS )4( .erbmem noitcnof emmoc inifd ert tioD )3( .tuafd rap noitacifingis enu edssop li ,inifdrus sap tsen liS )1(

)etnassiorcd tiroirp rap sssalc( ++C ne selbassinifdrus sruetarpo seL


>)2 (

eriani B

=>> -< =% =/

=<< =-

=|

=^

=& = eriani B

=*

=+

)3()1(

>-

eriani B

>-

&&

eriani B

>-

||

eriani B

>-

eriani B

>-

&

eriani B

>-

=!

==

eriani B

>-

=>

>

=<

<

eriani B

>-

>>

<<

eriani B

>-

eriani B

>-

)1(

*.

)1(

>-*

eriani B

>-

eriani B

)t sac( ] [eteled eteled ][w en ! -wen + e ria nU

)6()4( )1 (

)6()4( )1(

)6()4()1(

)6( )4 ()1(

-<

)1(

&

)5(

)5(

++

>-

)3()1(

>-

)3(

][

)3(

)(

eriani B

tivitaicossA

sruetarpO

t ilarul P

.E exennA ne tircd tse elr rue L .serbmem sed rus sruetniop xua tneuq -ilppas sli te tniertser egasu nud tnos sli ,emron al rap stiudortni ; *. te *>- sruetarpo sed ; 7 ehpargarap ua snorelraper ne suon : eteled te wen sruetarpo sed ; essalc ertua enu snad essalc enud noisrevnoc al uo esab ed ep yt nu snad essalc enud noisrevnoc al reuqilppas tuep liuq 61 ertipahc ua snorrev suon ; tsac ed ruetarpol ed : e c n es r p al zetoN .tivitaicossa ruel te evitaler tiroirp ruel elleppar te )erianret tnat reined ec , : ? te :: , . f u as su o t ,t i a f ne( s elb assi n i f dr us sr ue tarp o se l es ic rp srpa- ic ua elba t e L
298
La surdfinition doprateurs CHAPITRE 15

. .. l li e s n o c s a p t s e n alec ,tnemellerutan ; eudnetta ellec ed etner ffid noitaci fingis enu tia liuq ruop =+ rini fdrus neib srt zerruop suov ,sulp eD . exelpmoc ep yt ed sednarpo xued arua liuqsrol =+ ed noit -acifingis al ini fd tnatua ruop sap zeruan suov , exelpmoc ep yt ed tnos sednarpo xued sruel euqsrol = ruetarpol te + ruetarpol zessini fdrus suov is ,ehcnaver nE . ruetarpol ed iulec ed te ruetarpol ed elr ud tiudd es esab ed ruetarpol ed elr el ,tid tne mertuA
+ =+

: t ne la v iuq tse : tni ep yt ed tnos b te a is ,elpmexe raP .esab ed sruetarpo sniatrec ertne tnetsixe iuq sneil sel ,sini fdrus sruetarpo sel ruop ,sap zerevuorter en suov ,tid aleC .][ uo * ,- euq ttulp ,sexelpmoc xued ed e mmos al ruop + elp mexe rap : ellerutan tnemevitaler noitaci fingis enu elobm ys nu rennod reticni suov tiod iuq ,snes nob el rap euq etimil tsen trebil etteC .zerisd suov euq noitaci fingis al inifdrus ruetarpo nu reubirttad erbil tnemelatot set suov ,reuqidnil ed noisaccol ue jd snova suon em moC
a += b

.)er i l uc itr ap e ssa lc enu rus tnetrop sli o sac lues el snad( eteled te wen ed euq isnia ,>- ,) ( ,][ ed tigas lI .essalc enud serb me m e mmoc sini fd ert tnemeriotagilbo tneviod sruetarpo sniatrec ,sulp eD .7 ehp arg arap u a s n ore lrap er ne s u on ; )es ab ed s e p y t s el t e s t e j b o s e l ruop( elabolg erinam ed eifidom ert tuep noitaci fingis al tnod eteled te wen sruetarpo slues sel ruop ,tnadnepec ,ueil a noitpecxe enU .)! rda * ed uo 5 + 3 ed noitaci fingis al regnahc tiarruop no leuqel snad em margorp nu tiares euq ec zenigami( esab ed sep yt sed rus tnatrop ruetarpo nu rini fdrus ed tilibissop mil titnarag elgr etteC .eima noitcno f enud arigas li ,larng nE .essalc ep yt ed tne mugra nu snio m ua tna ya etnadnepdni noitcno f enud tioS .)esab ed ep yt nud emm uo essalc ep yt ertua nud rigas tiarruop li sia m ,e mm-elle essalc al euq ep yt emm ud tiassigas li ,stnedcrp selp mexe sel snad( esopmi tsen ep yt ed etniartnoc enucua leuqua eticilpxe tnemug -ra nu aretrop moc elle ,erianib ruetarpo nud tigas liS .eticilpxe tnemugra nucua aretrop -moc en elle ,erianu ruetarpo nud tigas liS .leppa tna yal tejbol riovas ,essalc ep yt ed )eticilpmi( tne mugra nu rs puoc etropmoc elle ,sac ec snad : erb me m noitcno f enud tioS : r i g a s t i o d li , ti d t n e m er t u A . e s s al c e p y t e d ) n o n uo eticilpmi( tnemugra nu sniom ua etropmoc lis euq ruetarpo nu rini fdrus tuep en nO
su ot

2.3 viter les hypothses sur le rle dun oprateur

2.2 Se placer dans un contexte de classe

a = a + b

2 - La surdfinition doprateurs en gnral

299

.)essalc epyt ed sulp tsen ednarpo reimerp nos euqsiup( erbmem noitcnof enu emmoc ruetarpo tec rini fdrus sap arruop en no ,sac ec snad ,euq niol sulp uep nu sruelliad snorrev suoN .1

.-- ruetarpol tneuqilppas snoitardisnoc semm se L .exi ftsop noitaton ed sac ne silitu tse )tni ,T( rotarepo T ett-ned ruetarpol ; exi frp noitaton ed sac ne silitu tse )T( rotarepo T ett-ned )leusu( ruetarpol : e i m a n oi t c n o f e d e mr o f s u os i ni f d ts e + + i s , e m m e D . leppa l e d sr ol e si m s nart t n e m el -ler ares en ruelav enucuauq sia m ,resilitu ruetarpol risiohc ed ruetalip moc ua temrep liuq snes ec ne , fitci f tnemelatot tse ic-iuleC .tni ep yt ed ednarpo dnoces nud ecnesrp al neib zetoN .exi ftsop noitaton ed sac ne silitu tse )tni( ++ rotarepo T ett-ned ruetarpol ; exi frp noitaton ed sac ne silitu tse )( ++ rotarepo T ett-ned )leusu( ruetarpol : er b m e m n o it c n o f e n u d e mr o f a l s u os i n i f d ts e + + e u q te essalc ep yt nu engisd T is ,elpmexe raP .exi ftsop noisrev al eriatne mlppus fitcif tne m -ugra nu retuoja etsisnoc iuq noitnevnoc enu esilitu no ,eriaf ec ruoP .exi ftsop noitaton ne elbasilitu ertua nu te ,exi frp noitaton ne elbasilitu ++ ruetarpo nu sio f al rini fd tuep nO

: snes nu tneia semro f sec ed enul ed snoisserpxe sel euq ruop exelpmoc ne elbuod ed noisrevnoc al euq isnia sexelp moc xued rus etrop liuqsrol + ruetarpol rini fd ed sicrp sac ec snad ari ffus li ,elp mexe raP .sesohc sel uep euqleuq rei filp mis ed tnortte mrep ruetas -ilitul rap seini fd snoisrevnoc ed stilibissop sel euq 61 ertipahc ua tnadnepec snorrev suoN : ep ytotorp emmoc , elpmexe rap ,ceva exelpmoc nu te elbuod nu sednarpo em moc a liuqsrol + ruetarpol rini fdrus ulla f tiarua li ,eriaf ec ruoP
1

: retrpretnid tnatua ruop sap temrep en alec : ) e x e l p m o c t n a t a( e u q el l e t n o iss er p x e e n u s n es n u r e n n o d e d t e mr e p s u o v i c e c i S : ert tiarruop ep ytotorp nos ; )erdro tec snad( elbuod nu te exelpmoc nu sednarpo em moc a liuqsrol + ruetarpol ini fdrus ze ya suov euq ,elp mexe r a p , z e s o p p u S .s e c n e u q s n o c e d e dr u ol ts e e u qr a m er et t e C .) t i vi t a i c oss a n os u o e v it al er t ir -oirp as ruop essap es iuq ec tne meriartnoc( ini fdrus ruetarpo nud elleutnev tivitatu m - moc al rus eshtop yh enucua tia f en ++C ,etnanerprus sulp ert-tuep noa f ed te ,emm eD
300
La surdfinition doprateurs CHAPITRE 15
complexe operator + (complexe, double) ; a + 3.5

2.4 Cas des oprateurs ++ et -double + complexe complexe + double float + complexe complexe + float 3.5 + a complexe operator + (double, complexe) ;

.)! tejbo nud esserdal etnesrper & euq ec neib dnettas no ,elp mexe rap( ios ed tne melarng tnov iuq snoitpecxe seuqleuq sio fetuot etsixe lI .essalc ep yt nu ruop einifdrp noitaci fingis ed sap cnod tnon iuq sruetarpo sed trapulp al ruop isnia av ne lI .noitalipmoc ed ruerre enu tiariudnoc noitasilitu nos te etxetnoc ec snad snes nucua tiaruan ruetarpol ,noitini fdrus ellet enud ecnesbal ne ,etuod nes no emmoC .tniop ep yt ed sednarpo sed ruop + ruetarpol ini fdrus snoiva suon ,noitcudortnid elpmexe erton snaD

.s a c x u e d s el s n a d e si li t u sr o l a e v u or t es i u q , e x i f r p n oi sr e v al euq essinruo f en nol euq tnetpecca sruetalipmoc sniatreC .exi ftsop te exi frp noitaton ne sio f al tiaresilitu nouq ++ ruetarpo lues nuuq rini fd en ed elbissop sap tsen lI

exiftsop te exifrp noitaton ne ++ ed noitinifdrus ed elpmexE


main() { point a1 (2, 5), a2(2, b = ++a1 ; cout << "a1 cout << "b b = a2++ ; cout << "a2 cout << "b } 5), : " : " : " : " b ; ; ; ; ; a1.affiche () ; b.affiche () ; a2.affiche () ; b.affiche () ; // // // // affiche affiche affiche affiche a1 b a2 b : : : : 3 3 3 2 6 6 6 5

: exi frp noitaton al ed sac el snad noitatnemrcni srpa tniop ud ellec tios ,exi ftsop noitaton al ed sac el snad noit -atne mrcni tnava tniop ud ellec tios ruelav e mmoc essinruo f te tniop nud sennodrooc xued sel tinu enud etnemrcni liuq ruop ++ ini fd snova suon leuqel snad elpmexe nu icioV
301

2.5 Loprateur = possde une signification prdfinie


e uqrameR
#include <iostream> using namespace std ; class point { int x, y ; public : point (int abs=0, int ord=0) { x=abs ; y=ord ; } point operator ++ () // notation prfixe { x++ ; y++ ; return *this ; } point operator ++ (int n) // notation postfixe { point p = *this ; x++ ; y++ ; return p ; } void affiche () { cout << x << " " << y << "\n" ; } } ;

2 - La surdfinition doprateurs en gnral

.)ypoc esiwrebmem( elabolg noa f ed tiarpo li ,tnavarapuA .++C ed 0.2 noisrev al siuped ,erocne L .1

.tsac ed ruetarpo nud noitini fdrus al ed snorelrap suon euq l tsec ; noisrevnoc ed semlborp sel enrecnoc iuq ec tuot 61 ertipahc ua repuorger r frp sio fetuot snova suoN .exelpmoc ne elbuod ep yt ed noisrevnoc enu ini fd a nol is tios ; elbuod ep yt ed ednarpo nu te exelpmoc ep yt ed ednarpo nu a liuqsrol + ruetarpol ini fdrus a nol is tios : snes nu erdnerp arruop 5.3 + a euq ellet nois -serpxe enu ,sexelp moc xued ruop ini fdrus t a + ruetarpol is te exelpmoc ep yt ed tse a is ,uqov jd snoval suon em moc ,elpmexe raP .stejbo xua tnednets stilibissop seC .etic -ilp mi uo eticilpxe noa f ed ,esab ed sep yt ertne snoisrevnoc sel tne mmeuqrf esirotua ++C

. se uq -iman yd seitrap sed ,xue tnauq ,tnedssop serbme m srueisulp uo nu tnod siam ,)stnerappa( sruetniop snas stejbo sed ruop noitatcef fad ruetarpo nu tne meticilpxe erirc riovad retiv t u e p al e C . n u ti ar e d ss o p n e s er b m e m s e d n ul o s a c e l s n a d , e t i c il p x e n o it a t c e f f a d r u e t -arpo nu releppad tilibissop al essial iuq ec , erb me m rap erbmem erpo li : tua fd rap noit -atce ffad ruetarpol euqilppas euqramer e mm a L .erbmem rap erbmem tialliavart tua fd rap eipocer ed ruetcurtsnoc el ,stejbo sed semm-xue tnos serbmem sniatrec tnod stejbod sac el snad ,euq langis snova suon ,31 ertipahc uA .tejbol ed sruelav sed eipocer al : liavart emm el tneutce ffe tuafd rap noitatce ffad ruetarpo te tua fd rap eipocer ed ruetcurtsnoC . t u a f d r a p n o it at c e f - fad ruetarpo nud iolp me a y li ,eticilpxed sap etsixe nen lis : noitatce f fad ruetarpol ; t ua f d rap e ipo cer ed ruetcurtsnoc nud leppa a y li ,eticilpxed sap etsixe nen lis : eipocer ed ruetcurtsnoc el : er t ne t na ts i xe e ig o la n a ed n arg a l are t on n O .t n a vi us e hp -argarap el snad elpmexe nu snorennod suon tnod ,= ruetarpol ed noitini fdrus al etissecn iuq noitautis enud tnemeuqip yt l tigas lI .seuqiman yd stne mecalpme sed rus sruetniop sed tneiatrop moc snrecnoc stejbo sel euq srol sd etnasia fsitasni rervas tiavuop eipocer elp mis ettec euq tatsnoc sruelliad snova suoN .rei merp el snad ednarpo dnoces nos ed sruelav sed eipocer al dnopserroc ruetarpo tec ,eticilpxe noitini fdrus ed ecnesbal ne ,tnemev -itce ffE .rinifdrus el ed nioseb ue sap snoivan suon te essalc ep yt emm ud sednarpo xued ceva re yolp mel ed noisaccol ue jd snova suoN .noitpecxe issua iul tia f = ruetarpoL
1

302

2.6 Les conversions


La surdfinition doprateurs CHAPITRE 15

! tivitatummoc as rus reilucitrap ne ,inifdrus ruetarpol rus ++C rap etiaf tsen eshtopyh enucua ,tid snoval suon emmoc ,teffe nE .)erbmem noitcnof enu rap eriaf es tuep iuq( elbuod nud te exelpmoc nud noitiddal inifdrus riovad sap ariffus en lI .1

: setnavius snoitcurtsni sel ,tcev ep yt ed tnemugra nu noitcno f enu tiat tcf iS


// constructeur

: )31 ertipahc ud 3 ehpargarap ua riov( seuqiman yd sruetcev sed tnadnopserroc , tcev essalc enu resilitud noisaccol ue jd snova suoN

.exelpmoc >- elbuod noisrevnoc al ed noitini fd al rap etlpmoc ,sexelp moc xued ed noitiddal tnautce ffe exelpmoc essalc al ed erb me m noit -cno f enud noitini fdrus rap retiart es issua tuep liuq snorrev suon ,tia f nE . exelpmoc essalc al ed eima noitcno f enu sruocer el resopmi cnod te )esab ed ep yt nud ednarpo reimerp( euqov noitautis al erdnopserroc elbmes , erdro tec snad ,)essalc ep yt( exelpmoc nud te )esab ed ep yt( elbuod nud noitiddal ,elpmexe raP .esab ed ep yt nud ednarpo nud tejbo nu ne noisrevnoc ed ,ertipahc niahcorp ua sesopxe ,stilbissop sed etpmoc rinet ardua f li siaM .) ess al c as e d e p y t u d t ne m -ugra reimerp nu tne meticilpmi tioer ic-ellec euqsiup( erbmem noitcnof emmoc inifd ert
1

sap tuep en li ,tnemugra reimerp ne esab ed epyt nu riovecer tnemulosba tiod ruetarpo

nu is

: etnavius elgr al recnonn essiup nouq elbmes li ,setreC .xiohc el reutce ffe sertirc sleuq rus redna med suov sio frap cnod zevuop suoV .)ei ma larng ne( etnadnepdni noitcnof enud uo erbmem noitcno f enud edial ruetarpo nu rinifdrus ed erbil essial suov ++C

3.1 Rappels concernant le constructeur par recopie

3 Surdfinition de loprateur =

2.7 Choix entre fonction membre et fonction amie

vect a(5) ; ... fct (a) ;

class vect { int nelem ; int * adr ; public : vect (int n) ..... } ;

// nombre dlments // adresse

3 - Surdfinition de loprateur =

303

h g f

u t z y x

: a m h cs u a d n o ps err o c i u q : noitaralcd ettec ceva ,isniA .semlborp semm sel esop tcev ep yt ed stejbod noitatce ffaL
vect a(5), b(3) ;

.)eipocer al eridretni uo( tne mecalpme levuon nu snad euqi man yd eitrap as ed ellec issua siam ,e mm-iul tejbol ed eipocer al tne melues non reutce ffed grahc eipocer ed ruetcurtsnoc nu rini fd tiatsisnoc noitulos enU . eri o m m t n e m ec alp m e e m m u d n o it ar -bil ed sedna med xued rituobad tiauqsir no ,icossa euqiman yd tnemecalpmel rerbil ed grahc ruetcurtsed nu )! elbatiahuos tsec emmoc( tiadssop tcev essalc al is ,reilucitrap nE
b

: t ne me ca lp me e m m el srev )rda( ruetniop nu tnatrop moc b te a stejbo xued ed ecnesrp ne srola snoit suoN .b tejbo levuon nud ,a ed eipocer rap ,noitarc al tiasiudnoc tcf ed leppal : e mlborp tneiasop
304
La surdfinition doprateurs CHAPITRE 15

3.2 Cas de laffectation


5 5
a

. b e d se n n o d ser b m e m se d sr ue la v se d ec al p n e es i m ; a rap tniop tnemecalp -mel ed sruelav sel eipocer no leuqel snad tne mecalpme levuon nud euqiman yd noitarc ; b r ap t n iop t n e me ca lp m el e d n o it arbi l : b e d t n er f - fid tse a euqsrol ,a = b euq ellet noitatce ffa enu retiart snoirruop suon tne mmoc cnod icioV .eipocer ed ruetcurtsnoc ud etniojnoc noitini fd al eicossa tse elle is euq tnemelatot tneivnoc en ehcramd ettec euq tnadnepec zetoN .emlborp snas eriaf es tuep noitarbil elleutnev nos te siof elues enuuq cner fr tsen liuq rs tse no ,sac ec snaD .euqiman yd tnemecalpme erporp nos etropmoc tcev ep yt ed tejbo euqahc euq erinam ed ,noitatcef fad ruetarpol tnassinifdrus ne stniop stner ffid sel relgr snovuop suoN

? sruellia rap cner fr sap tsen liuq rs no-tse ,b rap cner fr sulp tsen lis ,rO .b ed euqiman yd t n e m e c al p m e n ei c n a l c e v a i ci r e v u or t er es c n o d a v n O .r e r c t n a t d n o c es e l , e u qi m a n - yd tnemecalp me lues nuuq tiatsixen li ,eipocer rap noitcurtsnoc al ed sac el snaD .)euqim -an yd eitrap ruel ceva erid--tsec( stelp moc stejbo xued ici etsixe li ,noitatce f fa tnavA .emm-iul tejbo nud noitatce f fa enud ecnesrp ne revuort es tuep nO : tnessiarappa secnerf fid seuqleuq rac ,euqitnedi non sia m ,nisioV .eipocer rap noitcurtsnoc al ed iulec ed nisiov tnemevitce ffe tse emlborp e L
b

h g f

u t z y x

3.3 Algorithme propos


a

: t iu d n oc : noitatce ffaL
305
b = a ;

3 - Surdfinition de loprateur =

! ennoitcnof liuq noisullil rennod srola tuep emhtiroglaL .seifidom sap tnos en rbil tnemecalpme nud sruelav sel ,stnemennorivned puocuaeb snaD .1

. euqihportsatac srola ares noitautis a L .tnemecalpme levuon nu snad reipocer el ruop resil -itul ed etnet nouq tnava rbil ares )a issua cnod( b icossa euqiman yd tnemecalp meL
1

b te a

u t z
y

: n oi t a u ti s ettec ceva emhtiroglal aredroba no ,ecner fr rap ueil a a ed noissimsnart al is ,ehcnaver nE .e mlborp snas arennoitcno f soporp e mhtiroglal ,)euq -iman yd tnemecalp me levuon nud noitarc rap( eirporppa noa f ed ini fder t a eipocer rap ruetcurtsnoc el is te ,ruelav rap ueil a noitatce ffad ruetarpol a ed noissimsnart al iS . t e j b o e m m u a t n e d n o p s e r r o c b t e a o s a c el r e l g r ets er l I

u t z y x

u t z y x

: tituoba no elleuqal noitautis al tnartsulli amhcs nu icioV


306
La surdfinition doprateurs CHAPITRE 15

.tnemugral ed snoisrevnoc seniatrec resirotua arruop tsnoc tubirtta tec ed ecnesrp al ,61 ertipahc ua arrev el no emmoc ,tnadnepeC .2 .)! esoppus alec euq tilibisil ed euqnam ed seuqsir sel suot ceva( b ed ellec euq ertua ruelav enu reyovner ed sirpmoc y ,zeluov suov euq ec eriaf ed erbil essial suov ++C ,udnetne neiB .1

suon ,reilucitrap ne ; mu minim tcirts ua tcev essalc al tiudr snova suon ,gnol port sap tios en e mmargorp el euq ruop siaM .)sicossa tnos ruel iuq seuqi man yd stne mecalp me sed te stejbo sed sesserda sel snovius suon ,reilucitrap ne( egahci ffad snoitcurtsnid erbmon niat -rec nu edutibahd em moc snotuoja suon ,eria f ec ruoP .ruetarpol ed tnemennoitcno f el rert -s u ll i t n a vr es t el p m o c e m m ar g or p n u s n a d n oi ti n i f d et t e c r er g t n i d s n os o p or p s u o v s u o N

. euqnocleuq ruetcev nu tnatsnoc ruetcev nu retce ffa riovuop etiahuos nol is tsnoc fitaci filauq el reicossa iul ed erias -secn tse li ,ecner fr rap si msnart tse =rotarepo erbmem noitcno f al ed tne mugral em moC
2

: ecner fr rap ednarpo dnoces el erttemsnart ed sno yovrp suon ,sulp eD .v ici ednarpo dnoces el tneived a te siht ici ednarpo reimerp el tneived b : )erb me m noitcno f enu e mmoc rini fd el ed esopmi ++C( = ruetarpol ed noitini fd al ert tiarruop euq ec tne melani f icioV

. elarng sulp ertd etirm el a iuq tilibissop ednoces al ici snossisiohc suoN .ruoter ed ruelav enu essinruo f ruetarpol euq eriassecn tse li ,)! b ed ellec tne melbaborp( ruelav enu tia a=b noisserpxel )! erdnetta ys tuep no emmoc( euq etros ne eria f ,tnem -elarng sulp ,uo elpitlum noitatce f fa enu retiart riovuop snotiahuos suon is ,ehcnaver nE .)diov( ruoter ed ruel -a v e n uc u ad ni os e b s n o va n s uo n ,) a = b ( s el p mis s n oi ta tc e f fa d s n o t ne t n o c s u o n s u o n i S : er i a f n e s n o ti a h u os s u o n e u q e g as u l e d dnepd tuot ,uaevin ec .ruetarpol rap einruof ruoter ed ruelav al ed redicd tua f li ,ni fnE
1

3.6 Exemple de programme complet 3.5 En dfinitive 3.4 Valeur de retour


vect vect::operator = (const vect & v) // notez const { if (this != &v) { delete adr ; adr = new int [nelem = v.nelem] ; for (int i=0 ; i<nelem ; i++) adr[i] = v.adr[i] ; } return * this ; }

3 - Surdfinition de loprateur =

307

308

La surdfinition doprateurs CHAPITRE 15

. tne mecalp me nud noitarbil elbuod ed suqov jd se mlb -orp sel nartne tiarua iuq ec ,tua fd rap eipocer ed ruetcurtsnoc ud iga srola tiares es li ; ))b( = rotarepo.a : ici tnelaviuq tse b = a( eipocer ed ruetcurtsnoc ed leppa nu nartne tiarua noitcno f enu emmoc tiart ruetarpo tec ed leppal ,tia f sap snoival en suon is ,te ffe nE .=rotarepo ed ruoter ed ruelav al te tne mugral ruop ecnerfr rap noissimsnart enu riovrp d snova suon ,= ruetarpol ed iolpmel etimil es niam noitcno f erton iciuq neib ,ertuo nE
#include <iostream> using namespace std ; class vect { int nelem ; // nombre dlments int * adr ; // pointeur sur ces lments public : vect (int n) // constructeur { adr = new int [nelem = n] ; for (int i=0 ; i<nelem ; i++) adr[i] = 0 ; cout << "++ obj taille " << nelem << " en " << this << " - v. dyn en " << adr << "\n" ; } ~vect () // destructeur { cout << "-- obj taille " << nelem << " en " << this << " - v. dyn en " << adr << "\n" ; delete adr ; } vect & operator = (const vect &) ; // surdfinition oprateur = } ; vect & vect::operator = (const vect & v) { cout << "== appel operateur = avec adresses " << this << " " << &v << "\n" ; if (this != &v) { cout << " effacement vecteur dynamique en " << adr << "\n" ; delete adr ; adr = new int [nelem = v.nelem] ; cout << " nouveau vecteur dynamique en " << adr << "\n" ; for (int i=0 ; i<nelem ; i++) adr[i] = v.adr[i] ; } else cout << " on ne fait rien \n" ; return * this ; } main() { vect a(5), b(3), c(4) ; cout << "** affectation a=b \n" ; a = b ; cout << "** affectation c=c \n" ;
1

.eller noitacilppa enu snad elbasnepsidni tnemellerutan tiardneived ic-iulec ro ; eipocer ed ruetcurtsnoc ed uvrp sap snovan
.reifirv el ed esoporp suov ertipahc ec ed secicrexe sed nU .1

-rap al tnauqilpud ne edno forp eipoc enu reutce ffe tnatsisnoc ellerutan sulp al ehcramd al silitu snova suon ,eipocer ed ruetcurtsnoc ud noitini fd al ed sac el snad em moC 1 .)r u e t a si li t u n os n o n t e , ess al c al e d r u e t p e c n o c el e u q e nr e c n o c e n tniop ec te( sneil ed noitidl ed ruerre enu tnoriudorp erb mem noitcno f enu rap noitatce ffad s e vi t a t n e t s e l s e l u es t e n o i t a li p m o c n e s e t c e t d t n or e s r u et asi l it ul e d tr a p a l e d n o it at c e f f a d sevitatnet sel ,sac sec snad ; noitini fd snas ,evirp noitaralcd enu ruetce ffed erid--tsec ,stilibissop xued sel renibmoc ed xueiciduj ert tuep li ,elarng erina m enuD .sneil ed r ue ti d l ra p e te jer ar es )er b m e m n oi tc n o f e n u d n ies u a e m m( n oi ta tc e f fa d e v it at n et et u ot ,sac ec snad : noitini fd ed rinruo f ne snas noitcno f enu reralcd ed ++C er ffouq tilibissop al retiolpxe tnemelag tuep nO .enrecnoc essalc al ed serbmem snoitcno f sel euq sertua snoit -cno f sed rap iolpmel tidretni ne evirp e mro f suos noitatce ffal ed noitini fder enu ,isniA .noitatce ffal tneuqilppas snoitardisnoc se m m se L .stejbod eipocer al eridretni trtni riova tiavuop no ,sac sniatrec snad ,euq )31 ertipahc ud 3.1.3 ehpargarap( uv jd snova suoN

se uqrameR

inifdrus noitatceffad ruetarpo nu ceva tcev essalc enud noitasilitud elpmexE


++ obj taille 5 en 006AFDE4 - v. dyn en 007D0340 ++ obj taille 3 en 006AFDDC - v. dyn en 007D00D0 ++ obj taille 4 en 006AFDD4 - v. dyn en 007D0090 ** affectation a=b == appel operateur = avec adresses 006AFDE4 006AFDDC effacement vecteur dynamique en 007D0340 nouveau vecteur dynamique en 007D0340 ** affectation c=c == appel operateur = avec adresses 006AFDD4 006AFDD4 on ne fait rien ** affectation a=b=c == appel operateur = avec adresses 006AFDDC 006AFDD4 effacement vecteur dynamique en 007D00D0 nouveau vecteur dynamique en 007D00D0 == appel operateur = avec adresses 006AFDE4 006AFDDC effacement vecteur dynamique en 007D0340 nouveau vecteur dynamique en 007D0340 -- obj taille 4 en 006AFDD4 - v. dyn en 007D0090 -- obj taille 4 en 006AFDDC - v. dyn en 007D00D0 -- obj taille 4 en 006AFDE4 - v. dyn en 007D0340

3.7 Lorsquon souhaite interdire laffectation


} c = c ; cout << "** affectation a=b=c \n" ; a = b = c ;

3 - Surdfinition de loprateur =

309

essalc enud euqinonac emrof aL


~T () ; T & operator = (const T &) ; ..... } ;

: e u qi n o na c essalc tnevuos e mmon nouq mu minim ec tnadnopserroc fitalutipacr savenac nu icioV .noitatce ffad ruetarpo ; e i p o c er e d r u et c ur ts n o c ; ) t ej b ol rap src seuqi man yd stnemecalpme sel suot tnemetcerroc rerbil arved li( ruetcurtsed ; )tejbol ed seitrap seniatrec ed noitacollal ed grahc tnemelarng ares li( ruetcurtsnoc : s n io m ua s et na v i us s erb - me m snoitcno f ertauq sed essalc al rinu m ed eriassecn tse li ,tnemelbanevnoc ennoitcno f ei p o c er e t t e c e u q e ti a h u os n o l is ,s n oi ti d n o c s e c s n a D . e t n as i a fs it as s a p ts e n ) t u a f d r a p noitatce ffad ruetarpol rap euq tua fd rap eipocer ed ruetcurtsnoc el rap neib issua( essalc al ed stejbod eipoc al ,seuqiman yd seitrap sed rus sruetniop ed esopsid essalc enuuq srol sD

.) t e j b o e u q i n u n u s e l a g s e c n er - fr xued noitatce ffa srpa tituoba no ,ecner fr rap slupina m tnat stejbo sel( ++C ne ut i b a h ts e n o el l e u q a l el l e c e d et n er f fi d s r t ts e , el-s n o l e p p ar ,i u q n o it at c e f f al e d e u q -itnams al reifidom sap cnod tuep en nO .ruetarpod noitini fdrus al sap temrep en avaJ
avaJ n E

.) e i p o c er a l e u q s u l p s a p ( n o i t a t c e f f a l r e v i t c as d e d e l b i ss o p s u l p ts e n l i , sr u e n e t n o c s e d s n a d s t i u d or t n i e r t d s e l b i t p e c s u s s t e j b o s e d e c n a ss i a n r e n n o d e n i t s e d t s e e ss a l c e n u i s e u q dr a t s u l p s n or r e v s u o N 2 .D exennAl euqilpxel emmoc ,secner fr ed ruetp moc nud tnatod al ne ,noitacilpud ettec retiv rehcrehc arruop no ,sac sniatrec snaD .tejbol ed euqiman yd eit
310
La surdfinition doprateurs CHAPITRE 15

4.1 Cas gnral

4 La forme canonique dune classe

class T { public : T (...) ; T (const T &) ;

// // // // // //

constructeurs autres que par recopie constructeur de recopie (forme conseille) (dclaration prive pour linterdire) destructeur affectation (forme conseille) (dclaration prive pour linterdire)

: e m m oc serb m e m s no it c n o f s ed er irc rs n eib sn o irru op s uoN .1-melen te 0 ertne sirpmoc reitne nu rap arerper nol euq ,noitisop as ed ritrap rda rap tniop tne mecalpmel ed tneml nu redccad tnatte mrep slituod rinum al snohcrehC
class vect { int nelem ; int * adr ; ..... }

: tcev essalc erton uaevuon snordisnoC

.e ga tir h d n oi ta u ti s al et p m o c n e er d n er p e d n i fa 9 1 ert i pa hc u a t l p m o c ar es a m hcs e C

. n o i ti n i f d e d ri nr u o f n e s n as ,s e d o ht m x u e d s e c e d s e vir p s n o it ar a l c d s e d ri nr u o f t i a tsi s n o c e c al p n e er tt e m el p mis noitulos enuuq uv snova suon te ,31 ertipahc ud 3.1.3 ehpargarap uauq isnia ,7.3 ehpargarap ua s ne s ec s n a d s e tsi p se d i nr u o f s n o v a s u o v s u o N .s n o it ca se c eri dre t ni r u o p t na e g narras ne ,euqinonac e mro f al em m dnauq resilitud elbar frp tse li ,ruetasilitul ed tnolov ennob al rus retp moc ed euq ttulp ,sac ec snaD .essalc al ed ruetasilitul stilbissop sec rir ffo sap en tnemelp mis tuot zeitiahuos suov euq issua tuep es lI .)euqihparg e mts ys nud ertne f essalc enud sac( snes ed sap tnon selleuq ecrap elpmexe rap ,noitatce ffad te eipocer ed stilibissop sec ed resopsid ed nioseb sap an iuq esalc enu rerc ed revirra tuep lI .stejbod noitatce ffal uo eip -ocer al eridretni tne mellun arrev es en ruetasilitul ,serilucitrap snoituacrp ed erdnerp snas t e l a t i v m u m i n i m e c e d r e t o d al s n as sr u e t ni o p s e d t n a tr o p m o c e ss a l c e n u z e r c s u o v i S .ecacif fe sulp ervas ecnerfr rap noissimsnart al ,elbatcepser elliat ed tnos stejbo sel euq srol sd ,trap ertuaD .eipocer ed ruetcurtsnoc ud leppal tnenartne ruelav rap snoissimsnart sel euq euv ed sap ardrep en no ,tnadnepeC .ruelav rap uo ecnerfr rap simsnart tnem merf - fi d n i er t t n e v u e p r u o t er e d r u el a v as t e n o it at c e f f a d r u et ar p ol e d t n e m u gr al , e h c n a v er n E .selpitlum snoitatcef fa sel tnemetcerroc rerg ed ne yo m lues ,noitatce f fad ruetarpol ruoter ed ruelav enu )eriartnoc el eriaf ed snosiar sennob ed riovad sniom ( riovrp eD .noitatce f fal ed etiord ed ednarpol ed snoisrevnoc seniatrec ed noitcudortnil resirotua tuep redcorp ed noa f ettec euq 61 ertipahc ua siofetuot arrev nO .stnadnopserroc stejbo sed sruel -a v s el re i fi d o m e d n os iar e n u c u a t n o n ser b m e m s n oi tc n o f se c o er us e m a l s na d , n oi t at ce f - fal ed iulec te eipocer ed ruetcurtsnoc ud tnemugral ruop tsnoc fitaci filauq el re yolp meD : snolliesnoc suov suon ,eriotagilbo sap tios en ec euq neiB
311

5 Exemple de surdfinition de loprateur [ ]

void range (int valeur, int position)

e uqrameR

5 - Exemple de surdfinition de loprateur [ ]

. n o it at c e f f a d r u e t ar p o n u t e ei p o c er e d r u e t c urts n o c n u retuoja iul snio m ua tiardua f li ,euqitarp ne ,udnetne neiB .][ ruetarpo te ruetcurtsed ,ruetcurt -snoc : muminim tcirts nos etiudr tcev essalc enud noitasilitud elpmis elpmexe nu icioV : eriudr es tuep ][rotarepo noitcno f al ed sproc el ,noitisop al ed tid -ilav al rus elrtnoc ed reutce ffe snas hcrehc tnemll re yovner ed snotnetnoc suon suon iS : cnod ares ep ytotorp noS .)! elbannosiar elbmes iuq ec( essalc ep yt ed tios )a tse ]i[a ed ednarpo reimerp el( ednarpo reimerp nos euq euqilp mi iuq ec ,erbmem noitcnof enud emro f al suos ruetarpo tec rini fdrus ed esop mi ++C ,sruellia raP .ecnerfr rap esimsnart tios ][ ruetar - p o l r a p e i nr u o f r u o t er e d r u e l a v a l e u q er i as s e c n c n o d ts e l i , e u l a v l e n u t i o s ] i [ a e u q r u o P . e t n er f f i d er b m e m n oi t c n o f enu rap tiart tiat sac euqahc euqsiup ,sussed-ic elpmexel snad sap tiasop es en emlborp el euq zetoN .eulavl em moc erid--tsec ,noitatce ffa enud ehcuag tnemelag sia m ,)tluci ffid enucua etnesrp en iuq sac( noisserpxe enu snad tnemelues non esilitu ert essiup noitaton e t t e c e u q e t r o s n e e r i a f e t s i s n o c e r d n e r p n o i t u a c r p e l u e s a L . a e d i t n e m e c al p m e d t n e m -ll engisd ]i[a euq erinam ed ][ ruetarpol rini fdrus rehcrehc snovuop suon ,tia f nE
// et O ailleurs // pour afficher les valeurs de a int & operator [] (int) ; return adr[i] ;

: icec tiarelb messer ellE .esia erug srola tiares en sruetcev son ed noitalupinam a L .ennod noitisop enu eutis ruelav al rinruo f ruop : te ,ennod noitisop enu ruelav enu eriudortni ruop
312
La surdfinition doprateurs CHAPITRE 15
int trouve (int position)

#include <iostream> using namespace std ; class vect { int nelem ; int * adr ; public : vect (int n) { adr = new int [nelem=n] ; } ~vect () {delete adr ;} int & operator [] (int) ; } ; int & vect::operator [] (int i) { return adr[i] ; } vect a(5) ; a.range (15, 0) ; a.range (25, 1) ; for (int i = 2 ; i < 5 ; i++) a.range (0, i) ; for i = 0 ; i < 5 ; i++) cout << a.trouve (i) ; // place 15 en position 0 de a // 25 en position 1

.c te ; i ,a noitaton : , ruetarpol ? i < a n o it at o n a l e d sr ol a r e s n e p e u q : < r u et ar p ol ; e l b i s n e h r p m o c t e r o c n e t i a r u a ) i ( a n oi t a t o n a l : )( r u et ar p ol : r e s i l i t u n e i b i s s u a t u o t u p s n o ir u a suoN .++ C rap sop mi tne mellun sia m ,s nes n ob el rap tcid ici tiat ][ r uetarpoL 4 . e c n er - fr rap sulp non te ,ruelav rap tatlusr nos te msnart ruetarp o erto n euqsiup noitalip - m o c n e e t e j er n e i b a r e s , t n a t s n o c r u e t c e v n u t n a t v, . . . = ] i [ v e u q e l l e t n o i t a t c e f f a e n U : ruetarp o dnoces ec ert tiarruop euq ec iciov ,sac ert on s naD .rei fido m el non s i a m n o i t s e u q n e t e j b o l r e t l us n o c es s i u p l i u q e t r os n e t n a s i a f n e , s t n a ts n o c s t e j b o x u a t n e m e u q i n u n i t s e d r u e t a r p o d n o c e s n u r i n i f d ar er f r p n o , l a r n g n E . e l b a t i a h u os er u g t s e n i u q e c , e l b is s o p sr o l a t i ar d n e i v e d t n a ts n o c t e j b o n u d sr u e l a v s e d n o i t a c i f -i do m al sia m ,][ ruetarpol tsnoc fitaci filauq ec ret uoja tiarru op no ,setreC .rei fid om a l s n as s t n e m e l s es e d r u e l a v a l r e s i l i t u d e u q t i g as e n l i s e m m , t n a t s n o c t e j b o n u re dcca d sap c nod temrep e n ][ ruetarpol ,un oc snoval suo n euq leT .t natsn oc tejbo n u s e u q i l p p a er t t n e v u e p t s n o c f i t a c i f i l a u q u d s e t o d s er b m e m s n o i t c n o f s e l s e l u e S 3 . e r t ar a p p a t n a v u o p s e t i c i l p m i s n o i sr e v n o c s e d u n e t e t p m o c , t e j b o n u r e i f i d o m e d e l b i t p e c s us r u e t ar p o n u e i m a n o i t c n o f e n u r a p r i n i f d e d l l i e s n o c s a p t s e n l i u q er t i p a h c n i a h c o r p u a s n orr e v s u o n , n o a f e t u o t e D . = r u e t ar p o l r u o p e m m e d j d t i a l l a n e l i ; e i m a n o i t c n o f e n u d e mr o f a l s u o s ][ r u e t ar p o l r i n i f d e d t i dr e t n i + + C 2 . t n i e p yt u d s e l b a ir a v s e d e ll i a t et it e p al e d u n e t et p m o c ,t r t ni d er u g ti ar e t n es -rp en alec sia m ,ecner fr rap ednarpo dnoces el erttemsnart rs neib snoirruop suoN 1
int vect::operator [] (int i) const { return adr[i] ; } b(3), i<3 ; i<3 ; i<3 ; c(3) i++) i++) i++)

se uqrameR

][ruetarpol ed noitinifdrus ed elpmexE


0 3 6 main() { int i ; vect a(3), for (i=0 ; for (i=0 ; for (i=0 ; } ; {a[i] = i ; b[i] = 2*i ; } c[i] = a[i]+b[i] ; cout << c[i] << " " ;

5 - Exemple de surdfinition de loprateur [ ]

313

.][eteled te eteled euqilppas euqramer e m m al ; ertual tne meuqitamotua sap tnanartnen enul ; setner f fid sesohc xued tnos trap ertuad ] [ w e n e d t e t r a p e n u d w e n e d s n oi ti n i f dr us s e l e u q e u v e d er dr e p s a p ar d u a f e n l i , n i f n e ; n oi ti n i f dr us e nu c ua rpo tna yan essalc sep yt sel ruop te selleusu serutcurts sel ruop ,esab ed sep yt sel ruop ssilitu srola tnores li ; elabolg noa f ed sruetarpo sec rinifder tnemelag zerruop suov ; euvrp t aruan noitini fdrus enucua o sessalc sel ruop ssilitu ertd tnoreunitnoc ) xuabolg sruetarpo d issua elrap no( sini fdrp sruetarpo sel ,sac ec snad ; zeretiahuos el suov euq sessalc ed tnatua snad sruetarpo sec rini fder sruojuot zerruop suov udnetne neib ; ennod essalc enu ruop tne mevitcels eteled te wen rini fder zerruop suov : noitini fder ruel ed uaevin ua secneuqsnoc sed euqramer etteC .)tejbo u o er u t c urt s , es a b e d e p yt e d s t n e m l d( x u a e l b a t s e d t n a u qi l p p as ] [ e t e l e d t e ] [ w e n sr u e t - ar p o s er t u a d e ts i x e l i ,sr u el li a r a P .st ej b o s e d u o s e ll e us u s er ut c urts s e d , es a b e d s e p y t sed reuqilppas tnevuep eteled te wen sruetarpo sel euq reton neib tuaf li ,drobad tuoT .sp met rei merp nu snad rongi ert tuep ertipahc eC .B.N

.noitcno f ertua enu tne mugra ne sesimsnart erid--tsec ,leppar ed setid snoitcno f sed sac el snad setnassertni sulp erocne tnorervas selle siaM .)ruetcurtsnoc nos sssap stnemugra sed siaib el rap( liavart nos rert marap ed uo ,noitcno f enud noitasilait -inid snoitarpo seniatrec reutce ffed eriassecn tse liuqsrol rivres tnevuep stilibissop seC : 5 te 3 sruelav sel tnattemsnart iul ne ,1tcf_jbo tejbol ed ) ( ruetarpol ed leppal esilar etnavius noitaton al ,ehcnaver nE .ruetcurtsnoc nos 5.2 ert marap el tnatte msnart ne ,tcf_lc ep yt ed 1tcf_jbo mmon tejbo nu rs neib tiurtsnoc : e u q el l e t n oi t ar al c d e n u ,s n o i ti d n o c s e c s n a D
class cl_fct { public : cl_fct(float x) { ..... } ; int operator() (int n, int p ) { ..... } } ; // constructeur // oprateur () cl_fct obj_fct1(2.5) ; obj_fct1(3, 5)

: tni nu tna yovner te tni ep yt ed stne mugra xued noitcnof enu ednopserroc liuq ruop )( ruetarpol snossini fdrus suon leuqel snad ,elp mis elpmexe nu iciov nE .erianidro noit -cno f enuuq erina m e m m al ed ssilitu ert tnevuep sli rac ,snoitcno f stejbo sed tnos ecnas -sian ennod elle sleuqxua stejbo sel euq tid no ,)( ruetarpol tini fdrus essalc enuuqsro L

314

7 Surdfinition des oprateurs new et delete 6 Surdfinition de loprateur ()


La surdfinition doprateurs CHAPITRE 15

.erobal sulp ehct enu larng ne arilpmocca wen ruetarpol ,ler emmargorp nu snad ,udnetne neiB .1
using namespace std ;

.eriom m al ed noitseg al enrecnoc iuq ec ruop ):: ed iolpme rap( sini fdrp sruetarpo xua leppa sruelliad tno f slI . sleppa sel resilibatp moc ned tub lues el snad , eteled te wen sruetarpo sel tini fdrus tniop essalc al leuqel snad em margorp nu icioV
1

. ) s i h t ( e t i c i l p m i t n e m u gr a d s a p t n e v i o er e n t e s i n i f d t n o s s l i o e s s a l c a l e d s e u q i t a t s s er b m e m x u a u q s c c a c n o d t n o n s l i , s l e t e u q t n a t n E . ) 2 1 er t i p a h c u d 8 e h p ar g ar a p e l r i o v( e s s a l c r u e l e d s e u q i t a t s s e r b m e m s n o i t c n o f s e d t n o s e t e l e d t e w e n sr u e t ar p o s e L 2 .eteled ruop emm ed av ne li ; etrop ed noitulosr ed ruetarpol tnasilitu ne ini fdrp ruetarpol leppa eriaf ed elbissop etser li ,essalc enu ruop ini fdrus t a wen ruetarpol euqsrol e mM 1 .)diov( ruoter ed ruelav enucua rinruo f eN .er iur t d t ejb ol u ol la t n e m ec alp m el e d esserdal etnesrper li ; etnadnopserroc essalc al rus ruetniop ep yt ud tnemugra nu rioveceR : tiod elle ,eteled ruetarpol tnadnopserroc erbmem noitcno f al ed noitini fd al tnauQ . t e j b ol r u o p u o l -la tne mecalpmel ed esserdal tnadnopserroc * diov ep yt ed ruelav enu ruoter ne rinruoF .) 1 3 ert i p a h c e l s n a d e u q e dr o b a ar es e n e m y n o n ys e p yt e d n o it o n al f e d d t s c ett-ne reihci f el snad ini fd reitne ep yt nud em ynon ys nu tse t_ezis euq zetoN( .nrec -noc tejbol ed elliat al ed noitcno f ne ,tnemeuqitamotua arerng el iuq ruetalipmoc el tsec rac ,leppa nos ed srol i ficps ert sap an li , wen ed noitini fd al snad erugi f liuq neiB .reuolla tejbol ed stetco ne elliat al tnadnopserroc t_ezis ep yt ed tne mugra nu redssoP : tiod iuq erbmem noitcno f enu rap tnemeriotagilbo tiaf es wen ed noitini fdrus a L

e s s a l c e n u d n i e s u a e t e l e d t e w e n e d n o i ti n i f -drus al riovas ,elleusu sulp al noitautis al rap tnane mmoc ne ,liatd ne sulp alec sno yoV
315

7.2 Exemple

7.1 Surdfinition de new et delete pour une classe donne

#include <cstddef> #include <iostream>

// pour size_t

se uqrameR

7 - Surdfinition des oprateurs new et delete

316

La surdfinition doprateurs CHAPITRE 15

class point { static int npt ; // nombre total de points static int npt_dyn ; // nombre de points "dynamiques" int x, y ; public : point (int abs=0, int ord=0) // constructeur { x=abs ; y=ord ; npt++ ; cout << "++ nombre total de points : " << npt << "\n" ; } ~point () // destructeur { npt-- ; cout << "-- nombre total de points : " << npt << "\n" ; } void * operator new (size_t sz) // new surdfini { npt_dyn++ ; cout << " il y a " << npt_dyn << " points dynamiques sur un \n" ; return ::new char[sz] ; } void operator delete (void * dp) { npt_dyn-- ; cout << " il y a " << npt_dyn << " points dynamiques sur un \n" ; ::delete (dp) ; } } ; int point::npt = 0 ; // initialisation membre statique npt int point::npt_dyn = 0 ; // initialisation membre statique npt_dyn main() { point * ad1, * ad2 ; point a(3,5) ; ad1 = new point (1,3) ; point b ; ad2 = new point (2,0) ; delete ad1 ; point c(2) ; delete ad2 ; } ++ nombre il y ++ nombre ++ nombre il y ++ nombre -- nombre il y ++ nombre -- nombre il y -- nombre total de points : 1 a 1 points dynamiques total de points : 2 total de points : 3 a 2 points dynamiques total de points : 4 total de points : 3 a 1 points dynamiques total de points : 4 total de points : 3 a 0 points dynamiques total de points : 2

sur un

sur un

sur un

sur un

: n o a f et t e c e d ] [ e t e l e d a r i n i f d r u s n o , e m m e D .) t n i o p e d s t ne m u gra s n as r u et c urts n oc ud sleppa 05 sel sruojuot te( ini fdrus isnia ][wen ruetarpol ed leppa nu neib areutce ffe : n o i t c u rt s n i l , e m m ar g or p e d el p m e x e t n e d c r p er t o n s n a d ,s i o f e tt e C .) t n e m l l u es n u d el li a t a l n o n te( uaelbat el ruop reuolla elatot elliat al neib ardnopserroc tnemugra ne einruo f ruelav a L
void * operator new [](size_t sz) { ..... return ::new char[sz] ; } point * adp = new point[50] ;

: retuoja snorruop suon ,tnedcrp elp mexel ed tniop essalc erton snad ,elp mexe raP .noitcnitsid al reutce ffe tnavres )wen ed ueil ua ][ wen( ruetarpol ed e mm mon el ,wen ruop e mmoc redcorp ed ti ffus li ,essalc enud nies ua ][ wen rini fdrus ruoP

.s r p a- i c r i o v e l s n o l l a s u o n e m m o c ] [ e t e l e d t e ] [ w e n t n e m e l a g ar i n i f dr us n o , l a r n g n E .) t n e m - ugra snas ruetcurtsnoc ud leppal sio f 05 te( ini fdrp wen ruetarp ol leppa tiare f : e u q e l l e t n o i t c u r ts n i e n u , t n e d c r p e m m ar g or p e d e l p m e x e l s n a d ,isniA .][eteled ed eteled ,][ wen e d wen reug nitsid ed eriassec n tse liuq sap zeilbu oN 3 .) e t s i x e l i u q sr o l( r u e t c ur t s e d u d i u l e c e d d c r p sr u o j u o t t s e l e p p a n o s , i n i f d r p u o i n i f dr u s t i o s e t e l e d e u q , e m m e D .) e t s i x e l i u q sr o l( r u e t c ur t s n o c u d i u l e c e d i v i us ) t n e m e s u er u e h ( sr u o j u o t t s e l e p p a n o s , i n i f d r p u o i n i f dr us t i o s w e n e u Q 2 .snrecnoc sap sruojuot tnos en )elip al rus siam , n o it u c x e l e d sr ol s u o ll a( s e u qi m a n y d st ej b o s e l t e ) n o it al i p m o c a l s u o l l a( s e u q it ats stejbo se L .tne meuqi man yd suolla stejbo sel rus euq ecnedicnid an eteled te wen sruet -arpo sed noitini fdrus al ,erdnetta ys tuep no e mmoc te ,elpmexe tec ertnom el em moC 1
point * ad = new point [50] ;

tniop essalc al ruop wen ruetarpol ed noitinifdrus ed elpmexE


-- nombre total de points : 1 -- nombre total de points : 0

7.3 Dune manire gnrale

void operator delete (void * dp) // dp adresse de lemplacement librer { ..... }

se uqrameR

7 - Surdfinition des oprateurs new et delete

317

.)...seriassecn emts ys ua sleppa sel tnasilar ne elp mexe rap( erio m m ed euqi man yd noitseg al egrahc as tnemetlpmoc erdnerp tiod ruemmarg -orp el euqsiup eteled ed wen ed elabolg noitini fdrus al ed trtnil eti mil tniop reinred eC . fi sru cr sussecorp nu snad rertne are f wen:: ed emm uo wen ed leppad evitatnet etuoT .ini fdrp wen ruetarpol leppa eriaf ed elbissop sulp tsen li ,ruetarpo tec ed noitini fdrus al snaD : etnavius noitaralcd al ed sac el tseC .esab ed sepyt sel ruop sirpmoc y ,ini fd -rus t an wen ruetarpo nucua sleuqsel ruop sep yt sel suot ruop leppa ares ruetarpo teC : sr o la uq ne ib ze t oN : elp mexe tec snad em moc ,etnadnepdni noitcnof enud emro f al suos tnadnopserroc ruetarpol rini fd ed ti ffus li ,elabolg erina m ed eteled te wen sruetarpo sel rini fdrus ruop ,nifnE
318
La surdfinition doprateurs CHAPITRE 15
void operator new (size_t sz) { ..... } int * adi = new int ;

. ruetalipmoc ici esoppos iuq , ruetasilitu d udnapr emret el vresnoc siofetuot snova suoN .emmargorp ud ruetual tiaf ne erid--tseC .1

; )selagl sap tnos en selbissop snoisrevnoc sel setuot euq zeton( ecirtpecr el b a ir a v a l e d e p yt e l s n a d e cr o f n o isr e v n o c sr ol a a y li : s n o it at c e f f a s el s n a d : x u ae v in stnerf fid tnertnocner es selle ; etxetnoc ud noitcno f ne ruetalip moc el rap ecalp ne sesim t n o s s e l l e s i a m , r u e t a si li t ul r a p s e n n o it n e m s a p t n os e n s et i c il p m i s n o i s r e v n o c s e L
1

: snad emmoc ,tsac ed ruetarpo nu leppa tia f nol euqsrol seticilpxe tnos snoisrevnoc se L .s et i ci l p x e s n o isr e v n o c s e l t e s e t i c il p m i s n o isr e v n o c sel : seirogtac xued reugnitsid sne ma t snova suon te elpmis ep yt ertua nu ne )ruetniop uo noitarmun ,esab ed ep yt( elpmis ep yt nud snoisrevnoc sed rtnocner jd snova suoN

n = int(z) ;

int n ; double z ; ..... z = double(n) ; // conversion de int en double

Les conversions de type dfinies par lutilisateur

// conversion de double en int

ou : z = static_cast<double> (n)

ou : n = static_cast<int> (z)

: s n ad uo

16

uo snoitcno f ed sleppa sed ,snoitatcef fa sed snad tnemeticilpmi leppa ert tuep ruetcurtsnoc ec ,essalc al ed noitini fd al ed tnemom ua eridretnil ed sniom ,snorrev el suon e mmoC
point a ; ..... a = point(3) ;

: elp mexe rap ,ruetcurtsnoc ec tnemeticilpxe releppa tnem moc uv jd sruelliad snova suoN .tniop ep yt ed tejbo nu ne tni nud noisrevnoc enu esilar ruetcurtsnoc ec euq erid tuep nO : e mmoc ,tnemugra nu ruetcurtsnoc nu tnadssop tniop essalc enu snordisnoC
point (int abs) { x = abs ; y = 0 ; } complexe -> double double -> complexe

.ecner fr rap si msnart teum tne mugra nu uq -ilppa tsnoc fitaci filauq ud tnatrop mi elr el rus retsisni ruop snoreti forp ne suon ,egassap uA .setnai fingis non ttnat ,)euqita mhtam noitatonnoc ( setnai fingis t t n at s n o isr e v n o c e d s el p m e x e s e d s i li t u t n e m er i a t n o l o v s n o v a s u o n , e vi t h n oi s u l c n o c e n u r et i v s u o v r u o P . es u a c e d e c n ass i a n n o c e t u ot n e u q r e y ol p m e s el e n e d n o b ts e li ,s e s -ueregnad zessa em moc serdisnoC .stilibissop setner ffid sec rus tniop el tia f ertipahc eC ! s n o isre v n oc e d er ne g e m m e l ec al p n e ertte m ed ruetalipmoc el sap arehcpmen iuq ec ,etro f issua euqita mhtam noitatonnoc enu sap tna yan sessalc sed ruop emm ed tne meriassecn sulp ari nen li ,seuqir mun sep yt sel te exelpmoc essalc enu ertne snoisrevnoc ed resopsid ed euqigol tarap lis ,tnadnepeC .tni nud te exelpmoc nud ellec e mm uo ,elbuod nud te exelpmoc nud noitiddal s n es n u r e n n o d e d art t e mr e p s n o isr e v n o c s el l e t e d e c n e ts i x e l e u q s n orr e v s u o n ,ts e s u l p i u Q : snoisrevnoc xua noitaci fingis enu rennod ,seirporppa snoitcno f sed tnavirc ne ,arruop no ,exelpmoc ep yt nu ruop ,elpmexe raP .ruetasilitul rap src essalc sep yt sed rinevretni tnasia f snoisrevnoc sed rini fd ed issua temrep ++C siaM ...gnol ep yt ed sruelav xued ed noitidda enu ruop gnol ne tni elpmexe rap ,ep yt ed tnemetsujad snoisrevnoc sed ; t n i n e t r o h s t e r a h c : s e u q it a m ts ys s n oisr e v n o c s e d : rinevretni tno f iuq sesicrp selgr sed tnavius ,ertual ed ep yt el snad sednar -po sed nul ed elleutnev noisrevnoc a y li ,ruetarpo euqahc ruop : snoisserpxe sel snad ; ) n o it at c e f f a r a p tnos el iuq sellec euq semm sel tnat selagl snoisrevnoc sel( ep ytotorp el snad ralcd ep yt el snad tne mugra nud ecro f noisrevnoc tnemelag a y li : noitcno f ed sleppa sel snad
320
Les conversions de type dfinies par lutilisateur CHAPITRE 16

1 Les diffrentes sortes de conversions dfinies par lutilisateur

ruetasilitul rap seinifd snoisrevnoc ed setros ertauq seL


operator D()

: euqnocleuq esab ed ep yt nu b ,sessalc xued tnengisd B te A ; reuqovd snonev suon euq stilibissop setnerf fid sel tnalutipacr amhcs nu icioV . ex elpmoc es sa lc a l s n ad s io f e tt ec u tis : ruetcurtsnoc el cevauq ertit e mm ua ,exelpmoc ne tniop nud noisrevnoc al arini fd no ,tniop essalc al ed nies ua : ceva ,elpmexe raP .essalc ep yt ertua nu ne essalc ep yt nud noisrevnoc enu rini fd ruop e yolp me ert issua arruop tsac ed ruetarpo nud noitinifd ed ehcramd erinred etteC . e x e l p m o c e s s al c al e d n i e s u a , t n i o p e s s al c al e d n i e s u a : stic sac xued sel ruop ,elpmexe rap ,irporppa tsac ed ruetarpo nu enrecnoc essalc al ed nies ua tnassini fd ne tiart ert arruop noisrevnoc ed ep yt ec ,snorrev el suon e mmoC .elbuod ne exelpmoc nu uo tni ne tniop nu elpmexe rap ,elpmis ep yt nud ruelav enu ne tejbo nud noisrevnoc enu resilar ed erttemrep sac nucua ne tuep en )essalc as ed ep yt ud tejbo nu tinruo f iuq( ruetcurtsnoc nu ,ehcnaver nE .)tnemeticilpxe tidretni ti al n o u q s n i o m ( s e u q o v s n o i t a ut is s e t n er f fi d s e l s n a d t n e m et i c il p mi e si li t u ert iss u a elle arruop noisrevnoc ettec euq snorrev suoN .exelpmoc ne tniop nu ritrevnoc ed temrep : tniop ep yt ed tne mugra nu exelpmoc essalc al ed ruetcurtsnoc nuuq erid tuep no ,exelpmoc te tniop semmon sessalc xued erdisnoc nol is ,tne melarng sulP .) dra d na ts n o isre v n oc ed issua elrap no( elleusu noisrevnoc enuuq ertit e m m ua ,snoisserpxed sluclac sed
321
complexe (point) ; operator int() operator double() operator complexe() ; complexe (point) ;

1 - Les diffrentes sortes de conversions dfinies par lutilisateur

Constructeur un argument A(b)

Constructeur de D un argument

Oprateur de cast dans C Oprateur de cast dans A operator (b) D(C)

.sleppa xued sel snad noitalipmoc ed ruerre enu tiardneitbo no ,cilbup ralcd sap tiatn liS .1

e mmoC . noitatce ffa enu rap nartne eticilpmi leppa nu te ,rini fd ed snonev suon euq tni ruetarpol ed eticilpxe leppa nu sio f al tnartnom em margorp ed elp mexe reimerp nu icioV
1

.cilbup ert arved ruetarpo tec ,essalc al ed rueirtxel elbasilitu ert ruop ,udnetne neiB
operator int() { return x ; }

. n no itn em ert sap t i od en )ruetarpol ed mon el rap ini fd iulec srola tse iuq( ruoter ed ruelav al ed epyt el te erb - m e m n o i t c n o f e n u e m m o c i n i f d e r t s r u o j u o t t i o d t s a c e d r u e t a r p o n u , + + C n e ,t i a f n E : e t t -nel resnep up tiarua nouq etros ed ,tni nu tinruo f ruetarpo tec ,epicnirp ne : ruoter ed ruelav al etseR .ep ytotorp nos uo ett-ne nos snad tarappan tne mugra nucua ,erbmem noit -cno f enud tigas li e mmoc te ,)tne mugra lues nu( erianu tse li ,tni ici e mmon es ruetarpol : tnedcrp ertipahc ua idut ruetarpod noitinifdrus ed leutibah emsinac m ud l tigas lI : tnemelp mis snoreton el suoN .tni ne tniop ed noisrevnoc al tnattemrep tsac ed ruetarpo nud rinum al snoitiahuos suon euq zesoppuS
class point { int x, y ; ..... } operator int() int operator int()

: tniop ud essicsbal tios tni ne noisrevnoc al ruop tiahuos tatlusr el euq tnasoppus ne ,)engil ne ici( tsac ed ruetarpo erton rini fd snoirruop suon tne mmoc iciov ,evitini fd nE

.ruetalipmoc el rap stejer sac sel renimaxe te ,ervu ne sesim tnos seticilpmi snoisrevnoc setner ffid sel tnem moc te dnauq reuqilpxe issua siam ,retnesrp el cnod snolla suoN .uaevuon e mmoc tarappa essalc enu uqilppa tsac ed ruetarpol lues ,reuqovd snonev suon euq snoisrevnoc ed stilibissop setner ffid sel imraP
322
Les conversions de type dfinies par lutilisateur CHAPITRE 16

2.2 Exemple dutilisation


: tniop essalc enu snordisnoC

2.1 Dfinition de loprateur de cast

2 Loprateur de cast pour la conversion type classe > type de base

2 - Loprateur de cast pour la conversion type classe > type de base

323

.leppa nos ed ecart enu rinetbo ruop e m m-i u l r ue tar p o l s n a d e g a hc i f fa d n oi tc ur ts ni e n u ti u d ort n i s n o va s u o n , e m u t u o cc al


#include <iostream> using namespace std ; class point { int x, y ; public : point (int abs=0, int ord=0) { x = abs ; y = ord ; cout << "++ construction point : " << x << " " << y << "\n" ; } operator int() return x ; } } ; main() { point a(3,4), b(5,7) ; int n1, n2 ; n1 = int(a) ; // appel explicite de int () // on peut aussi crire : n1 = (int) a ou n1 = static_cast<int> (a) cout << "n1 = " << n1 << "\n" ; n2 = b ; } ++ construction point : 3 4 ++ construction point : 5 7 == appel int() pour le point 3 4 n1 = 3 == appel int() pour le point 5 7 n2 = 5 // appel implicite de int() cout << "n2 = " << n2 << "\n" ; // "cast" point --> int { cout << "== appel int() pour le point " << x << " " << y << "\n" ; // constructeur 0, 1 ou 2 arguments n2 = b ;

tni >- tniop noisrevnoc al ruop tsac ed ruetarpo nud noitasilitud elpmexE . 2 n e u n e t b o r u e l a v al e d ) e u qis s a l c( n o it at c e f f a e n u ; t n i n e b t n i o p u d n o isr e v n o c e n u : ne r ue ta lip mo c el rap et i u dar t t a : n o i t a t c e f f a l e u q t n e m er i a l c s n o y o v s u o N

324

Les conversions de type dfinies par lutilisateur CHAPITRE 16

2.3 Appel implicite de loprateur de cast lors dun appel de fonction


: l eppa sap ts en l i ic i uq rer t no m ed ni f a ,eipocer ed ruetcurtsnoc nu tniop essalc al snad )tnemelleici fitra( snosiudortni suon ,ertuo nE .)a( tniop ep yt ed tne mugra nu ceva sio f e mixued enu ; ) 6( r e i t n e t n e m u gr a n u c e v a s i o f er i m er p e n u : snoleppa suon euq ,reitne ep yt ed tnemugra nu tnavecer tcf noitcno f enu snossini fD
#include <iostream> using namespace std ; class point { int x, y ; public : point (int abs=0, int ord=0) // constructeur 0, 1 ou 2 arguments { x = abs ; y = ord ; cout << "++ construction point : " << x << " " << y << "\n" ; } point (const point & p) // constructeur de recopie { cout << ":: appel constructeur de recopie \n" ; x = p.x ; y = p.y ; } operator int() // "cast" point --> int { cout << "== appel int() pour le point " << x << " " << y << "\n" ; return x ; } } ; void fct (int n) // fonction { cout << "** appel fct avec argument : " << n << "\n" ; } main() { void fct (int) ; point a(3,4) ; fct (6) ; // appel normal de fct fct (a) ; // appel avec conversion implicite de a en int } ++ ** == ** construction point : 3 4 appel fct avec argument : 6 appel int() pour le point 3 4 appel fct avec argument : 3

noitcnof ed leppa nud srol tsac ed ruetarpol ed leppA

2 - Loprateur de cast pour la conversion type classe > type de base

325

2.4 Appel implicite de loprateur de cast dans lvaluation dune expression


: tniop ep yt ed tnos b te a euqsrol b + a uo 3 + a euq s el l e t s n oi ss er p x e s e d s e ul a v t n os t n o d er i n a m a l t n ert s u l li e m m ar g or p e c e d st at l us r s e L

.tniop ep yt ed tejbo nud eipocer rap noitarc ed sap a yn li te ,noitcno f al ed leppal tnava esilar neib tse noisrevnoc al ,erdnetta ys tiavuop no em moC .eunetbo isnia ruelav al tnemugra ne tinruo f no elleuqal ,tcf ed leppa nu ; t n i n e a e d n o isre v n oc e n u : ne ruetalipmoc el rap tiudart t a
#include <iostream> using namespace std ; class point { int x, y ; public : point (int abs=0, int ord=0) // constructeur { x = abs ; y = ord ; cout << "++ construction point : " << x << " " << } operator int() // "cast" point { cout << "== appel int() pour le point " << x << " return x ; } } ; main() { point a(3,4), b(5,7) ; int n1, n2 ; n1 = a + 3 ; cout << "n1 = " << n1 << "\n" ; n2 = a + b ; cout << "n2 = " << n2 << "\n" ; double z1, z2 ; z1 = a + 3 ; cout << "z1 = " << z1 << "\n" ; z2 = a + b ; cout << "z2 = " << z2 << "\n" ; } ++ ++ == n1 == == construction point : 3 4 construction point : 5 7 appel int() pour le point 3 4 = 6 appel int() pour le point 3 4 appel int() pour le point 5 7 0, 1 ou 2 arguments y << "\n" ; --> int " << y << "\n" ;

: leppal euq tiov nO


fct(a)

.l a ni f ep yt n os ru s euq s ulp sap ,e ul a v ts e n oi sserp xe l tnod erinam al rus tne menucua tigan ecirtpecr elbairav al ed ep yt el euq neib zetoN . elbuod ne no is -serpxel ed tatlusr ud ecro f noisrevnoc a y li ,sac ec snad : elbuod ep yt ed elbairav enu ; eritne elbairav enu : s n o it at ce f f a d s etr os x u e d u v r p s n o va s u o n ,s n o isser p xe x u e d s e d e n u ca h c r u o P
point point | | int int |___ + ___| | int point int | | int | |___ + ___| | int

: t n a v i u s a m h c s e l t n a vi u s ti a f e s e l l e , b + a e d n o i t a u l a v l t n a u Q . e dr a g n e ert t e m s u o v r u o p t t ul p s i a m ,s et u o t r e y o l p m e s el r e g ar u o c n e s u o v r u o p sap non ,rertnocner ed euqsir nol euq snoitautis setner f fid sel retnesrp snohcrehc suoN . 3 + a n o it ar p ol n o it ac -i fingis elbatirv enu rennod sap ehcrehc en nol is etnauqohc snio m tarap ehcra md a L .stniop xued ed noitiddad )inifdrus( ruetarpo nu tiatsixe lis e m m ed sap tiari nen lI .elbaegasivne tsen noisrevnoc ertua enucua ,icI : tnesopmis seuqra mer seuqleuQ .reuqohc tuep ehcramd ellet enu ,setreC

: a m hc s el t na v i us ,sre it n e xued ed e mmos al renemar es erina m ed ,tni ne a ed noisrevnoc al tiovrp li ,sac erton snaD .etnatsixe noitarpo enu rituobad tnatte mrep sednarpo sed snoisrevnoc sed ecalp ne ertte m srola ehcrehc lI .sap evuort nen li ,icI .sednarpod sep yt sec tnadnopserroc ini f -drus + ruetarpo nu etsixe lis drobad tuot ehcrehcer ruetalip moc el ,reitne nu te tniop ep yt ed tne ml nu rus tnatrop ruetarpo nu ceva 3 + a em moc noisserpxe enu ertnocner liuqsro L
noisserpxe enud noitaulavl snad tsac ed ruetarpol ed noitasilitU
n2 == z1 == == z2 = 8 appel int() pour le point 3 4 = 6 appel int() pour le point 3 4 appel int() pour le point 5 7 = 8

326

Les conversions de type dfinies par lutilisateur CHAPITRE 16

2 - Loprateur de cast pour la conversion type classe > type de base

327

2.5 Conversions en chane


: elp mexe tec zerdisnoC
#include <iostream> using namespace std ; class point { int x, y ; public : point (int abs=0, int ord=0) // constructeur 0, 1 ou 2 arguments { x = abs ; y = ord ; cout << "++ construction point : " << x << " " << y << "\n" ; } operator int() // "cast" point --> int { cout << "== appel int() pour le point " << x << " " << y << "\n" ; return x ; } } ; void fct (double v) { cout << "** appel fct avec argument : " << v << "\n" ; } main() { point a(3,4) ; int n1 ; double z1, z2 ; n1 = a + 3.85 ; cout << "n1 = " << n1 << "\n" ; z1 = a + 3.85 ; cout << "z1 = " << z1 << "\n" ; z2 = a ; cout << "z2 = " << z2 << "\n" ; fct (a) ; } ++ == n1 == z1 == z2 == ** construction point : 3 4 appel int() pour le point = 6 appel int() pour le point = 6.85 appel int() pour le point = 3 appel int() pour le point appel fct avec argument : 3 4 3 4 3 4 3 4 3

es a b e d e p y t n u d n o isr e v n o c e n u d ti ari g as l i r O . t n i ne 5 8. 3 e d n o isr e v n oc al ti o vr p r u et -alip moc el euq resoppus tiarruop no ,edcrp iuq ec ceva eigolana raP .tni ep yt ed sulp non te ,elbuod ep yt ed tse 58.3 etnatsnoc al euq tse setnedcrp snoitautis sel ceva ecner ffid a L

: n o iss er p x el e d r u el a v a l s es ir p er x u e d r e ul a v s n o v a s u o n ,si o f e tt e C
a + 3.85

enahc ne snoisrevnoC

. ecrof noisrevnoc euq tnat ne ,noitcnof ed leppa nu uo noitatceffa enu snad ertl tiarruop ellE .1

. eini fdrus noitcno f ennob al ed ehcrehcer al snad seuqov snova suon euq sellec neib tnores seuqilppa selgr sel ; )noitcno f enu c n o d( r u e t a s il i t u l r a p i n i f d r u e t ar p o n u s i o f e tt e c s e v i t a l er , e t i u s al r a p s e l b a l b m e s snoitautis sed snorevuorter suoN .ruetasilitul rap eini fd noitcno f enu sulp non te ,ini f - d r p r u et ar p o n u u qi l p p a el b ar a p m o c e ms i n a c m n u d t i g as li ,i c I .s ei n i f dr u s s n o i t - c n o f s e d s a c e l s n a d s n o isr e v n o c e d e n a h c e d e ms i n a c m e c r t n o c n er j d s n o v a s u o N

e uqrameR

: leppal ruop e m m ed av ne lI .elbuod ne tni ed siup ,tni ne tniop ed noisrevnoc elbuod enu enartne elle ,a = 2z noitatce ffal tnauQ .s a c d n o c es e l s n a d 2 z n oi t a t c e f f a ; s a c r e i m er p e l s n a d 1 n n o i t a t c e f f a r u o p t n i n e n o i s r e v n o c : r i o v a s , n oi s s e r p x e l ed ruelav al ed tne merueirtlu tia f ert tiod iuq egasul ed tnadnepdni tse iceC .ruetarpo nu e s i m s n a r t e r t d t n a v a s e vi s s e c c u s s n o i s r e v n o c x u e d e s i m u o s t c n o d a i a e d r u e l a v a L .noisserpxel ed elbuod ep yt el emri fnoc 1z ruop ehci ffa ruelav a L
point double | | int | | | double | |___ + ___| | double

: a m h cs el t n a v i us ar e f es n o i t a ul a v l , t i a f n E . noisserpxed luclac nu snad eticilpmi erinam ed ervu ne esim siamaj tsen ,edut -ibahd e mmoc ,iuq te etnadargd ertd tiareuqsir iuq tni esab ed ep yt ertua nu ne elbuod
1

328

Les conversions de type dfinies par lutilisateur CHAPITRE 16