Anda di halaman 1dari 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

fct (a)

En cas de besoin, C++ peut ainsi mettre en uvre une chane de conversions, condition toutefois que celle-ci ne fasse intervenir quune seule C.D.U. (Conversion Dfinie par lUtilisateur). Plus prcisment, cette chane peut tre forme dau maximum trois conversions, savoir : une conversion standard, suivie dune C.D.U, suivie dune conversion standard

,elarng erinam enuD

.+ emrof al ed snoitcnof sed issua xue tnednopserroc esab ed sepyt sel rus sruetarpo sel euq rerdisnoc tiardua f li ,rueugir etuot nE .1
rotarepo

.a tejbo tec ed noitatce f fal ; tniop ep yt ed eriaropmet tejbo nud noitarc al : euqovorp noitcurtsni etteC : erirc snovuop suon ,tniop ep yt ed tse a is ,etnedcrp tniop essalc al ceva ,elpmexe raP .ruetcurtsnoc nu tne meticilpxe releppa tnemmoc uv jd snova suoN
a = point (12) ; a + 3.85

. e i ni f dr us n o it c n o f e n u d x i o h c e d s el le u tib a h se l gr s el sr o la ti are uqi lppa r ue ta lip m oc el ,) ic i s ac el s ap t ia t n iuq ec( re uq ilppa ruetarpol ed xiohc el tnanrecnoc tugibma enud tiassigas liS .elbuod ep yt ua tniop ep yt ud ressap ed tnettemrep snoisrevnoc ed senahc xued euq tiaf el snad edisr tugibma etteC . t u g i b m a d c its o n g a i d n u t n ass i nr u o f n e n o iss er p x e l es u f er l i , i cI
1

: n oi sr e v n o c e d s el b iss o p s a m h cs x u e d e d e c n es r p n e e v u ort es r u et al i p m o c e l ,s a c e c s n a D : )tniop ep yt ed tnat a ( euq ellet noisserpxe enu uaevuon ed snoisilitu suon euq snosoppuS : t s a c e d sr u et ar p o x ue d e d ei n u m s n o v al s u o n e u q si o f et te c t nas -oppus ne ,tniop essalc al ed elpmexel snonerpeR .ertarappa tnevuep stugib ma seniatrec ,snoisrevnoc ed enahc enu ecalp ne erttem ed etpecca ruetalip moc el o tne mom ud ritrap
operator int() operator double()

3.1 Exemple

3 Le constructeur pour la conversion type de base -> type classe


2.6 En cas dambigut
point double | | double | |____+____| | double

3 - Le constructeur pour la conversion type de base -> type classe

point double | | int | | | double | |___ + ___| | double

329

.tnemugra lues nu ceva leppa ert tuep li o tnemom ud ritrap ,tuafd rap sruelav sed tnaya stnemugra srueisulp ,ici sac el tsec emmoc ,tnemelleutnev uO .1

: ru e tc urt sn o c nu rap noisrevnoc ed stilibissop serimerp sec tnartsulli e mmargorp titep nu icioV .tcf simsnart srola tse iuq eriarop met tniop nu ne 4 reitnel ed noisrevnoc enu enartne : e uq le t lepp a n u : ep ytotorp ruop a tcf is ,noa f emm al eD . eri a f f a l tia f ruetcurtsnoc el ,icI .tniop ep yt ua tni ep yt ud ressap ed tnattemrep ,euqinu )snoisrevnoc e d e n a h c e n u er i o v( n o isr e v n o c e n u ets i x e l is e h cr e h c r u e t a li p m o c el , t e f f e n e er t n o c n er as : e u q t at l us r e m m e l t n e m e t c a x e e u q o v or p
a = 12 a = point (12) void fct (point) ; fct (4)

: n o i t a t c e f f a l , i s ni A . t n e m -eticilp mi leppa ert tnemelag tuep ruetcurtsnoc ec ,tsac ed ruetarpol emmoc tuot ,rO .essalc as ed ep yt el snad esab ed ep yt ec ed noisrevnoc enu esilar esab ed ep yt nud tnemugra lues nu ruetcurtsnoc tuot ,elarng erinam enuD .tniop nu ne 21 reitnel ed noisrevnoc al emirpxe
1

330

Les conversions de type dfinies par lutilisateur CHAPITRE 16

#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 << " en " << this << "\n" } point (const point & p) { x = p.x ; y = p.y ; cout << ":: constr. recopie de } } ; void fct (point p) { cout << "** appel fct " << "\n" ; }

: noisserpxel euq erid cnod tuep nO

point (12)

" << &p << " en " << this << "\n" ;

" << x << " " << y ;

// fonction simple // constructeur 0, 1 ou 2 arguments // constructeur de recopie

euq ici rerdisnoc tuep no ,te ffe nE .)non uo seini fdrus( snoitcno f sed soporp selleutibah snoisrevnoc sel tnanrecnoc selgr sel ici tniojer snoisrevnoc ed enahc ed tilibissop etteC : ) e x el p m o c e p y t e d t n at c ( e u q e ll et n o it at c e f f a e n u s n a d s a c el ar es e C exelpmoc >- elbuod >- tni : s n o isre v n oc ed enahc enu snad rinevretni tuep ruetcurtsnoc ec , elbuod >- tni eticilpmi noisrevnoc ed stil -ibissop sed unet etpmoc siaM .exelpmoc >- elbuod snoisrevnoc sed temrep ruetcurtsnoc noS
class complexe { double reel, imag ; public : complexe (double r = 0 ; double i = 0) ; ..... } c = 3 ; ++ ++ ++ ++ **

: exelpmoc essalc enud snoisopsid suon euq snosoppuS

. s us s e d- i c e m m o c t n e m e t c a x e e t n e s r p tiares es noit ucxeL .tcf noitcno f al ecner fr as ed noissi msnart al te tniop ne 4 ed n o isr e v n o c r a p u n e t b o e r i ar o p m e t t n i o p n u d n o i t a r c a l ti u d n o c t i a r u a l i ; t p e c c a t t i ar u a l e p p a e m m e c , ) & t n i o p t s n o c ( t c f d i o v n o i t a r a l c d a l c e v a , e h c n a v er n E . t e j er t t i a r u a ) 4 ( t c f l e p p a l , ) & t n i o p ( t c f d i o v e mr o f a l s u o s t cf r a l c d s n o i v a s u o n i S 2 .tne mugra euqahc ruop ervu ne sesi m snoisrevnoc ed senahc sel euq emm ed ,euqinu ert arved noitcno f etteC .7 ertipahc ud 3.01 ehpargarap ua sertnocner jd selgr sel tnavius are f es noitcno f ennob al ed xiohc el ,eini fdrus tse tcf is ,udnetne neiB 1

tniop > tni snoisrevnoc sed resilar ruop ruetcurtsnoc nud noitasilitU
construction construction construction construction appel fct point point point point 3 4 en 006AFDF0 12 0 en 006AFDE8 12 0 en 006AFDE0 4 0 en 006AFD88

3.2 Le constructeur dans une chane de conversions


se uqrameR
main() { void fct (point) ; point a(3,4) ; a = point (12) ; // appel explicite constructeur a = 12 ; // appel implicite fct(4) ; }

3 - Le constructeur pour la conversion type de base -> type classe

331

: 21 = a noitatcef fal snad e yolpme sap tsen nois -rev erinred ettec euq rertno m neib ed ni fa tniop >- tniop sac el snad issua siam ,tniop >tni sac el snad tnemelues non noitatce ffad ruetarpol ini fdrus snova suoN .tnavius e mmargorp el ertnom el emmoc ,ruetalipmoc el rap ici eisiohc ares iuq noitulos ednoces al cnod tseC
Les conversions dfinies par lutilisateur (cast ou constructeur) ne sont mises en uvre que lorsque cela est ncessaire.

: rehcnart ed temrep elgr enu ,tia f nE .tniop >- tni noitatce f fad ruetarpol resilitu ; tniop > - tniop noitatcef fa enud eivius ,ruetcurtsnoc el rap etre f fo tniop >- tni noisrevnoc al resilitu : ertne risiohc srola tiod ruetalipmoc el euq resnep tuep no ,sac el tse let iS .tniop nu tni nud noitatce ffad ruetarpod sap tiatsixen li ,1.3 ehpargarap ud : n o it a t c e f f a d e l p m e x e l s n a D
a = 12

. n o isr e v n o c a l e d t il i b as i a f a l t n a nr e c n o c n oi s ul c n o c e m m al ,s a c x u e d s e l s n a d , t i u d n o c e ll e o er u s e m a l s n a d , e t n a n g s a p ts e n ti li b iss o p e m m e n u d n o it at r p -retni elbuod etteC .exelpmoc ed ep ytotorp ud unet etpmoc ,elbuod ne itrevnoc tse 3 reitnel
332
Les conversions de type dfinies par lutilisateur CHAPITRE 16

3.3 Choix entre constructeur ou oprateur daffectation

#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 << " en " << this << "\n" ; } point & operator = (const point & p) // surdf. affectation point -> point { x = p.x ; y = p.y ; cout << "== affectation point --> point de " << &p << " en " << this ; return * this ; } point & operator = (const int n) // surdf. affectation int -> point { x = n ; y = 0 ; cout << "== affectation int --> point de " << x << " " << y << " en " << this << "\n" ; return * this ; } } ;

: etnelaviuq cnod ares iuq : euq ellet noisserpxe enu euqilppas emsinac m emm e L : etnelaviuq tse 3 + a noisserpxe erton euq tnemelag erid tuep nO
point int | | | point |___ + ___| | point operator + (a, point (3)) 5 + a

: noitautis al elutipacr tnavius a mhcs e L .tniop ep yt ud ares tatlusr e L .)+ rotarepo ed leppa rap( a ed ellec ceva eunetbo ruelav al ed noitiddal ; )r u e t c urt s n o c u d l e p p a r a p( t n i o p n e 3 r ei t n e l e d n o isr e v n o c e n u : er v u n e t e m r u e t al i p m o c e l ,s a c e c s n a d ,t e f f e n E . n o i t a ci f i n g is e n u a : euq ellet noisserpxe enu ,tniop ep yt ed tse a is ,snoitidnoc sec snaD
class point { int x, y ; public : point (int) ; friend point operator + (point, point) ; ..... } a + 3

: )erbmem noitcno f enud sac el snad tiaressap es iuq ec niol sulp uep nu snorrev suon( eima noitcno f enud emro f al suos inruo f noitiddad ruetarpo nud te reitne tne mugra nu ruetcurtsnoc nud einum tniop essalc enu snordisnoC

eriassecn is euq ervu ne sesim tnos en ruetasilitul rap seinifd snoisrevnoc seL
++ construction point 3 4 en 006AFDF0 == affectation int --> point de 12 0 en 006AFDF0

3.4 Emploi dun constructeur pour largir la signification dun oprateur

operator + (5, a)

main() { point a(3,4) ; a = 12 ; }

3 - Le constructeur pour la conversion type de base -> type classe

333

334

Les conversions de type dfinies par lutilisateur CHAPITRE 16

: reuqovd snonev suon euq stilibissop sel tnartsulli em margorp titep nu icioV . ecalp ne esi m ert up tiaruan eticilp mi noisrevnoc enucua ; tniop e p y t e d ert d sr o l a ti ar u a e d n ar p o r e i m er p n o s , t e f f e n E . er b m e m n o i t c n o f e n u r a p i ni f d t tiava + ruetarpo erton is emm ed lla sap tiares nen li ,sac reinred ec snad ,siofetuoT
#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" ; } friend point operator + (point, point) ; // point + point --> point void affiche () { cout << "Coordonnees : " << x << " " << y << "\n" ; } } ; point operator+ (point a, point b) { point r ; r.x = a.x + b.x ; r.y = a.y + b.y ; return r ; } main() { point a, b(9,4) ; a = b + 5 ; a.affiche() ; a = 2 + b ; b.affiche() ; } ++ construction point ++ construction point ++ construction point ++ construction point Coordonnes : 14 4 ++ construction point ++ construction point Coordonnes : 9 4 : : : : 0 9 5 0 0 4 0 0 : 2 0 : 0 0

.stejer tnores )

+ r u e t a r p o l e d n o i t a c i f i n gi s a l e d t n e m e s s i g r al

tn i

epyt ed tnat (
n

)a ( + rotarepo.n

uo

)a ( + rotarepo.5

euq slet sleppa seD .1

.) ! e l b a t p e c c a ar e s a r er u g i f y i u q t a o l f n e e l b u o d e d e cr o f n o i sr e v n o c a l e d t a t l u s r e l e u q t n a t u a r u o p s a p e i f i n g i s e n i u q e c( : r a p r u e t c u r ts n o c e l t n a a l p m er n e t i ar d n e i v e d e l e l l E . e l b i s s o p s a p t i a r e s e n e l b u o d n u d t e e x e l p m o c n u d n o i t i d d a l
class complexe { float reel, imag public : complexe (float v) ; friend complexe operator + (complexe, complexe) ; ..... } complexe (double v)

: i n i f d s n o i v a s u o n iS 3 . s e t n a ts n o c s e d s e c n er f r s e d c e v a t n or d n e i v e d er e l s e l l E . e c n er f r r a p s i m s n ar t t n os s e d n a r p o s e l is s e l b i ss o p s u l p t n or es e n s n o is r e v n o c s e c , er o c n e i c I .rahc nud uo trohs nu d ,gnol nud ,taolf nu d te exelpmoc nu d noitidda e l l e u q e tr o p m i n e d e m m e d a r i n e l i , s n o i sr e v n o c e d s t i l i b i s s o p s e d u n e t e t p m o C .) e t i a h u o s n o l e u q e l l e c n e i b ar e s e c i c i t e( n o i t a c i f i n g i s e n u sr o l a t n or u a e x el p m o c + e l b uo d e lbu o d + e xe lp m oc : e mr o f a l e d s n o i s s e r p x e s e L


class complexe { double reel, imag ; public : complexe (double v) { reel = v ; imag = 0 ; } friend complexe operator + (complexe, complexe) ; ..... }

: elbuod ep yt e d t nem ugra n u r uetc urtsnoc nu te se xelp moc xued ed e m mos a l r i n i f d e d , t e f f e n e , t i f f u s l I . ) e l b u o d e p y t e d sr u e l a v x u e d e d i c i s u t i t s n o c s s o p p u s( sexelp moc serb mo n ed essalc e nud iulec tse e uqitsirtcarac sulp el elpmexeL .set xim s n o i ss e r p x e s e d s n e s n u r e n n o d e d t e mr e p e l l e u qs i u p e l l e r n o i t a u t i s e n u s n a d s e c i v -res sdnarg ed er dner tuep sn oisre vnoc ed e na hc enu snad ruetcurtsnoc ud noitasilituL 2 . b + 2 = a s na d er iar o p me t t n i o p n u n e 2 e d u o 5 + b = a n oi ta tc e f fa l s n a d er iar o p m et tniop nu ne 5 ed noisrevnoc al resirotua ruop tsnoc fitaci filauq el riovrp ed eriassecn tse li ,sac ec snaD .rotarepo ed stnemugra sel ecner fr rap erttemsnart ed regasivne tuep nO 1

se uqrameR

3 - Le constructeur pour la conversion type de base -> type classe

335

: exelpmoc ep yt ed tejbo nu ne tniop ep yt ed tejbo nud snoisrevnoc sed temrep tniop essalc al ed exelpmoc ruetarpol : noitautis erimerp al ertsulli tnavius em margorp e L

. A ne B ed noisrevnoc enu esilar B ep yt ed tnemugra nu tnavecer A essalc al ed ruetcurtsnoc nU . B e ssa lc e d e p yt er t u a n u d A e p yt el snad noisrevnoc al tnasilar tsac ed ruetarpo nu rini fd tuep no ,A essalc enud nies uA : is ni a t n es i l ar n g e s reidutd snonev suon euq essalc ep yt nu ne esab ed ep yt nud snoisrevnoc ed stilibissop se L

: s n a d e m m o c , e ti ci l p x e l e p p a n u r a p er i a f es sr u o j u o t t i arr u o p n o isr e v n o c a l , e h c n a v er n E
a = 12 ; // illgal car le constructeur possde le qualificatif explicit a = b + 5 ; // idem

: )tniop ep yt ed tnat b te a( setejer tneiares setnavius snoitcurtsni sel


class point { public : explicit point (int) ; friend operator + (point, point) ; ..... }

: c e v a , e l p m e x e r a P . n o it ar -alcd as ed srol ticilpxe lc tom el tnasilitu ne )enahc ne uo selpmis( seticilpmi snoisrevnoc sed snad ruetcurtsnoc ud noitasilitul eridretni essiup nouq tiovrp ++C ed ISNA emron a L

336

4.1 Exemple simple doprateur de cast

4 Les conversions dun type classe en un autre type classe

3.5 Interdire les conversions implicites par le constructeur : le rle dexplicit

Les conversions de type dfinies par lutilisateur CHAPITRE 16

class point { int x, y ; #include <iostream> using namespace std ; class complexe ; a = point (3) ; // OK : conversion explicite par le constructeur a = b + point (5) ; // idem

4 - Les conversions dun type classe en un autre type classe

337

public : point (int abs=0, int ord=0) {x=abs ; y=ord ; } operator complexe () ; // conversion point --> complexe } ; class complexe { double reel, imag ; public : complexe (double r=0, double i=0) { reel=r ; imag=i ; } friend point::operator complexe () ; void affiche () { cout << reel << " + " << imag <<"i\n" ; } } ; point::operator complexe () { complexe r ; r.reel=x ; r.imag=y ; cout << "cast "<<x<<" "<<y<<" en "<<r.reel<<" + "<<r.imag<<"i\n" ; return r ; } main() { point a(2,5) ; complexe c ; c = (complexe) a ; c.affiche () ; point b (9,12) ; c = b ; c.affiche () ; } cast 2 5 en 2 + 5i 2 + 5i cast 9 12 en 9 + 12i 9 + 12i

// conversion explicite // conversion implicite

4.2 Exemple de conversion par un constructeur


: ex elpmoc ep yt ed tejbo nu ne tniop ep yt ed tejbo nud snoisrevnoc sed resilar ed noa f ertua enu etnes -rper )tniop( exelpmoc ruetcurtsnoc el : noitautis ednoces al ertsulli tnavius e mmargorp e L

.erinam ettec ed rini fd zevuop suov euq snoisrevnoc sed tilauq al ed eguj lues ess i a l s u o v + + C , u d n e t n e n ei b si a M . et n a d ar g d n o n , n o a f et u ot e d ,t e e l l er ut a n z ess a ts e ,ler ne sreitne xued ed noisrevnoc al ici etnelaviuq ,exelpmoc > tniop noisrevnoc a L

exelpmoc >- tniop snoisrevnoc sed ruop tsac ed ruetarpo nud noitasilitud elpmexE
e uqrameR

.) e c r u o s r e i h c i f e m m e l s n a d t n er u g i f s e l l e i s s ir p m o c y , e m l b o r p s n as s e l i p -m oc tnores B te A sessalc sel ,reilucitrap ne( ritnes sap tia f es en n oisre vnoc ellet enu d n i os e b e l e u q t n a t e h c a c r e t s er t u e p e i l a m o n a e l l e t e n u u q t n a d n e p e c r e l a n g i s t u a f l I . er i a s s e c n t i a r es B n e A e d n o i sr e v n o c e n u u q s d t u g i b m a e n u r e l e c d r u e t a l i p m o c e l t i a r i u d n o c a l e c , t e f f e n E . A s n a d ) ( B t s a c n u t e B s n a d ) A( B r u e t c ur t s n o c n u s i o f a l t n a y o v r p n e B > A n o is r e v n o c e m m a l t n e m n a t l u m is r i n i f d e d e l b is s o p s a p t s e n l I 3 .)( B t s a c e d r u e t ar p o n u A s n a d r e c a l p u o ) A( B r u e t c ur t s n o c n u B s n a d r e c a l p er t n e x i o h c e l s n o v a s u o n ,) s e ss a l c x u e d t n os B t e A o( B > A s n o i sr e v n o c s el r u o p , e h c n a v er n E . e ss a l c a l e d n i e s u a ir p or p p a r u e t c ur t s n o c n u r i o v r p t i a t s i s n o c e tr e f f o t i a t s u o n i u q t i l i b i s s o p e l u e s a l , e ss a l c e n u n e e s a b e d e p y t n u d s n o isr e v n o c s e l e nr e c n o c i u q e c n E 2 .)exelpmoc( tniop emrof al ed ruetcurt -snoc nu tniop essalc al snad eriudortni up snoirua suon ,elp mexe raP .ici neib issua tuot euqilppas snoisrevnoc sed tilauq al ed soporp tnem medcrp etia f euqra mer a L 1

se uqrameR

exelpmoc > tniop snoisrevnoc sed ruop ruetcurtsnoc nud noitasilitud elpmexE
3 + 5i

338

Les conversions de type dfinies par lutilisateur CHAPITRE 16

main() { point a(3,5) ; complexe c (a) ; c.affiche () ; } #include <iostream> using namespace std ; class point ; class complexe { double reel, imag ; public : complexe (double r=0, double i=0) { reel=r ; imag=i ; } complexe (point) ; void affiche () { cout << reel << " + " << imag << "i\n" ; } } ; class point { int x, y ; public : point (int abs=0, int ord=0) { x=abs ; y=ord ; } friend complexe::complexe (point) ; } ; complexe::complexe (point p) { reel = p.x ; imag = p.y ; }

.erbmem noitcnof enu ceva stilibissop semm sel sap tiardneitbon no : tnatropmi tse tniop ec euq snorrev suoN .1
#include <iostream> using namespace std ; class complexe ; class point { int x, y ; public : point (int abs=0, int ord=0) { x=abs ; y=ord ; } operator complexe () ; void affiche () { cout << "point : " << x << " " << y << "\n" ; } } ;

: stilibissop sec tnartsulli e mmargorp ed telpmoc elpmexe nu icioV


point point | | complexe complexe |____ + ____| | complexe complexe point | | | complexe |___ + ___| | complexe

: a m h cs e l t n a vi us e ul a v t e
operator + (a, b) a + b x + a
1

: etnelaviuq tse elle ,tniop ep yt ed tnos b te a o : noisserpxel tnauQ . x + a noisserpxel euqilppas tne mennosiar emm e L : etnelaviuq tia f ne tse a + x noisserpxel euq erid tuep nO .+rotarepo etnadnepdni noitcnof al rap ini fdrus + ruetarpol rinevretni tiaf ic-iuleC
operator + (x, a)

: a m h cs el t n av i us n o isserp xe e t te c re u la v tiudnoc tse ruetalip moc el ,).U.D.C enud sulp sap tnanetnoc en snoisrevnoc ed euqinu enahc enud ervu ne esi m( seini fdrus snoitcno f xua sevitaler selleutibah selgr sed unet etp moC : noisserpxel snordisnoc te exelpmoc ep yt ed x ,tniop ep yt e d a s n o s o p p u S . ) ( e x e l p m o c t s a c ed r u et ar p o nu d ei n u m t n i o p e s s a l c e n u u q i s n i a , e i m a n o i t c n o f e n u r a p i n i f d r u s t a + r u e t a r p o l e l l e u q a l r u o p e x e l p m o c e ss a l c e n u s n or d is n o C

4.3 Pour donner une signification un oprateur dfini dans une autre classe
4 - Les conversions dun type classe en un autre type classe

339

: e p y t o t or p e d e r b m e m n o i t c n o f e n u r a p i n i f d t t i a v a e x e l p m o c es s a l c a l e d + r u e t ar p o l i S 2 . t n a d ar g d t c e ps a n o s e d r e i l u c i tr a p n e t e , n o i t a r p o e l l e t e n u d n o i t a c i f i n g i s a l e d t n e m e l l u n e g u j r p e n a l e c , u d n e t n e n e i B . ) e x e l p m o c ( t n i o p e mr o f a l e d r u e t c u r ts n o c n u t n i o p e s s a l c a l s n a d er i u d or t n i d e l p m e x e r a p t i ar i f f u s l i , e l b i s s o p t i o s a l e c e u q r u o P . t n i o p n e ) b + a n o is s erp xe l e d e p y t( e x e l p m o c e d n o is r e v n o c e d s ap e ts i x e n l i r a c : er ir c d e l b i s s o p s a p t s e n l i : erircd ici elbissop tnemevitce ffe tse liS 1


y = a + b c = a + b

se uqrameR

exelpmoc essalc al ed + ruetarpol ed noitacifingis al ed tnemessigral


6.5 + 6.8i 6.5 + 6.8i 10 + 13i

340

Les conversions de type dfinies par lutilisateur CHAPITRE 16

} main() { point a(3,4), b(7,9), complexe x(3.5,2.8), y = x + a ; y.affiche y = a + x ; y.affiche y = a + b ; y.affiche class complexe { double reel, imag ; public : complexe (double r=0, double i=0) { reel=r ; imag=i ; } void affiche () { cout << reel << " + " << imag << "i \n" ; } friend point::operator complexe () ; friend complexe operator + (complexe, complexe) ; } ; point::operator complexe () { complexe r ; r.reel = x ; r.imag = y ; return r ; } complexe operator + (complexe a, complexe b) { complexe r ; r.reel = a.reel + b.reel ; r.imag = a.imag + b.imag ; return r ; } c ; y ; () ; () ; () ; // // // // // marcherait encore si + tait fct membre ne marcherait pas si + tait fonction membre ne marcherait pas si + tait fonction membre (voir remarque) N.B. : c = a + b naurait pas de sens ici

.erbmem noitcnof enu tnaleppa tejbol rus ueil riova tuep en eticilpmi noisrevnoc enucuA .1

.).cte ,- ,+( sruetarpod erb mon niatrec nu ini fdrus tnem -e l ba b or p ar ua n o s el le u qs el s na d , e u qi ta m h ta m n oi ta t o n n o c e tr o f e n u t n a y a ses sa lc s e d seticilp mi snoisrevnoc ed stilibissop sec revresr trtni arua no ,elarng erina m enuD . tsac e d r u et arp od er i ud - ort n i sa p e n e d te t i c i l p x e c e v a sr u et c urts n o c s e l s u o t r e i fi l a u q e d ar i f f u s l i : s es s a l c x u a s e v -italer seticilpmi snoisrevnoc sed egasul ertnoc tne melatot regtorp es ed elbissop cnod tse lI .ticilpxe lc to m ua leppa tnasiaf ne nois -revnoc enu snad ruetcurtsnoc ud eticilp mi egasul eridretni tuep essalc enud ruetpecnoc el ; essalc al ed ruetpecnoc el rap tne mrbild tiudortni ert tiod tsac ed ruetarpol : e uq r i o v ne ib tu a f li , ti a f nE . t i a h u os ti al en senrecnoc sessalc sed ruetpecnoc el euq snas ecalp ne sesim tneios snoisrevnoc seniatrec euq erd n iar c res si al t uep e sse h cir el le t e nU .se h cir ) ! p ort( sr t s ni o m sap tn et ser ne n s el lE . el it u t s e e l l e i s e u q e r v u n e e si m t s e n . U . D . C al euq te )dradnats ,.U.D.C ,dradnats( snoisrevnoc siort mu mixa m uad enahc enu set - i m il t n os s e ll e u qs i u p , s e i ni f ni s a p s e tr e c t n o s e n s e t i c il p m i s n o isr e v n o c e d s ti li b iss o p s e L

. n o i t a l i p m o c e d r u e rr e e n u t n es i u d n o c b + a t e x + a , a + x s n o is s er p x e s i or t s e l , e t t - n e l s n a d n o i t a r a l c d r u 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 u v r p s a p a n n o l i s , s a c e c s n a D . e c n e r f r r a p +r o t ar e p o e d s t n e m u gr a s e l er t t e ms n a r t e d r e g as i v n e t u e p n O 4 .s e r b m e m s n o i t c n o f s e d r a p s i n i f dr us sr u o j u o t t n e i o s > - t e ) ( ,] [ , = sr u e t a r p o s e l e u q e s o p m i + + C e u q n o s i ar e t t e c r u o p sr u e l l i a d t s e C . e t i c i l p m i n o isr e v n o c e n u r a p r c , e p y t e r t u a n u d e r i ar o p m e t ) e l b a i r a v e n u u o ( t e j b o n u r us s i a m , nr e c n o c t e j b o l r u s s a p n o n r i g a r u e t ar p o t e c r i o v e d e u qs i r n o , t e f f e n e , e r i ar t n o c s a c e l s n a D . er b m e m n o i t c n o f e n u er i a f n e d e l b a r f r p t s e l i ,) t e j b o n u er t s o p p us ( e d n ar -po rei merp nos ei fi do m ruetarpo n u is ,reilucitrap nE .ei ma n oitc no f e nud emro f al s u o s r u e t ar p o n u r i n i f d e d e l p m e x e t e c s n a d e u q x u e g a t n a v a i ss u a sr u o j u o t s a p t s e n l I 3
1

: e m m o c e u l a v er t t n e m e t c err o c u p t i ar u a a + x n o i s s er p x e l , e h c n a v e r n E .s i mr e p t s a p t i ar u a n a l e C : e u q e r t u p t i ar u a n + r o t a r e p o e d l e p p a l , s a c r e i m er p e l s n a d , t e f f e n E . b + a e u q s u l p s a p , s n es e d u e s a p t i a r u a n x + a n o i s s e r p x e l
complexe complexe::operator + (complexe) ; a.operator + (x)

5 Quelques conseils
x.operator + (a)

5 - Quelques conseils

341

.)sexelpmoc xued ed ellec( noitiddad ruetarpo lues nuuq rini fd en ruop set -icilp mi snoisrevnoc ed stilibissop sed retiforp ed cnod te sexelpmoc xued ed ellec euq taolf nud te exelpmoc nud e mmos al neib issua resilar riovuop ed lerutan tarap li ,e m m eD .cte ,)taolf ed siaib el rap( exelpmoc ne tni ed ,exelpmoc ne taolf ed ,taolf ne exelp -moc ed snoisrevnoc ed resopsid ed lerutan tarap li ,sac ec snaD .)ertipahc ec snad ertnoc -ner snova suon euq( exelpmoc essalc al ed iulec tnemeniatrec tse euqissalc sulp el elpmexeL
342
Les conversions de type dfinies par lutilisateur CHAPITRE 16

...nortap essalc enud sessalc ed nortap nu uo nortap noitcnof enud snoitcno f ed nortap nu ,eriaf el sne ma snores suon e mmoc ,reugnit -sid ed elici ffid tse li ,sac ec snad ,siam etalp met sessalc ed uo etalpmet snoitcno f ed srola elrap nO .nortap ed iulec ed ueil ua etalpmet sialgna e mret el tnevuos ertnocner nO .B.N .nortap nud snoitcno f sed srueisulp uo enu tnasilaicps ne seni ffa ert erocne tnevuep stilibissop sec setuot euq snorrev suon ,ni fnE .inifdrus ert ,ruot nos ,tuep snoitcno f ed nortap nu tnem moc snorertnom suon siuP . snoisserpxe sert marap sed rinevretni eria f tnemelag tuep nouq te sertmarap ed euqnocleuq erbmon nu esilar -ng es elleuq etiusne snorrev suoN . ep yt ed ert marap lues nuuq rinevretni tnasia f en el p m is el p me xe n u d ri tra p n o i t o n el le v u o n e tt ec r et n esr p s u o v ra p s n ore c ne m m oc s u o N .emhtirogla emm ua cnod ,noitini fd emm al erdnopserroc tneviod ruetalip - m o c e l rap s e uqirb a f is n ia s n o it c no f s e l se t uo t euqs i up e v it cir tser s u lp ; ep yt le uq etr op m in retpadal tnemeuqitamotua essiup ruetalipmoc el euq ruop noitcnof enud noitini fd al siof el ue s e nu er irc d ti f f us l i r ac e t nas si up su lp ; e vi tc irts er su lp te e t na ssi up s ulp si o f a l tse ,emron al rap etiudortni ,) noitcno f ed eldo m ed uo euqirng noitcno f ed issua elrap no( snoitcno f ed nortap ed noiton a L .tner ffid liavart nu tnasilar snoitcno f srueisulp euqinu mon nu rennod ed tiattemrep snoitcno f ed noitini fdrus al euq uv jd snova suoN

Les patrons de fonctions

17

.ellesrevinu noitnevnoc enud tnemenucua tigas en li siam ; snoitcnof sel ruop tnemugra emret el te snortap sel ruop ertmarap emret el reyolpmed unevnoc snova suon ,ici ; tnemugra uO .1

lc-to m el re yolpmed dicd a ++C euq zetoN .T m mon ep yt ed ertmarap nu tarappa leuqel snad )etalpmet( nortap nu eria ffa a nol euq esicrp >T ssalc< etalpmet noitnem a L
1

: ) is ni a sruojuot sap ari nen li( gnahc a noitcnof erton ed ett-nel lues ,zetatsnoc el suov e mmoC
snoitcnof ed nortap nud noitarC
// cration dun template <class T> T { if (a < b) return else return } patron de fonctions min (T a, T b) a ; // ou return a < b ? a : b ; b ;

: et n a v i u s er i n a m al e d , s n o i t c n o f e d nortap lues nu tnassini fd ne sesohc sel tne melbardisnoc reifilp mis snovuop suon ,tia f nE . i f i d o m ert n e m a ti ar es nr e c n o c e p yt e l l u es , t e f f e n E .s er t u a s e d s e n u s e l s e h c or p s r t s n o i ti ni f d s es u er b m o n e d er ir c is ni a s n o ir u a s u o N
float min (float a, float b) { if (a < b) return a ; // ou return a < b ? a : b ; else return b ; }

: ) e r i a f t r t n i tuot snova suon euq ec ,nim mon e m m el snoinnod iul suon euq tnasoppus ne( erid--tsec ,taolf ep yt el ruop noitini fd ertua enu erirc tnemelbaborp tiardua f suon li ,udnetne neiB

: tn i ep yt el ruop noitini fd enu erirc snoirruop suoN .stnemugra ne seuer ep yt e m m ed sruelav x ue d e d m u m i n i m e l t nass i nr u o f n o it c n o f e n u erir c d ni os e b s n o ya s u o n e u q s n os o p p u S

344

1.1 Cration dun patron de fonctions

1 Exemple de cration et dutilisation dun patron de fonctions

Les patrons de fonctions CHAPITRE 17

template <class T> T min (T a, T b) int min (int a, int b) { if (a < b) return a ; else return b ; }

// ou return a < b ? a : b ;

.ennod ecnatsni enu ruop nortap noitcnof ,euqirng noitcnof al ruop noitcnof ed nortap : erialubacov ua noitnettA .1
}

: alec tnartsulli telp moc elp mexe nu icioV .nim ed noitasilitu euqnocleuq enu tnava tnessiarappa setnedcrp snoitcurtsni sel euq tid tnemertua ,noitseuq ne nortap u d n o it i ni f d a l e d e s o ps i d r u et a li p m o c e l e u q er i ass e c n ts e l i , er d n et t a ys t u e p n o e m m o C .etius ed isnia te , taolf ep yt ed stnemugra sed tnadnopserroc nim nortap noitcnof ertua enu tnemeuqita motua areuqirba f ruetalipmoc el ,taolf ep yt ed stnemugra xued ceva nim snoleppa suon iS .tni ep yt ed stne mugra sed tnadnopserroc ) nortap noitcno f etid( nim noitcno f al tnemeuqitamotua ) areicnatsni issua tid no( areuqirba f ruetalip moc el ,)p ,n( nim noisserpxel rinevretni snosia f suon ,tni ep yt ed tnos p te n leuqel snad em margorp nu snad is ,isniA .)ep yt e m m ed stnemugra xued ici erid--tsec( seirporppa snoitidnoc sed snad nim noitcnof al resilitud ti ffus li ,rerc ed snonev suon euq nim nortap el resilitu ruoP
1

.s a c e c s n a d s s a l c l c - t o m e l r e s i l i t u d t n e u n i t n o c s e m m ar g o r p s e d t r a p u l p a l e u q t i a f e v i dr a t e v i rr a n os , t n a d n e p e C : noitini fd al snad ssalc reutitbus es tuep iuq emanepyt lc tom el tiudortni a emron a L .non uo essalc ,euqnocleuq ep yt nu tia f ne reuqidni ruop ssalc lc tom el esilitu no ,nortap nud noitinifd al snaD
template <typename T> T min (T a, T b) { ..... } // idem template <class T>

. ep yt e m m ud tatlusr nu tnassinruo f te T ep yt ed stne mugra xued tnavecer noitcnof enu tse nim euq esicrp : e t t- n el e d e ts er e L .euqnocleuq ep yt nu etnesrper T ,noitcno f erton ed noitinifd al snad ,tid tnem -ertuA .)! epyt lc to m el r frp tiarua no( ep yt ed ertmarap nu tse T euq resicrp ruop ssalc
345
T min (T a, T b)

1.2 Premires utilisations du patron de fonctions

// cration dun patron de fonctions template <class T> T min (T a, T b) { if (a < b) return a ; // ou return a < b ? a : b ; else return b ; using namespace std ; #include <iostream>

e uqrameR

1 - Exemple de cration et dutilisation dun patron de fonctions

* rahc epyt ua ni m nortap ud noitacilppA


min (adr1, adr2) = monsieur

: C el yts ed senahc sed rus tnatrop noit -cno f enu reuqirba f ruop nim nortap el snotiolpxe suon leuqel snad elpmexe reimerp nu icioV . ess a l c e p y t e d s t n e m u gr a ; * r a h c e p y t e d s t n e m u gr a : s e si c r p s n o it a ut is x u e d l i a t d n e s u l p s n o n i m a x E .)* tni ,* tni( nim * tni noitcno f enu reicnatsni ruetalipmoc el tiudnoc )p & ,n &( nim euq let leppa nu ,tni ep yt ed tnos p te n is ,elpmexe raP .)e ssa lc uo er u tc urt s tn e m ma t on( ru et as il it u l rap ini fd ep yt nud uo ).cte ,* * tni ,* rahc ,* tni ,elbuod ,rahc ,trohs( ini fdrp ep yt nud essigas liuq ,epyt leuq etropmin ed stne mugra sed ruop silitu ert tuep nim nortap e L
1.3.1 Application au type char *

snoitcnof ed nortap nud noitasilitu te noitinifD


min (n, p) = 4 min (x, y) = 2.5

346

1.3 Autres utilisations du patron de fonctions

Les patrons de fonctions CHAPITRE 17

#include <iostream> using namespace std ; template <class T> T min (T a, T b) { if (a < b) return a ; // ou return a < b ? a : b ; else return b ; } main() { char * adr1 = "monsieur", * adr2 = "bonjour" ; cout << "min (adr1, adr2) = " << min (adr1, adr2) ; } // exemple dutilisation du patron de fonctions min main() { int n=4, p=12 ; float x=2.5, y=3.25 ; cout << "min (n, p) = " << min (n, p) << "\n" ; // int min(int, int) cout << "min (x, y) = " << min (x, y) << "\n" ; // float min (float, float) }

t c e v e s s a l c a l r u o p n i m n o r t a p u d n oi t a si l i t U
min (u, v) = 3 2

: sruetcev sed eludom el rus sab tatlusr nu tnassinruo f < ruetarpo nud einum essalc ,tcev ep yt ed stejbo xued nim snouqilppa suon leuqel snad elp mexe nu icioV .essalc ep yt ec ed sednarpo xued reuqilppas essiup < ruetarpol euq eriassecn rs neib tse li ,essalc enu nim nortap el reuqilppa riovuop ruoP . sess er da se c s e u tis senahc sel rus sia m ,sesserda sec rus sulp non etrop << ruetarpol rap unetbo egahci ffal ,ehcnaver nE .)snoitatnemlpmi sertuad snad tne mertua rella ne tuep li siam ,b rueir fni tiat a ,ici( stne mugra ne suer sruetniop sed sruelav sel rus cnod etrop b<a nosiarapmoc a L
char * min (char * a, char * b) { if (a < b) return a ; else return b ; }

: et n a vi us n o it c n o f a l r n g a r u e t a l i p m o c e l , ) 2 r d a , 1 r d a ( n i m n o iss er p x e l e d er t n o c n er a l ,t i a f n E . "r u oj -nob " enahc al essinruo f nim euq ec zeidnetta suov suov is ,erdnerprus tuep tatlusr e L
347

1.3.2 Application un type classe

#include <iostream> using namespace std ; // le patron de fonctions min template <class T> T min (T a, T b) { if (a < b) return a ; else return b ; } // la classe vect class vect { int x, y ; public : vect (int abs=0, int ord=0) { x=abs ; y=ord; } void affiche () { cout << x << " " << y ; } friend int operator < (vect, vect) ; } ; int operator < (vect a, vect b) { return a.x*a.x + a.y*a.y < b.x*b.x + b.y*b.y ; } // un exemple dutilisation de min main() { vect u (3, 2), v (4, 1), w ; w = min (u, v) ; cout << "min (u, v) = " ; w.affiche() ; }

1 - Exemple de cration et dutilisation dun patron de fonctions

. s n or t a p e d s n o i t i n i f d s e d n o i t a l i p m o c r p e d e t r o s e n u u e j n e t e m s n or t a p s e d n o i t a t r o p x e d e ms i n a c m e c e u q ar e t o n n O . n o i t a s i l i t u n os s n a d u o , n or t a p u d n o i t i n -i fd al snad ,reimerp el erulcni t nolov arruop nO . noitini fd al ruop nu ,noitaralc d a l r u o p n u , s t c n i t s i d e t t - n e s r e i h c i f x u e d r i o v r p t r t n i sr o l a a r u a n o , e u q i t ar p n E


template <class T> T min (T a, T b) ; // dclaration seule de min ..... min (x, y) export template <class T> T min (T a, T b) { if (a < b) return a ; // ou return a < b ? a : b ; else return b ; }

: ) n o i t i n i f d e n u d s u l p n o n t e n o i t ar a l c d e l b a t ir v e n u d n e i b t i g a s l i ,s i o f e t t e c( n o i t ar a l c d as r e n n o i t - n e m e d t n a t n e t n o c e s n e , e c r u o s r e i h c i f er t u a n u s i u p e d n or t a p e c r es i l i t u sr o l a t u e p n o

: 1.1 ehpargarap ud nim snoit - c n o f e d n or t a p ert o n is ni a t n a v ir c n e , e l p m e x e r a P . e cr u os r e i h c i f er t u a n u s i u p e d e l b -issecca ares ic-ellec euq esicrp li ,nortap nud noitini fd al uqilppA . tropxe lc-tom el t i u d ort n i a e mr o n a l e u q t i a f e l r a p s e r d n o p er t t n e v i o d s et n e d c r p s n o it ar d is n o c s e L

e uqrameR

. h n o is n e t x e d irporppa reihci f nu snad snortap ed snoitini fd sel arecalp no ,euqitarp nE . nortap n u d n oi ti n i f d e d r elr a p s n or e u ni t n o c s u o n , e t i u s al r a P .s ess a l c e d s n or t a p s e l r u o p en monhp e m m el arevuorter nO .snoitaralcd ed xuaevin xued tneiassiarappa ,snoitcno f ed nortap ed noiton al ceva ,is em moc tia f ne essap es tuoT .snoitcnof ed nortap nu tnadnop -serroc tejbo eludom nu rerc ed elbissop sap tsen li te ,eriassecn sruojuot tse ecnesrp ruel : snoitaralcd sed cnod tnos ec ,snes ec ne ; esiuqer noitcno f al tnadnopserroc snoitcurtsni sel ,eriassecn tse liuq sio f euqahc ,)reicnatsni( reuqirba f ruop ruetalipmoc el rap sesilitu t n os s n oi t c ur ts ni s e c e u q ti a f s n or t a p s e d e m m e msi n a c m el ,s ni o m n a N . n oi t c n o f e d n o it i n - i f d e d s el b a t u c x e s n oi t c ur ts ni s e d t n e l b m ess er n ort a p n u d n o it i ni f d e d s n o it c urts n i s e L

. ert i p a h c niahcorp el snad selp mexe sed snorrev ne suoN .sessalc ed nortap nu rap icnatsni essalc ed ep yt nu erid--tsec ,snortap sessalc sed reuqilppas arruop snoitcno f ed nortap nU

.ep yt ec ruop nim noitcnof al semm-suon tirc snoiva suon is euq erinam emm al ed tnemetcaxe arelangis el ruetalipmoc el ,ini fd sap tsen < ruetarpol elleuqal ruop essalc enu nim nortap erton reuqilppa snohcrehc suon is ,tne mellerutaN
348
Les patrons de fonctions CHAPITRE 17

1.4 Contraintes dutilisation dun patron


e uqrameR

.noitcnof ellevuon enud noitaicnatsni euqahc selbatucxe snoitcurtsni sed ecnassian tnorennod snoitcurtsni sec ,rueugir etuot nE .)noitaralcd enu tse nortap nud noitinifd al euqsiup( snoitaralcd ed sruojuot essigas liuq neib ,selbatucxe snoitcurtsnid snolrap suoN .3 .snoitaralcd ed nies ua snoitaralcd ed tnemelanif erid--tsec ,nortap ud noitinifd al ed nies ua snoitaralcd ed srola tigas lI .2 .noitcnof enud noitinifd al snad rinevretni tuep epyt ed mon nuuq erinam emm al eD .1
template <class T, class U> fct (T a, T * b, U c) { T x ; // variable locale x de type T U * adr ; // variable locale adr de type U * ... adr = new T [10] ; // allocation tableau de 10 lments de type T ... n = sizeof (T) ; ... }
3 2

: e l p m e x e n u i ci o v n E .))...( foezis ,wen elpmexe rap( selbatucxe snoitcurtsni sel snad ; )sert marap sed sep yt sed nul ed( selacol selbairav ed snoitaralcd sed snad ; )stnedcrp selpmexe sed sac el tiatc( ett-nel snad : nortap nud noitini fd al ed tiordne leuq etrop min rinevretni tnevuep sert marap seC
1

: elpmexe rap ssalc lc-tom ud dcrp ert tnaved nucahc ,ep yt ed sertmarap srueisulp uo nu retropmoc cnod tuep snoitcno f ed nortap nU

. t na vi us ehpargarap ua sidut tnores slI .noitcno f enud tne mugrad elleusu noiton al tia f ne tned -nopserroc iuq , snoisserpxe sert marap sed e mmon nol euq ec retrop moc tnemelag tuep snoitcno f ed nortap nuuq zetoN .resop tuep liuq sreilucitrap se mlborp sel rus te ,euluov n oi t c n o f a l r ei c n a ts ni d r u e t a li p m o c u a t e mr e p i u q e m ht ir o g l a l r u s ,s n oi t c n o f e d n or t a p n u snad rinevretni tnevuep ep yt ed sert marap sel tnod erinam al rus tniop el tia f ehpargarap eC

2.1 Utilisation des paramtres de type dans la dfinition dun patron

2 Les paramtres de type dun patron de fonctions

template <class T, class U> fct (T a, T * b, U c) { ... }

2 - Les paramtres de type dun patron de fonctions

349

: setnedcrp snoitaralcd sel tnasilitu selp mexe seuqleuq icioV .nortap ud leppal ed tnemo m ua ep yt ed sertmarap srueisulp uo nu rei ficps esirotua suov ++C ,t e f f e n E . e p y t e d n o it a c i fi t n e d i d e ms i n a c m e c r u s r i n e vr e t ni d e l biss o p t n a d n e p e c ts e l I
int n ; char c ; unsigned int q ; const int ci1 = 10, ci2 = 12 ; int t[10] ; int * adi ; ... min (n, c) // erreur min (n, q) // erreur min (n, ci1) // erreur : const int et int ne correspondent pas min (ci1, ci2) // min (const int, const int) min (t, adi) // min (int *, int *) car ici, t est converti // en int *, avant appel

: tcerroc tse leppal euq -srol eicnatsni noitcno f al ares elleuq tnesicrp iuq nim ed sleppad selpmexe seuqleuq icioV . t n e n n e i v r e t n i e li t al o v u o t s n o c sr u ei f il a u q s l e u t n e v s e l , e u l -osba ecnadnopserroc ettec snad ,euq areton nO .noitalip moc ed ruerre enu tnorituoba iuq ,sleppa xued son snad sac el sap tsen ec ,tne metse finaM .epyt emm el tno stnemugra xued sel sleuqsel snad sleppa sed ruop euq nim nortap el resilitu snovuop en suon euq ei fingis aleC .s e p y t s e d e u l o s b a e c n a d n o p s e r r o c ri o v a y t i o d li u q ts e s a c e c s n a d + + C r a p e u v r p el g r al ,tiaf nE ? )n,c(nim uo )c,n( nim euq let leppa nud ecnesrp ne ruetalipmoc el eria f av euQ : snoitaralcd sec ceva
template <class T> T min (T a, T b) { if (a < b) return a ; else return b ; } int n ; char c ;

: n i m n ort a p el s n o n er p er ,si a M . n n o d l e p p a n u r u o p e i c n at s n i n o it c n o f a l tiat elleuq enived nol euq ruop selpmis tne mmasi ffus tneiat stnedcrp selpmexe se L

- i g o l t n e m e ti a fr a p ts e n oi ti d n o c e tt e c ,s n orr e v el s u o n e m m o c ; n or t a p u d e t t - n e l s n a d s i o f enu sniom ua essiarappa epyt ed ertmarap euqahc euq eriassecn tse li ,sac sel suot snaD
350
Les patrons de fonctions CHAPITRE 17

. eri ass ec n n oi tc n o f al t ne me tc erro c r ei c na ts ni d er use m ne tse ruetalip moc el euq stne mugra sec ed erutan al ecrg tnemsicrp tsec euqsiup euq

2.2 Identification des paramtres de type dune fonction patron

/* force /* de c min<char> (q, n) /* force /* de q min<int> (c, n)

lutilisation de min<int>, et donc la conversion en int ; le rsultat sera de type int lutilisation de min<char>, et donc la conversion et de n en char ; le rsultat sera de type char

*/ */ */ */

: e t na vi us noitcno f al erng ruetalip moc el ,tni elpmexe rap ,dradnats ep yt nu ruop resilitul ehcrehc nol is ,ehcnaver nE .neib av tuot ,essalc ep yt nu ruop tcf noitcno f enu esilitu nol euq tnaT
template <class T> fct (T a) { T x (3) ; // x est un objet local de type T quon construit // en transmettant la valeur 3 son constructeur // ... } fct<int,float> (n, p, x) // // fct<float> (n, p, x ) // // // // template <class T, class U> T fct (T x, U { return x + y + z ; } main () { int n = 1, p = 2, q = 3 ; float x = 2.5, y = 5.0 ; cout << fct (n, x, p) << "\n" ; // cout << fct (x, n, y) << "\n" ; // cout << fct (n, p, q) << "\n" ; // cout << fct (n, p, x) << "\n" ; // } y, T z)

: e l p m e x e t e c s n or d is n o C .ruetcurtsnoc nos stnemugra srueisulp uo nu tnattemsnart ne ep yt ec ed tejbo nu ,nortap ud nies ua ,reralcd tiod nol is cnod tarappa e mlborp nU .essalc ep yt nu ttnat ,dradnats ep yt nu ttnat erdnopserroc ed elbitpecsus tse ep yt ed ertmarap nu ,snoitcno f ed nortap nu snaD

. e t n a ts n o c e n u e c n er f r e n u t e e c n er f r e n u ert n e r e h c n art r u o p r i n e vr e t -ni sap cnod tuep en elle ; ici noitaci fingis enucua an noisrevnoc ed noiton al ,trap ertuad ; leppal ed emrof al ed tiudd ert sap tuep en edo m ec ,trap enud : euqsiup ios ed av aleC .ep yt ed sertmarap sed noitaci fitnedil snad elr nucua euoj en )ecner fr rap uo ruelav rap( ert marap nud noissi msnart ed edo m e L

: selp mexe sec snad em moc ,ep yt ed sert marap sed sniatrec recro f tuep no ,erocne icI
affiche la valeur (int) 5 affiche la valeur (float) 8.5 affiche la valeur (int) 6 erreur : pas de correspondance

: ep yt ed sertmarap srueisulp rinevretni tnasia f elpmexe ertua nu icioV


351

2.3 Nouvelle syntaxe dinitialisation des variables des types standard


e uqrameR
2 - Les paramtres de type dun patron de fonctions
force lutilisation de fct<int,float> et donc la conversion de p en float et de x en int force lutilisation de float pour T ; U est dtermin par les rgles habituelles, cest--dire int (type de p) n sera converti en float

.i n i f dr u s t sap an < ruetarpol leuqel snad essalc ep yt nu dnopserroc T is reuqilppas sap arruop en
template <class T> T min (T a, T b) { if (a < b) return a ; else return b ; } template <class T> void fct (T *) template <class T> void fct (T) double x(3.5) ; char c(e) ; int x = 3 ; fct (int a) { int x (3) ; // ... } // au lieu de // au lieu de

: nim nortap el ,elpmexe raP .s e p y t s n i atr e c r u o p n oi t a i c n at s n i d e v i t a t n et a l e d sr o l s et c err o c n i tnorervas iuq snoitcurtsni sed ertarappa tnevuep nortap nud noitini fd al snad ,sruellia raP .noitalipmoc ed ruerre enu arituoba no ,sac sertua sel snaD .* * t uo * t ,* * tni ,* tni : euqnocleuq ep yt nu rus ruetniop nu cevauq tcf releppa arruop en no : et t- ne d n or ta p n u ce v a ,isniA .ruetniop nu ednopserroc ep yt ed ertmarap nuuq resopmi tuep no ,drobad tuoT . n oi t a i c n at s n il r e u o h c eria f ruop tne metceridni rinevretni tnevuep stne mld erb mon niatrec nu ,tnadnepeC . ..) e u q n o c l e u q ess al c e p y t n u t n a n g is d t ( * * t e m m u o * t ,t * * tni ,* tni ,taolf ,tni : ep yt leuq etrop min ed tnemugra nu ceva tcf releppa arruop no : emro f al ed ett-ne nu a nortap nu is ,isniA .sep yt sniatrec ruop noitaicnatsnil eridretnid tnattemrep euqsnirtni emsinac m nucua iroirp a etsixen lI .)essalc uo dradnats( fitce ffe ep yt leuq etrop min erdnop -serroc tnemeuqiroht tuep ep yt ed ert marap nu ,sessalc ed nortap nu tinifd nol euqsro L

: erirc neib srt zevuop suov euq etros ed ,++C noitcurtsni elleuq etropmin snad elbasilitu tse tilibissop ettec ,eiroht nE : em moc erid--tsec ,3 ruelav al ceva x ed noitasilaitini enu em moc etrpretni tne melpmis tios elleuq uvrp a ++C ,e mlborp ed sap esop en )3(x tni noitcurtsnil euq ruoP

352

2.4 Limitations des patrons de fonctions


.noa f ettec ed silitu tnemerar ares alec ,euqitarp nE
double x = 3.5 ; char c = e ;

Les patrons de fonctions CHAPITRE 17

ed tse dnoces el euq sidnat ,)leppal rap ini fd cnod te( elbairav tse tnemugra rei merp ud ep yt el elleuqal snad ,etpmoc snoitcno f ed ellima f enu tini fd etpmoc nortap el euq erid tuep nO
)n ( noisserpxe ertmarap nu tnatropmoc snoitcnof ed nortap ed elpmexE
compte (t) = 2 compte (c) = 4

.seuqnocleuq elliat ed te ep yt ed uaelbat nud slun stne mld erb -mon el tnasilibatp moc snoitcnof sed reuqirba f ed tnattemrep etpmoc m mon nortap nu snos -s i ni f d s u o n l e u q el s n a d e l p m e xe te c s n or d is n o C . n oi tc n o f e n u d n oi ti n i f d al s n a d e v u ort nouq xuec seugolana , serianidro )steum( sert marap sed erid--tsec , snoisserpxe sertmarap sed retropmoc tuep snoitcno f ed nortap nu ,uqov jd snoval suon em moC

.etrop al tnoreti mil ne iuq stne mld erb mon niatrec nu emm noitini fd ruel snad retropmoc sniomnan tnevuep snoit - c n o f e d s n or t a p s e l , n o i t a ti mi l e d l e mr o f e msi n a c m e d s a p e ts i x e n li u q n ei b , e v it i ni f d n E .stnemugra xued ruetcurtsnoc nu sap etsixen li leuqel ruop essalc ep yt nu reuqilppas sap arruop en
template <class T> void fct (T) { ..... T x (2, 5) ; // objet local de type T, initialis par ..... // un constructeur 2 arguments }

3 Les paramtres expressions dun patron de fonctions

main () { int t [5] = { 5, 2, 0, 2, 0} ; char c[6] = { 0, 12, 0, 0, 0, 5} ; cout << "compte (t) = " << compte (t, 5) << "\n" ; cout << "compte (c) = " << compte (c, 6) << "\n" ; } #include <iostream> using namespace std ; template <class T> int compte (T * tab, int n) { int i, nz=0 ; for (i=0 ; i<n ; i++) if (!tab[i]) nz++ ; return nz ; }

: e m m o c n ort a p n u ,e m m e D

3 - Les paramtres expressions dun patron de fonctions

353

.euqnocleuq ep yt emm ed stne mugra siort snoitcno f ed ellimaf ednoces enud ; )s t ne d crp se lp me x e s el s na d em moc( euqnocleuq ep yt emm ed stnemugra xued snoitcno f ed ellima f erimerp enud : r e s o ps i d n o a f e d , n i m s n o it c n o f e d s n ort a p x u e d i n i f dr us s n o v a s u o n l e u q e l s n a d , el p m e x e t e c s n or d is n o C

.tnavius ehpargarap ua snoreidut suon euq te ,ellima f al ed snoitcno f sed srueisulp uo enu rini fdrus etsisnoc iuq ,snoitcnof ed nortap nud noitasilaicps al ceva eudno fnoc ert sap tiod en ellE .)snoitcno f ed snoitini fd srueisulp tnemelpmis sulp non te ,sellima f ed snoitini fd srueisulp neib a y li( snoit -cno f ed selli ma f srueisulp rini fd tiaf ne tiudnoc noitautis ettec euq areton nO .stner f - fid stne mugra sed tnadssop snortap srueisulp rini fd ed erid--tsec ,snoitcno f ed nortap nu r i ni f dr us e d el b iss o p ts e l i , e u q iss al c n o it c n o f e n u ri n i f dr us e d e l bis s o p ts e li u q e m m e D

.erianidro noitcnof enud lepp a le uq e trop mi n sn a d e m m oc , n oi ta tc e f fa rap e lba tpe cc a ti os li uq t i f fu s li : u d ne tt a iulec tnemetcaxe erdnopserroc ed nioseb sulp an ep yt ruel ,leppal ed sro L .snoisserpxe sertmarap srueisulp ed uo nud resopsid tuep snoitcnof ed nortap nu elarng erinam enuD .eicnatsni noitcno f al ed edoc el snad tneivretni tnemugra reimerp ud ep yt el lues ,etpmoc ed leppa nu snad ,erdnetta ys tuep no em moC .)tni ici( sopmi ep yt
354
Les patrons de fonctions CHAPITRE 17

4.1 Exemples ne comportant que des paramtres de type

4 Surdfinition de patrons

#include <iostream> using namespace std ; // patron numero I template <class T> T min (T a, T b) { if (a < b) return a ; else return b ; } // patron numero II template <class T> T min (T a, T b, T c) { return min (min (a, b), c) ; } main() { int n=12, p=15, q=2 ; float x=3.5, y=4.25, z=0.25 ; cout << min (n, p) << "\n" ; // patron I int min (int, int) cout << min (n, p, q) << "\n" ; // patron II int min (int, int, int) cout << min (x, y, z) << "\n" ; // patron II float min (float, float, float) }

.ep yt e m m ec ed ruelav enu rus ruetniop nu te nnod ep yt nud ruelav enu ; e p yt e m m e c e d r u e l a v e n u t e n n o d e p y t n u d r u e l a v e n u r us r u e t ni o p n u ; )stnedcrp sehpargarap sel snad em moc( ep yt emm ed sruelav xued : s et n a vi us s n o i t a ut is si or t s el t n e m el b a n e v n o c r e t i ar t e d ni f a ,s t n e m u gr a x u e d nim snoitcno f ed snortap srueisulp ini fd snova suon leuqel snad elp mexe ertua nu icioV .sleppa sniatrec ceva ertarappad euqsir tugib ma enu ,sac el sap tsen let iS .nortap euqahc tnadnopserroc snoitcno f ed sellima f setner ffid sel ertne tne mepuocer nucua tia yn liuq elbatiahuos tse li siaM .erisd el nouq sirav issua ert cnod tnevuep setnadnopserroc snoitcno f sed sett-ne sel ; )nim nortap euqahc snad nuuq tiava ne yn li ,elpmexe erton snad( ep yt ed sert marap e d t n er f f i d er b m o n n u t n a d s s o p s n ort a p s e d ri ni f dr u s t u e p n o , e l ar n g er i n a m e n u D
)1( snoitcnof ed nortap ed noitinifdrus ed elpmexE
12 2 0.25

12 12 #include <iostream> using namespace std ; template <class T> T min (T a, T b) // patron numero I { if (a < b) return a ; else return b ; } template <class T> T min (T * a, T b) // patron numero II { if (*a < b) return *a ; else return b ; } template <class T> T min (T a, T * b) // patron numero III { if (a < *b) return a ; else return *b ; } main() { int n=12, p=15 ; float x=2.5, y=5.2 ; cout << min (n, p) << "\n" ; // patron numro I int min (int, int) cout << min (&n, p) << "\n" ; // patron numro II int min (int *, int) cout << min (x, &y) <<"\n" ; // patron numro III float min (float, float *) cout << min (&n, &p) << "\n" ; // patron numro I int * min (int *, int *) }

4 - Surdfinition de patrons

355

. te ertne noitcnitsid al rus 5 ehpargarap ua snordneiver suoN .2 .ici snosopxe suon euq emlborp ud sac el sap tsen iuq ec ,nortap ed noitasilaicps al ceva tnemelbanevnoc relgr es arruop emlborp ec siaM .1
) & T tsnoc (f ) &T ( f

: ec ner fr r ap n ois si m -snart enu ertual ,ruelav rap noissi msnart enu tnadnopserroc nul ,snortap xued rev -uort ed noitseuq sulp em m tsen li ; etcaxe ert tiod ep yt ed ecnadnopserroc al ,snortap sed sac el snad em moC .leppal eria fsitas ruop eisiohc noitcno f al tnavius tnemeuqinu siam ,noitcno f al ed leppal rap ini fd sap tsen noissimsnart ed edo m ec : e mm al tse n e n os iar a L . n oi t i n i f dr us e d s ac ne n ort a p n o b u d x i o h c e l r u o p e m m e d a v n e l I . n ort a p nud ep yt ed sert marap sed noitaci fitnedil snad elr nucua tiauoj en )noisserpxe rap u o r ue la v ra p( e p yt e d ert m ara p n u d n ois si ms nar t e d e d o m e l e u q u v j d s n o v a s u o N
2

.)r ei mer p el t e eri u d ort ni d s n o n e v s u o n euq iulec( tnanetniam tnenneivnoc snortap xued euqsiup tugibma enu tiudnoc )p& ,n &( nim leppal ,tnemelbanevnoc sruojuot tnennoitcno f sleppa srei merp siort sel is ,tnemsic -rp sulP .setnadnepdni tnemelatot sulp tneiares en snoitcnof ed sellima f ertauq sel ,tef fe nE
template <class T> T min (T * a, T * b) { if (*a < *b) return *a ; else return *b ; }

: e mr o f a l e d eri at n e m lppu s nortap nu tnassini fd ne noitautis al reroil ma rerpse sap tuaf en liuq zeton ,tnatsnil ruoP .) senahc sed nim tnauqilppa ne 1 ehpargarap el snad e mlborp ed erneg ec rt - n o c n er j d s n o v a s u o n( r u et asi l it ul r a p u d n et t a t a tl us r e l s a p t i o s e n e c e u q e l b a b or p ts e l I .p& te n & )* tni ep yt ed( sruelav xued sed etitep sulp al tse leppal rap srola einruof ruelav a L
1

: noitcno f al ,I ormun nortap ud edial ,reicnatsni tiudnoc )p & ,n&( nim euq let leppa nu ,ehcnaver nE .emlborp ed sap tnesop en sleppa sreimerp siort se L
)2( snoitcnof ed nortap ed noitinifdrus ed elpmexE
2.5 006AFDF0

356

Les patrons de fonctions CHAPITRE 17

template <class T> f(T a) { ..... } template <class T> f(T & a) { ..... } main() { int n ; f(n) ; // ambigut : f(T) avec T=int ou f(T&) avec T=int ..... }

e uqrameR

int * min (int *, int *)

.tneuqilppas iuq erianidro eini fdrus noit -cno f enud xiohc ed selgr sel srola tnos ec ,snoisserpxe sertmarap sruel ed ep yt el rap euq t n e u g n i tsi d e s e n sl i u q t e ,s y o l p m e ert d s el b it p e cs us t n o s s n or t a p sr u e is ul p is e u q z e t o N
noisserpxe ertmarap nu tnatropmoc snortap ed noitinifdrus ed elpmexE
2 1.1

.)r ei t n e n u d e mr o f al s u o s t n e m u gr a n e e i nr u o f( e u q n o c l e u q elliat ed te euqnocleuq ep yt ed uaelbat nud sruelav sed muminim el reni mretd ruop ertual ; euqnocleuq ep yt emm ed sruelav xued ed mu minim el renimretd ruop enul : nim snoitcno f ed sellima f xued ini fd snova suon ,tnavius elp mexel snaD .larng sulp ertcarac nu nortap ed noitini fdrus al ennod snoisserpxe sertmarap ed ecnesrp a L

.) e t c a x e e c n a d n o ps er - r o c e d s a c n e e m m d n a u q t i a t s i x e t u g i b m a l s i a m ( s n o i sr e v n o c s e d t n a s ir o t u a r u e l a v r a p n o i s s i m s n a r t a l , e t c a x e e c n a d n o p s err o c e n u c e v a u q e y o l p m e er t t i a v u o p e n e c n er - f r a l o er u s e m a l s n a d ,s e i 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 e l b i ss o p t i a t s er a l e C
357

4.2 Exemples comportant des paramtres expressions

#include <iostream> using namespace std ; template <class T> T min (T a, T b) // patron I { if (a < b) return a ; else return b ; } template <class T> T min (T * t, int n) // patron II { int i ; T min = t[0] ; for (i=1 ; i<n ; i++) if (t[i] < min) min=t[i] ; return min ; } main() { long n=2, p=12 ; float t[6] = {2.5, 3.2, 1.5, 3.8, 1.1, 2.8} ; cout << min (n, p) << "\n" ; // patron I long min (long, long) cout << min (t, 6) << "\n" ; // patron II float min (float *, int) }

4 - Surdfinition de patrons

.ISNA emron al rap etiudortni t a tilibissop etteC .1

: sn a d e m m o c ,sertuad euq selarng sulp tnat seniatrec ,snoitcnof ed sellima f sed rini fd ed erid--tsec , selleitrap snoitasilaicps sed e mmon nol euq ec reutce ffed elbissop tnemeuqiroht tse lI
1

nortap nud noitcnof enud noitasilaicps ed elpmexE


12 bonjour

: senahc sel ruop esilaicps noisrev enu tnassinruo f ne 1 ehparg -arap ud nim nortap erton reroil ma tnemmoc ,elpmexe rap ,icioV .stne mugrad sep yt sniat -rec ruop snoitcno f srueisulp ed uo enud noitini fd al ,nortap nud noitini fd al ertuo ,rinruo f esirotua suov ++C ,te ffe nE .e mlborp ec noitulos enu er ffo noitasilaicps ed noiton a L .sap tiasia fsitas suon en * rahc ep yt ua tiauqilppal nouqsrol unetbo tne metrop moc el : 1 ehpargarap ud nim nortap ud sac el snad uqramer jd sruelliad snoval suoN .tnasilanp rervas tuep alec ,s a c s ni atr e c s n a D . e m ht ir o g l a e m m e l t n e si l a r el l i m a f al e d s n oi t c n o f s el s et u ot ,t i d t n e m -ertuA .noitinifd elues enud ritrap snoitcnof ed ellima f enu tinifd snoitcno f ed nortap nU

358

5.2 Les spcialisations partielles 5.1 Gnralits

5 Spcialisation de fonctions de patron

Les patrons de fonctions CHAPITRE 17

#include <iostream> using namespace std ; #include <string.h> // pour strcmp template <class T> T min (T a, T b) // patron min { if (a < b) return a ; else return b ; } char * min (char * cha, char * chb) // fonction min pour les chaines { if (strcmp (cha, chb) < 0) return cha ; else return chb ; } main() { int n=12, p=15 ; char * adr1 = "monsieur", * adr2 = "bonjour" ; cout << min (n, p) << "\n" ; // patron int min (int, int) cout << min (adr1, adr2) ; // fonction char * min (char *, char *) }

. n n o d leppa n u t n a d n o ps err o c n o i t c n o f al e d n o it ai c n a ts ni l s n a d r u et al i p m o c e l r a p si l it u e m h tir o gl al i c i r e s i c r p c n o d s n o ll a s u o N . s e l p m e x e s t n e d c r p s o n s n a d e u q t n e d i v s n i o m r e r v a s t u e p r ei c n a ts ni n oi t c n o f al e d x i o h c e l ,s t il i bis s o p s e t n er f fi d s e c e ni b m o c n ol e u qsr o L .)nortap ed noitcno f enud noitasilaicps( nortap nuuq mon emm el tnatrop serianidro snoitcno f sed rinruo f ed elbissop tse li ,sulp eD .snois -serpxe sertmarap sed tnemelleutnev te ep yt ed sertmarap serporp ses tnadssop nucahc ,)noitini fdrus( mon e m m ed snortap srueisulp uo nu rini fd tuep nouq uv cnod snova suoN

.ertua nuuq silaicps sulp tsen nortap nucua selleuqsel snad sugib ma snoit -autis sed etsixe li ,erdnetta ys tuep no e mmoC .ertua nuuq silaicps sulp tse nortap nuuq erid ed tnatte mrep leitrap erdrod noitaler enu tini fd e mron al ,elarng erina m enuD
template <class T> void f(T & t) // patron I { ..... } template <class T> void f(const T & t) // patron II { ..... } ..... int n ; const int cn=12 ; f(n) ; // f(int &) en utilisant patron I avec T = int f(cn) ; // f(const int &) en utilisant patron II avec T = int car il // est plus spcialis que patron I (avec T = const int)

: e t n a ts n o c e n u r us e c n er f r u o r u e t ni o p e d e l b a ir a v e n u r us e c n er f r u o r u et n i o p ert n e n oi t c n it si d
template <class T> void f(T t) // patron I { ..... } template <class T> void f(T * t) // patron II { ..... } ..... int n ; int * adc ; f(n) ; // f(int) en utilisant patron I avec T = int f(adi) ; // f(int *) en utilisant patron II avec T = int car il est // plus spcialis que patron I (avec T = int *)

: * T ne T tne melleitrap tnasilaicps ne ,ruetniop nu ruop reilucitrap tnemetiart : s et n a vi u s s n o i t a ut i s s e l s n a d s el i t u s r t t n er v a s el l e i tr a p n oi t a si l a i c p s e d s t i li bi s s o p s e C .ep yt e mm ed tnos stnemugra xued sel sleuqsel snad tcf ed sleppa sed snad es - il it u er t t i ar v e d t e er i m er p al e u q e si l a i c ps s u l p ts e n o it i n i f d e d n o c es a l ,t n e m e ts e fi n a M
template <class T, class U> void fct (T a, U b) { ..... } template <class T> void fct (T a, T b) { ..... }

6 Algorithme dinstanciation dune fonction patron


6 - Algorithme dinstanciation dune fonction patron

359

.7 ertipahc ud 01 ehpargarap ua rioV .4 .snoisserpxe sertmarap sleutnev sel ruop selagl snoisrevnoc ed etsixe liuq snas ,epyt ed sertmarap sed setcaxe secnadnopserroc sel tiasilar lues nu is sirpmoc Y .3 .snoitatnemlpmi sel setuot rap erg tnemetcerroc sap tsen snoitcnof ed snortap sed elleitrap noitasilaicps ed tilibissop al euq snoleppaR .2 .eicnatsni t jd sap an elle is sniom uD .1
template <class T> void f(T t , int n) { cout << "f(T,int)\n" ; } template <class T> void f(T t , float x) { cout << "f(T,float)\n" ; } main() { double y ; f(y, 10) ; // OK f(T, int) avec T=double f(y, 1.25) ; // ambigut : f(T,int) ou f(T,float) // car 1.25 est de type double : les conversions // standard double-->int et double-->float // conviennent f(y, 1.25f) ; // Ok f(T, float) avec T=double }
4 3

: selp mexe seuqleuq icioV .).. . s dr a d n a ts s n o isr e v n o c ,s e u q ir m u n s n oi t - o m or p( se i ni f dr us s n o it c n o f s el p m is e d e m m o c si o f e t te c t na ti art s el ne seri a ni dr o s n oi tc n o f s e l s et u o t u a e v u o n e ni m a x e n o , t ne i v n o c e n s n oi tc n o f e d n ort a p n uc ua is ,e hc n a ver n E . e up m or -r et n i ts e e h cr e h c er al t e n o it al i p m o c e d r u err e e n u t it u o b a n o , s e l b as il i t u t n e ts er s n oi t c n o f srueisulp iS .elleusu noitini fdrus enu ruop euq erinam e m m al ed etiart nouq snois -serpxe sert marap sleutnev sel enimaxe no ,tugib mal revel sap ti ffus en alec iS . silaic -ps sulp el nortap el tisiohc no sac leuqua ,elleitrap noitasilaicps enud ecnesrp ne tse nol is drobad tuot enimaxe no ,ep yt ed etcaxe ecnadnopserroc enu tnerussa snortap srueisulp iS .ulosr tse e mlborp el ,sac el tse let iS .uluov ep yt el snad stnadnopserroc stne mugra sed sedilav snoisrevnoc sed retsixe tiod li ,snoisserpxe sertmarap ed esopsid erinred ettec is euq ei fingis aleC .elbissop tios alec euq noitidnoc , etnadnopserroc noitcno f al reicnatsni ehcrehc no ,evuort tse etcaxe ecnadnopserroc elues enu iS .epyt ed sertmarap sel euq tnardisnoc en ne ,uluov mon el tna ya snortap s e l s u ot sr ol a e n i m a x e n o , e t c a x e e c n a d n o ps err o c e d esi l a r e n er i a n i dr o n o it c n o f e n u c u a i S . eup morr et n i tse ehcrehcer al te etcetd tse noitalipmoc ed ruerre enu ; tugibma a y li ,srueisulp etsixe ne liS .ulosr tse emlborp el ,tneivnoc elues enu iS .setcaxe secnadnopserroc xua essertnis n o t e ul u o v m o n el t n a y a s eri a ni dr o s n oi t c n o f s e l s et u ot e n i m a x e n o , s p m e t r ei m er p n u s n a D
2 1

360

Exemple 1

Les patrons de fonctions CHAPITRE 17

6 - Algorithme dinstanciation dune fonction patron

361

Exemple 2
template <class T> void f(T t , float x) { cout << "f(T,float)\n" ; } template <class T, class U> void f(T t , U u) { cout << "f(T,U)\n" ; } main() { double y ; float x ; f(x, y) ; // OK f(T,U) avec T=float, U=double f(y, x) ; // ambigut : f(T,U) avec T=double, U=float // ou f(T,float) avec U=double }

Exemple 3
template <class T> void f(T t , float x) { cout << "f(T,float)\n" ; } main() { double y ; float x ; f(x, y) ; // OK avec T=double et conversion de y en float f(y, x) ; // OK avec T=float f(x, "hello") ; // T=double convient mais char * ne peut pas tre // converti en float }

.)nortap ertua nud ritrap eicnatsni ertd elbitpecsus noitcno f enu erid--tsec( nortap noit -cno f enu ruot nos rinevretni essa f nortap nud noitini fd al euq elbissop tiaf tuot tse lI

e uqrameR

.s n oi tc n o f x ua rcasnoc ertipahc tnedcrp ud sessalc xua noitalopartxel tnemellun tsen ertipahc ec ,zeret -atsnoc el suov e mmoC .setnatrop mi zessa secner ffid sed tnetnesrp sessalc ed nortap ed te snoitcno f ed nortap ed snoiton sel ,secnalb messer sruel rglam euq tnanetnia m sd snolangiS .secidni xued )stejbod( xuaelbat sed relupina m ed euv ne seuqirbmi snortap sessalc ed noitasilitud elp mexe nu rap snorenimret suoN .sessalc ed snortap ed sac el snad sitimad snoitaralcd sel tnesilarng es t n e m m o c e t i u s n e s n orr e v s u o N .s e ss a l c x u e d e d t it n e di l e nr e c n o c i u q e c n e t n e m m a t o n ,snortap sessalc ed noitaicnatsnil rus tniop el srola snoref suoN .essalc enu etuot tnasilaicps ne ti os , serb m e m s n oi tc n o f ses ed s e ni atr ec t n as il ai cps ne ti os ,s ess al c e d n or tap nu r esi la ic -ps ed tilibissop al snorenimaxe suon siuP .snoisserpxe sertmarap ed te ep yt ed sert marap ed euqnocleuq erbmon nu esilarng es elleuq etiusne snorrev suoN .ep yt ed ert marap nuuq rinevretni tnasia f en elpmis elp mexe nud ritrap sessalc ed nortap ed noiton ettec ret - nes r p s u o v r a p s n ore c ne m m oc s u o n ,s n o it c n o f e d s n or ta p se l r u o p ti a f s n o va l s u o n e m m o C .sep yt stner ffid retpadal tnem -euqitamotua essiup ruetalipmoc el euq ruop essalc al ed noitinifd al sio f elues enu erircd ari ffus li ,erocne L .) seuqirng sessalc ed sio frap elrap no( sessalc ed snortap s e d r i ni f d e d t e mrep ++ C , elbar ap m oc er in a m en uD .s no iss erpx e se d tn e m el le u t ne v te ,sep yt srueisulp uo nu rap sertmarap snoitcno f ed ellima f enu rini fd ed ,snoitcnof ed ) etalp - m e t u o( n or t a p e d n oi t o n a l e c r g , t i a tt e mr e p + + C t n e m m o c rt n o m a er ti p a h c t n e d c r p e L

Les patrons de classes

18

: ru e tc urt sn o c erton ini fd ert tiarruop tnemmoc elpmexe rap icioV .tneicse nob T ertmarap el resilitud tne melpmis ti ffus li ; sellerutan tnetser sesohc sel ,engil ne noitcno f enu ruoP . n o n u o e n gi l ne tse enrecnoc noitcno f al euq noles rer ffid tnemergl av ehcra md al ,eria f ec ruoP .ehc -iffa noitcno f al te tniop ruetcurtsnoc el riovas ,serb mem snoitcnof sed noitinifd al euqna m y li u qsi u p e t l p m o c er o c n e s a p ts e n s ess al c e d n or t a p er t o n e d n o it i ni f d al , u d n e t n e n e i B .). .. ess a l c t n e m cr o f s a p( e p y t ed tnemugra nu tse T euq resicrp ruop ssalc lc-tom el re yolpmed dicd a ++C euq snol -eppar ; T m mon ep yt ed ert marap nu tarappa leuqel snad )etalpmet( nortap nu eria ffa a nol euq esicrp >T ssalc< etalpmet noitnem al ,snoitcno f ed snortap sed sac el snad e mmoC
template <class T> class point { T x ; T y ; public : point (T abs=0, T ord=0) ; void affiche () ; } ;

: n o a f e tt e c e d ess al c e d nortap lues nu tnassini fd ne sesohc sel tnemelbardisnoc rei filp mis snovuop suon ,erocne icI .uluov ep yt ed mon el rap tni lc to m el ,etnedcrp essalc al snad ,tne melp - mis tnaalp mer ne essalc ertua enu rini fd snoved suon ,)...tni dengisnu ,gnol ,elbuod ,taolf( ep yt ertua nud sennodrooc stniop ed resopsid snotiahuos suon iS .tni ep yt ed sruelav sed tneios tniop nud sennodrooc sel euq snosop mi suon ,isnia snodcorp suon euqsro L
class point { int x ; int y ; public : point (int abs=0, int ord=0) ; void affiche () ; // ..... }

: )s er b m e m s n oi t c n o f s e d n oi t i n i f d a l i c i sa p s n oss i nr u o f e n s u o n( er ne g e c e d t n i o p ess al c e n u r er c s n e ma t t ne v u os s n o va s u o N

364

1.1 Cration dun patron de classes

1 Exemple de cration et dutilisation dun patron de classes

Les patrons de classes CHAPITRE 18

point (T abs=0, T ord=0) { x = abs ; y = ord ; }

.2 ! reifitsuj al snas ,ecnadnoder ettec rennoitnem ed etnetnoc es ,++C egagnal ud ruetpecnoc el ,purtsuortS .1

. emanepyt rap calpmer ert tuep ssalc lc-tom el ,emron al siuped ,snoitcno f ed snortap ed noitinifd al ed soporp reuqramer tia f jd al no em moC 1
2

se uqrameR

sessalc ed nortap nud noitarC


#include <iostream> using namespace std ; // cration dun patron de classe template <class T> class point { T x ; T y ; public : point (T abs=0, T ord=0) { x = abs ; y = ord ; } void affiche () ; } ; template <class T> void point<T>::affiche () { cout << "Coordonnes : " << x << " " << y << "\n" ; }
1

: tniop nortap erton ed noitinifd al tnemelani f ert tiarruop euq ec icioV .etalpmet lc-tom el tnavius sert marap ed etsil al snad i ficps t jd a liuqsiup tnadnoder tse )tniop( nortap ed mon ud etius al T ertmarap ud leppar el ,rueugir etuot nE
template <class T> void point<T>::affiche () point<T>::affiche () template <class T>

: ess al c al e d sr o h e d n e is n i a s n ois -sini fd el suon is ehciffa noitcno f al ed ett-nel tiaretnesrp es tnem moc iciov ,evitini fd nE : ares mon nos ,ehciffa n oi t c n o f al is n i a s n os si n i f d s u o n is , el p m e x e r a p ; ). .. ess al c a l e d m o n u d n oi t c n o f al e d m o n el rexi frp tialla f li , erianidro essalc enu cevauq e m m ed( nrecnoc nortap ud mon el : emro f al suos sertmarap ed etsil al uaevuon arinruo f no ,eria f ec ruop ; ep yt ed sertmarap sed ertarappa tnov ,noitcno f ettec ed noitini fd al snad ,euq : r u et al i p m o c u a r e l e p p ar e d eri ass e c n tse li ,essalc al ed noitini fd al ed srohed ne eini fd tse noitcno f al euqsrol ,ehcnaver nE
365

1 - Exemple de cration et dutilisation dun patron de classes

.h noisnetxed irporppa reihci f nu snad snortap ed snoitini fd sel arecalp no ,euqitarp nE . nortap nud noitini fd ed relrap tnadnepec snoreunitnoc suon ,etius al raP .snoitaralcd ed xuaevin xued tiatsixe lis em moc ici erocne essap es tuoT .)serb me m snoitcno f xua tnad -nopserroc tejbo eludo m nu te essalc al ed noitaralcd al rinruo f iul ed ti ffus li , erianidro essalc enu ruop euq srola( serbmem snoitcno f sel setuot ed ecruos snoitcurtsni sel rinruo f iul tua f li : elip moc etuot nortap essalc enu ruetasilitu nu rervil ed elbissop sap li-tsen issuA .)71 ertipahc ud 4.1 ehpargarap riov( snoitcno f ed snortap s e l r u o p e l u mr o f s n o v a s u o n e u q e ll e c e u q e u qr a m er e m m a l i c i e v u ort er n O .s es i u q er s n oi t -curtsni sel eriassecn euq sio f euqahc reicnatsni ruop ruetalipmoc ua seriassecn tnos snoit -curtsni sruel : engil ne sap tnos en iuq serbmem snoitcno f sel ruop emm ed av ne li siaM .) e n g il n e s n o i t c n o f e d n o i ti ni f d e d s n o it c urts n i s e l sir p m o c y( es s a l c e n u t n ass i ni f d s n oi t c ur ts ni s el e u q er ti t e m m u a s n o it ar - al c d s e d t n os s es s a l c e d n or t a p n u t n ass i ni f d s n o i t c urt s n i s el , er d n e t t a ys t u e p n o e m m o C

: s n a d e m m o c e u q iss al c noa f ed snoredcorp suon ,ruetcurtsnoc ua stnemugra sed rinruo f ed nioseb snova suon iS . ess al c et t e c e d e t l p m oc n o it i ni f d ert u a e n u i nr u o f s n oi v a s u o n is e m m o c t n e m et ca x e , e l b u o d r u el a v al dnerp T ertmarap el elleuqal snad tniop essalc enud noitini fd al eicnatsni ruetalip moc el : s n ora lc d s u o n i S . ess al c et t e c e d e t l p m o c n o it i ni f d e n u i nr u o f s n oi v a s u o n is e m m o c es s a p es t u o t , ti d t n e m ert u A . t n i r u e l a v a l d n er p T ertmarap el elleuqal snad tniop essalc enud noitini fd al reicnatsni ruetalipmoc el tiudnoc : e u q e ll et n oi tar al c d e n u , n ort a p ec r c r i o v a s r p A
point <int> ai ; point <double> ad ;

. t i l i b i s s o p e t t e c r ir u o c e r e d n i o s e b t i a n o l e u q er ar t s e l I . c u r t : : A e p y t e d t n a t e m m o c a c n o d er a l c d n o ; e p y t e d m o n n u n e i b t s e c u r t : : A e u q e s i c r p n o : n o i t a r a l c d e t t e c c e v a , e l p m e x e r a P . e p y t e d m o n n u e m m o c t r pr e t n i t ne mevitce ffe tios liuq ni fa ,ruetaci fitnedi nu exi frp ne t natuojal ne ,ruetalip moc el ruop t ugib ma en u revel rivres tne melag tuep emanepyt lc-to m ec ,rueugir etuot nE
366
Les patrons de classes CHAPITRE 18
typename A::truc a ; // quivalent A::truc a ; si aucune ambiguit nexiste

1.3 Contraintes dutilisation dun patron de classes 1.2 Utilisation dun patron de classes
point <int> ai (3, 5) ; point <double> ad (3.5, 2.3) ;

.)niam( noitasilitud elpmexe nu ; engil ne non )ehciffa( erbmem noitcno f enud te engil ne ruetcurtsnoc nud tod tniop sessalc ed nortap nud noitarc al : tnatropmoc telpmoc e mmargorp nu icioV

. n o i t as i l i t u n os s n a d t e n or t a p u d n o i t i n i f d a l s n a d s u l c n i ar es r e i m er p e L . n o i t i n i f d a l r u o p n u , n o i t - a r a l c d a l r u o p n u ,s t c n i ts i d e t t - n e s r e i h c i f x u e d r i o v r p t r t n i ar u a n o , er o c n e i c I

: ) n o i t i n i f d t e n o i t a r a l c d sr o l a e u g n i ts i d n o ,s n o i t c n o f e d s n or t a p s e l c e v a e m m o c( n o i t ar a l c d e l u e s a s r e n n o i t - n e m e d t n a t n e t n o c e s n e , e cr u o s r e i h c i f e r t u a n u s i u p e d n o r t a p e c r e s i l i t u s r o l a t u e p n O
export template <class T> class point { T x ; T y ; public : point (...) ; void afiche () ; ..... } ; template <class T> point<T>::point(...) { ..... } /* dfinition constructeur */ template <class T> void point<T>::affiche() { ..... } /* dfinition affiche */ .....

: noa f ettec ed tniop sessalc ed nortap nu rinifd arruop no ,elpmexe raP .ecruos reihci f ertua nu siuped elbissecca ares ic-ellec euq esicrp li ,sessalc ed nortap nud noitini fd al uqilppA .ertipahc tnedcrp ua lrap jd snova suon tnod tropxe lc-tom el tiudortni a emron al euq tiaf el rap serdnop ert tneviod setnedcrp snoitardisnoc sel ,erocne icI

1.4 Exemple rcapitulatif

#include <iostream> using namespace std ; template <class T> point<T> { T x ; T y ; point (...) ; void afiche () ; ..... } ;

1 - Exemple de cration et dutilisation dun patron de classes

// dclaration seule de point<T>

e uqrameR

367

.) n o i t u c x e l u q s e u r e p t n or e s n e n s e c n e u q s n o c s e l ; n o i t a l i p m o c a l i n r u o f ar e s e n c i ts o n g a i d n u c u a , er i a r t n o c s a c e l s n a d ( e t p m o c n e s es ir p t n e m e t c err o c t n e i o s T e p y t e d s t e j b o d n o i t a t - c e f f a l t e e i p o c er a l e u q er i a s s e c n t s e l i , s u l p e D . ) n o i t a l i p m o c e d r u e rr e e n u a r d n e i t b o no ,n onis( tniop ed ruetcurtsnoc ud st nem ugra se d n oitasilaitinil ed srol T ep yt el snad 0 ruelav al ritrevn oc ru op elitu ,T ne tni e d noisrev noc en u etsi xe liuq tnad nepec t u a f l I . e u n e t b o is n i a n or t a p es s a l c a l n o i t a c i f i n g is e n u r e u b i r t t a d e l i c i f f i d r e r v a s sr o l a t u e p l i s e m m , e u q n o c l e u q T e s s a l c e p y t n u r e u q i l p p a l e d t i d r e t n i n n e ir , s i o f e t -uoT .s dradnats T sep yt sed tniop nortap ert on reuqilppad eivne ttulp a n o ,iroirp A 2 . > r a h c < t n i o p es s a l c a l r u o p e h c i f f a n o i t c n o f a l t n a s i l a i c ps n e e r o c n e u o r a h c e p y t e l r u o p t n i o p es s a l c e r t o n t n as i l a i c p s n e a l e c r e i f i d o m e d e l b i ss o p sr u o j u o t e ts e r l i u q s n orr e v s u o N .) ! t n i o p u d s e n n o dr o o c s e l e d o c r u o p t n a y a s er t c ar a c s e l s n o r d n e i t b o s u o n( s u l p a r d n e i v n o c s u o n e n e h c i f f a n o i t c n o f a l e d t n e m e tr o p m o c e l s i a M : n o a f et t e c e d t n i o p n u r er al c d sr u o j u ot s n orr u o p suon ,te ffe nE .tnasia fsitas snio m tse tatlusr el , sreitne stitep ed resopsid ruop rahc ep yt el silitu snova suon is ,ehcnaver nE .sertcarac siarv ed rap srper stniop ed res -opsid tne mevitce ffe snotiahuos suon is tnasia fsitas tse >rahc<tniop ed tne metrop moc e L 1
point <char> pc (4, 9) ;

se uqrameR

s e s s al c e d n o r t a p n u d n o i t a s il i t u t e n oi t a r C
coordonnees : 3 5 coordonnees : d y coordonnees : 3.5 2.3

368

Les patrons de classes CHAPITRE 18

// cration dun patron de classe template <class T> class point { T x ; T y ; public : point (T abs=0, T ord=0) { x = abs ; y = ord ; } void affiche () ; } ; template <class T> void point<T>::affiche () { cout << "Coordonnees : " << x << " " << y main () { point <int> ai (3, 5) ; ai.affiche point <char> ac (d, y) ; ac.affiche point <double> ad (3.5, 2.3) ; ad.affiche }

() ; () ; () ; << "\n" ;}

: reralcd snovuop suon ,tnedcrp ehpargarap el snad ini fd t a liuq let tniop m mon sessalc ed nortap ud snosopsid suon is ,elp mexe raP .sessalc ed nortap nud ed ia l ic n at sn i ep yt n u f i tc e f fe ep y t e d ert m arap e m m oc re si li t ud elb iss op e m m tse lI .)e ssa lc ep yt nud rigas tuep li( ini fd tne melbalarp t a jbo ep yt el euq rs neib esoppus erinred a L : ) esi cr p n o it ac i fi n g is e n u re u bir tt a re h cre hc sap tua f en li sleuqxua elocd selp mexe selp mis ed euq tigas en li( tnedcrp iasse nortap ud ritrap seunetbo snortap sessalc ed snoitaralcd sed icioV .nortap ud )>... < etalpmet( etsil al snad tnarugi f sert marap ed erbmon ua lag )sep yt ed smon( s fitce ffe stne mugrad erb mon n u n or ta p e d m o n u d e ti us al t n ass i nr u o f ne t n e m el p mis era lc d es n ort a p ess al c e n U .ses -salc ed nortap nud erilucitrap ecnatsni enu nortap essalc snom mon suon euq snoleppaR
essai <int, float, int> ce1 ; essai <int, int *, double > ce2 ; essai <char *, int, obj> ce3 ;

: elpmexe nu iciov nE .sessalc ed nortap ud noitini fd al snad elb -mes suov nob e mmoc ssilitu te euqnocleuq erbmon ne ert tnevuep ep yt ed sertmarap se L

. se m m s el sap t n ores e n ser t m -arap ed sep yt stner ffid sec sevitaler setniartnoc sel ,snoitcno f ed snortap sel ceva ecnalb -messer ruel rgla m ,euq neib zeton ,sulp ed siof enU .tnavius ehpargarap ua sidut tnores sdnoces sel ; sreimerp sel eidut ehpargarap eC .snoisserpxe sert marap sed te ep yt ed sert - marap sed retropmoc tnevuep sessalc ed snortap sel ,snoitcno f ed snortap sel emmoc tuoT

2.2 Instanciation dune classe patron

2.1 Les paramtres de type dans la cration dun patron de classes

2 Les paramtres de type dun patron de classes

essai <float, point<int>, double> ce4 ; essai <point<int>, point<float>, char *> ce5 ; template <class T, class class essai { T x ; // U t[5] ; // ... V fm1 (int, U) ; // // } ;

un membre x de type T un tableau t de 5 lments de type U U, class V> // liste de trois param. de nom (muet) T, U et V

dclaration dune fonction membre recevant 2 arguments de type int et U et renvoyant un rsultat de type V

2 - Les paramtres de type dun patron de classes

369

.s e ss a l c s e d s a c el s n a d s e t n a ts n o c ert t n e m er i o t a g il b o t n or v e d noisserpxe ertmarap nud sevitce ffe sruelav sel ,reilucitrap nE .tnetsixe setnatrop mi secner - ffid seniatrec ,snoitcno f ed snortap sel ruop etnesrp ellec ed enisiov noiton enud ,erocne ici ,essigas liuq neiB .snoisserpxe sertmarap sed retrop moc tuep sessalc ed nortap nU

.s e i c n a t s n i s e ss a l c e d e u q s e ss a l c e d s e t n er f f i d s n o i t i n i f d e d t n a t u a r a p c a l p m er e r t sr u o j u o t t u e p s e ss a l c e d n or t a p n u , t n e m s i c r p s u l p ; s es s a l c s e t n e r f f i d r e i c n a ts n i r u o p s i l i t u e l u o m n u u q t s e n s es s a l c e d n or t a p e l e u qs i u p e u q i g o l ts e C . n or t a p u d u a e v i n u a n o n t e e c n a t s n i l e d u a e v i n u a e u q i t a t s e tr o s e u q l e u q n e t s e n o : s e u q i t a t s s er b m e m e d u e j e r p o r p n os e d e s o p s i d es s a l c a l e d e c n a t s n i e u q a h c e u q r i o v a s t u a f l i , s a c e c s n a D . s e u q i t a t s ) s n o i t c n o f u o s e n n o d ( s e r b m e m s e d r e tr o p m o c t u e p s e ss a l c e d n or t a p n U 4 . e m l b o r p e l e r d u o s r e d t e mr e p ) 7 1 e r t i p a h c u d 3 . 2 e h p - ar g ar a p u a e t n e s r p( dr a d n a t s s e p y t s e d n o i t a s i l a i t i n i d e x a t n y s e l l e v u o n a l , er o c n e L . e ss a l c e p y t n u d , er i a r t n o c u a , u o e s a b e d e p y t n u d r i g as t u e p l i , t e f f e n E . e r t m ar a p n e e r u g i f e p y t e l t n o d s e l b a i r a v s e d )s er b m e m s n o i t c n o f e d n i e s u a( r e s i l a i t i n i ti o d n o l e u qs r o l s t l u c i f f i d s e d r er t n o c n er t u e p n o ,s n o i t c n o f e d s n o r t a p s e d s a c e l s n a d e m m o C 3 . > T < t n i o p n or t a p e ss a l c a l ) t i a f t e r o c n e s a p a n al e c i s( t n e m e l a g ar e i c - n a ts n i r u e t a l i p m o c e l , n n o d T e p y t n u r u o p t c f n o i t c n o f e n u r e i c n a t s n i ar v e d l i u qs r o L : ) t n e d c r p e l er t t u e p e c( t n i o p m m o n s e ss a l c e d n o r t a p e l i n i f d s n os o p p u s s u o n l e u q e l s n a d , e l p m e x e n u i c i o v n E . n o r t a p e s s a l c e n u t i o s n or t a p n o i t c n o f e n u d ) e t t - n e l s n a d t n a r u g i f ( l e mr o f t n e m u gr a n u u q e l b i ss o p t i a f t u o t t s e l I 2 . ec na d n o pserr oc e d e c n es ba d e u qsir c n o d tiava y li te siof xued ertarappa tiavuop )teu m( mon emm nu ; noitcno f al ed ett-nel ed sert marap sed etsil al rus sia m ,etalpmet lc-tom ud etius al suqidni sertmarap sed etsil al rus sap non tiadno f es noitaicnatsnil ,snoitcno f ed snortap sed sac el snad ,te ffe nE .)ici sidut ep yt ed sertmarap sel ruop snio m ud( sessalc ed snortap sel ruop sulp tnet -sixen snoitcno f ed snortap sel ceva srtnocner etcaxe ecnadnopserroc ed semlborp se L 1
template <class T> void fct (point<T>) { ..... }

370

3 Les paramtres expressions dun patron de classes


se uqrameR
Les patrons de classes CHAPITRE 18

.) n or t a p ess al c e n u n o n t e eri a ni dr o ess al c e n u uaevuon tse tniop ,ici( tniop ep yt ed stejbod xuaelbat sed icnatsni snova suoN .irp -orppa egassem nu ehci ffa liuq tia f el rap euq eifitsuj es en iuq )stne mugra snas( ruetcurtsnoc nud te ][ ruetarpol ed etod tnemelp mis snoval suon ; uaelbat e mmon nortap essalc ellet enu tnemetlp moc sulp uep nu tnassinifd e mmargorp ed telpmoc elp mexe nu icioV
class ti { int tab [4] ; public : // ..... } ;

: etnavius noitaralcd al tnemelani f tnadnopserroc it e mmon essalc enu snoreralcd suon : n o it ara lc d a l ce v a , elp me xe raP .uaelbat essalc al ed erilucitrap ecnatsni enud noitaralcd al ed srol ruelav as aresicrp no ; tni ep yt ed noisserpxe ertmarap nu ; ssalc lc-to m el rap tiudortni ,ep yt ed )euqissalc siamrosd( ertmarap nu : et n er f f id tnemelatot erutan ed sertmarap xued etrop moc )>...< etalpmet( sertmarap ed etsil a L
template <class T, int n> class tableau { T tab [n] ; public : // ..... } ; tableau <int, 4> ti ;

: is n ia ar et ne srp es ess al c al e d n o it ar c a l ,s ac ec s naD .uaelbat ud stne mld erb mon el resicrp ed tnattemrep ertmarap dnoces nu riovrp issua tuep nO .ep yt ed ert marap nu tnadssop nortap essalc enu eriaf ned tirpsel tnemellerutan tuot tneiv ediL .euqnocleuq ep yt nud stejbod xuaelbat sed relupinam ed elbitpecsus uaelbat essalc enu rini fd snoitiahuos suon euq zesoppuS

3.1 Exemple

#include <iostream> using namespace std ; template <class T, int n> class tableau { T tab [n] ; public : tableau () { cout << "construction tableau \n" ; } T & operator [] (int i) { return tab[i] ; } } ;

3 - Les paramtres expressions dun patron de classes

371

al snad o etrop min rinevretni tnevuep sertmarap seC .sessalc ed nortap nud sertmarap ed etsil enu snad erisd el nouq snoisserpxe sertmarap ed tnatua ertarappa eria f tuep nO

. s e c i d n i sr u ei s -ulp xuaelbat sed relupina m ruop uaelbat nortap el snoresilitu suon o ,9 ehpargarap u a eri a f e d n o is a c c o l s n or u a s u o n e u q e c sr u e l li a d ts e C . u a el b at u d st n e m l s e l r esi l a i t -inid riovrp tnemelag tiarruop no ; ][ ruetarpol ed noitini fd al tnatpada ne ecidnid elrtnoc nu retuoja y tnemelica f tiarruop no ,elpmexe raP .risiol retlpmoc tuep nouq laitini erdac nud euq tigas en li ,tiaf nE .it >4,tni< uaelbat ed ueil ua ]4[it tni elp mexe rap ,stejbod xuaelbat selp mis ed tnaralcd ne tatlusr emm el tiardneitbo no ,te ffe nE .euqitarp trtnid tne melbatirv sap an ici etnesrp tse elleuq ellet uaelbat essalc a L

noisserpxe ertmarap nu tnatropmoc nortap essalc ed elpmexE


construction tableau ti : 0 1 2 3 const point 1 1 const point 1 1 const point 1 1 construction tableau coordonnes : 1 1 coordonnes : 1 1 coordonnes : 1 1

372

3.2 Les proprits des paramtres expressions


e uqrameR
Les patrons de classes CHAPITRE 18
main() { tableau <int,4> ti ; int i ; for (i=0 ; i<4 ; i++) ti[i] = i ; cout << "ti : " ; for (i=0 ; i<4 ; i++) cout << ti[i] << " " ; cout << "\n" ; tableau <point, 3> tp ; for (i=0 ; i<3 ; i++) tp[i].affiche() ; } class point { int x, y ; public : point (int abs=1, int ord=1 ) // ici init par dfaut 1 { x=abs ; y=ord ; cout << "constr point " << x << " " << y << "\n" ; } void affiche () { cout << "Coordonnees : " << x << " " << y << "\n" ; } } ;

.emm el sap tiatn elr ruel siam ; snoitcnof ed snortap sed snoisserpxe sertmarap sel ruop sap tiatsixen etniartnoc etteC .1

.ellevuon enu rinruof ned elbissop tse li ,erilucitrap noitautis enu erb -mem noitcno f enu retpada etiahuos nol iS .e mhtirogla em m el tnesilar nnod mon ed serb -mem snoitcno f sel setuot ,isniA .serb me m snoitcno f ses ed noitini fd al te noitini fd as siof al etr o p m o c ess al c e u qa h c el le u q al s na d s ess al c e d e ll i m a f e n u ti n i f d se ssa lc e d n ort a p n U

.noitcudortnid elpmexe nu srpa snorrev el s u o n e m m o c ,s t il i bis s o p s es e d t e e x at n ys as e d u a e vi n u a s i o f a l , t n er f fi d t n e m er g l tcepsa nu sio fetuot dnerp elle ,sessalc ed snortap sel ruop etsixe tilibissop e mm al iS .snoit - c n o f e d n ort a p n u d s n o it c n o f s e ni atr e c r es il ai c ps e d e l bis s o p ti at li u q u v s n o v a s u o N

.sac dnoces el snad ruetcurtsnoc el rap euqiman yd noitacolla ; sac rei merp el snad )tnadnopserroc >...,...<uaelbat ep yt ed tejbol ed noitacol -lad essalc al tnavius euqitamotua uo euqitats( noitalipmoc al tne mecalp med noitubirtta : uaelbat ud stneml stner ffid xua tnadnopserroc eriomm stne mecalpme sed noitseg al ed uaevin ua eurappa srola tiares etnatrop mi ecner ffid enU .stiahuos stnemld erb mon el ruetcurtsnoc ua ertte msnart ,ehcnaver ne ,sia m n noisserpxe ert marap el riovrp sap en up snoirua suon ,uaelbat essalc ed elpmexel snad ,isniA .ruetcurtsnoc ua stnemugrad noissimsnart al te snois -serpxe sertmarap ed iolp mel ertne retish tnevuos arruop no ,euqigolodohtm nalp nu ruS .nortap essalc enud noitaicnatsnil ed sac el snad resop es sulp tnevuep en nortap noitcno f enud noitaicnatsnil ed srol suqov tugibmad semlborp sel ,ecneuqsnoc nE .stner ffid )snoisserpxe uo ep yt ed( sertmarap ed etsil enu tnat -rop moc sia m mon e m m ed snortap srueisulp rerc ed erid--tsec ,sessalc ed nortap nu rin -ifdrus ed elbissop sap tsen li ,snoitcnof ed snortap sel ruop tiassap iuq ec tnemeriartnoC .elbissop tsen noisrevnoc enucua ,tid tne mertua ; )srp selaivirt snoisrevnoc xua( stnemugrad etsil al snad uvrp iulec euqitnedi tne mesueruogir ep yt nud setnatsnoc snoisserpxe sed ert tnemeriotagilbo tneviod stnadnopserroc s fitce ffe sertmarap sel ,snoisserpxe sertmarap sed tnatropmoc essalc enud noitaicnatsnil ed sro L . ess al c e n u d n oi t i n i f d a l s n a d ertarappa tuep etnatsnoc noisserpxe elleuq etropmin euq ertit emm ua ,nortap ud noitini fd
1

4.1 Exemple de spcialisation dune fonction membre

4 Spcialisation dun patron de classes


4 - Spcialisation dun patron de classes

373

374

Les patrons de classes CHAPITRE 18

4.2 Les diffrentes possibilits de spcialisation


4.2.1 On peut spcialiser une fonction membre pour tous les paramtres

.>rahc<tniop ecnatsnil ed ecalp al erid--tsec ,tniop nortap ud ehc -iffa noitcno f al ed ecalp al noitcno f ettec resilitu tiaved liuq ruetalipmoc ua resicrp ruop

-red ettec euq neib( snoisserpxe sertmarap srueisulp uo nud sesicrp sruelav sed rus euq isnia ,ep yt ed sertmarap srueisulp rus tnasab es ne erbmem noitcno f enu resilaicps ed elbis -sop tse lI .ep yt ed ert marap nuuq tiatropmoc en tniop nortap essalc al ,elpmexe erton snaD

.sr ei t n e s er b m o n s e d si a m s er t c ar a c s e d s u l p non ehcif fa elleuq ni fa ,rahc ep yt ud sac el snad ehciffa noitcno f al silaicps snova y suoN .ehpargarap rei merp el snad ini fd tniop sessalc ed nortap el dnerper iuq elp mexe nu icioV
#include <iostream> using namespace std ; // cration dun patron de classe template <class T> class point { T x ; T y ; public : point (T abs=0, T ord=0) { x = abs ; y = ord ; } void affiche () ; } ; // dfinition de la fonction affiche template <class T> void point<T>::affiche () { cout << "Coordonnees : " << x << " " << y << "\n" ; } // ajout dune fonction affiche spcialise pour les caractres void point<char>::affiche () { cout << "Coordonnees : " << (int)x << " " << (int)y << "\n" ; } main () { point <int> ai (3, 5) ; ai.affiche () ; point <char> ac (d, y) ; ac.affiche () ; point <double> ad (3.5, 2.3) ; ad.affiche () ; } coordonnes : 3 5 coordonnes : 100 121 coordonnes : 3.5 2.3 void point<char>::affiche ()

nortap essalc enud erbmem noitcnof enud noitasilaicps ed elpmexE

: e mro f al suos ehciffa ed ett-nel erircd i ffus a suon liuq zetoN

. s i l a i c p s s u l p I I n ort a p e l ar e s i li t u 2 a > * t ni , t ni < A e u q e l l e t noitaralcd enuuq sidnat ,I nortap el aresilitu 1a >taolf ,tni< A euq ellet noitaralcd enU : el p m e xe n u i ci o v n E . ses sa lc e d n ort a p n u d elleitrap noitasilaicps al tne melag esirotua ISN A emron a L .)71 ertipahc ud 5 ehpargarap ua riov( snoitcno f ed snortap ed sac el snad elleitrap noitasilaicps ed lrap jd snova suoN . n ort a p u d s er b me m s n o it c no f x u a le p pa tiare f no sac leuqua ,rini fd ne sap en uo tnem medcrp em moc tnadcorp ne >rahc<tniop ed serb mem snoitcno f sed seniatrec ed sesilaicps snoisrev sed rini fd issua snoirruop suoN
class point <char> { // nouvelle dfinition } template <class T, class U> class A { ..... } ; // patron I template <class T> class A <T, T*> { ..... } ; // patron II tableau<point,10>::tableau (...) { ... } template <class T, int n> class tableau { T tab [n] ; public : tableau () { cout << "construction tableau \n" ; } // ..... } ;

: isnia tnadcorp ne ,>rahc<tniop ecnatsnil ed eirporppa noisrev enu erid--tsec ,rahc ep yt el ruop tniop essalc al ed esilaicps noisrev enu rini fd snoirruop suon ,)1.4 ehp -argarap ua e mmoc( tniop ssalc >T ssalc< etalpmet nortap el ini fd riova srpa ,elp mexe raP .serbme m snoitcno f seniatrec ed noitasilaicps al ed rengap moccas tuep tilibissop e d n o c es e tt e c ; n o it i ni f d e ll e v u o n e n u t n a ssi nr u o f n e n e , e m m- e l l e ess al c a l r esi l a i c ps ; ) et n e u q r f s ul p a l n oi t a u ti s a l ar e s e c( e m m -elle essalc al ed noitini fd al rei fido m snas ,serb mem snoitcnof srueisulp uo enu resilaicps : t n e m m er f f i d n i t u e p n o ,t i a f nE .nortap nud erbmem noitcno f enu silaicps snova suon ,stnedcrp selp mexe sel snaD : i sn ia tnadcorp ne )! elocd elpmexe nud euq tne miarv tigas en li( tniop ep yt ed stne ml 01 e d x u a e l b a t s el r u o p r u e t c urt s n o c n os e d e si l a i c ps n oisr e v e n u erir c s n o v u o p s u o N
4.2.2 On peut spcialiser une fonction membre ou une classe

: 1.3 ehpargarap ua ini fd uaelbat nortap el snordisnoc ,elp mexe raP .)timil trtni nud essiarap suon tilibissop erin
375

4.2.3 On peut prvoir des spcialisations partielles de patrons de classes


4 - Spcialisation dun patron de classes

? sessalc ed nortap nud erilucitrap ecnatsni enu tse ep yt el tnod stejbod sac el snad noitini fd ettec tneived euq siaM .essalc ed mon e m m el ceva sralcd tnos slis ep yt emm ed tnos stejbo xued : sessalc ed snortap ed secnatsnid sap esilitun nol euq tnat ,eini fd tnemetia frap tse ep yt e m m noisserpxeL .ep yt e m m nud stejbo xued reuqilppas tiavuop noitatce ffad ruetarpol euq uv jd snova suoN

.tnemugra reimerp nos ed erutan al rus te tneitrappa elle elleuqal e s s a l c a l r u s s i o f a l a r e d n o f e s t cf n o it c n o f e n n o b al e d n oi t a i c n ats n il ,s a c r e i nr e d e c s n a D


template <class T> class A { template <class U> void fct (U x, T y) { ..... } ..... } ; /* ici le type T est utilis, mais */ /* il pourrait ne pas ltre */

: elp mexe tec snad em moc ,nortap essalc enud erb me m noitcno f enu reuqilppas tuep tilibissop etteC
class A { template <class T> void fct (T a) { ..... } ..... } ;

: elp mexe tec snad e mmoc ,erianidro essalc enud er b m e m n oi t c n o f e n u r e u q il p p as t u e p s n o it c n o f e d s n ort a p e d n o it i ni f d e d e ms i n a c m e L

. s n o it c n o f e d s n or t a p s e l r u o p n oi t a ci f i n g is e d s a p a n t u a f d r a p s ert m ar a p e d n o i t o n a L

: selp mexe seuqleuq icioV .selleusu snoitcno f ed sertmarap sel ruop silitu iulec elbalb mes e msinacm nu tnavius ,sert marap sniatrec ruop tua fd rap sruelav sed rei ficps ed elbissop tse li ,sessalc ed nortap nud noitini fd al snaD

376

7 Identit de classes patrons 6 Patrons de fonctions membres


e uqrameR

5 Paramtres par dfaut

Les patrons de classes CHAPITRE 18

template <class T, class U=float> class A { ..... } ; template <class T, int n=3> class B { ..... } ; ..... A<int,long> a1 ; /* instanciation usuelle A<int> a2 ; /* quivaut A<int, float> a2 ; B<int, 3> b1 ; /* instanciation usuelle B<int> b2 ; /* quivaut B<int, 3> b2 ;

*/ */ */ */

: eri a ni dr o n oi t c n o f e n u t cf t e eri a ni dr o ess al c e n u ts e A is , el p me xe ra P .s eri a n i dr o ses sa lc s e d sa c e l s na d e rt n o c n er s n o v a s u o n e u q e ll ec ets er e hcr a m d a L

.itimad noitaralcd ed stilibissop sellevuon ed tiudortni sessalc ed snortap sed ecnetsixeL

. .. se n n o d s erb me m e d erb mo n e m m el tno sessalc xued sel euq ,taolf ep yt ed serbmem sed euq etropmoc en >01 ,taolf<uaelbat essalc enuuq ,tni ep yt ed serbme m sed euq etrop moc en >01 ,tni<uaelbat essalc enuuq ehcas liuq tiardua f li ,ervu ne erttem al essiup ruetalipmoc el euq ruop siaM .unevnoc ert-tuep tiarua suon taolf>-tni noisrevnoc enu ,)1t=2t( sac reimerp el snad ,setreC .)...sesohc sel rebrutrep ed sap euqsir en noit -asilaicps elleutnev enuuq rs ert ,sulp ed ,te selbissop snosianib moc sel setuot eiovrp ess a l c e d n ort a p u d r u et p e c n o c e l e u q ti ar d u a f l i ,sr u o j u ot e n n oi t c n o f a l e c e u q r u o p( e i ni f d -rus noitatce ffal ed uo )stejbo xued sel snad serbmem sem m sed tne metcaxe resopsid neib cnod tua f li : erbmem erbmem( tua fd rap noitatcef fal ed essigas liuq ,noitatce ffal ed tnemennoitcno f nob nu rerussa uq tia f ne tnevres en ,sevitcirtser tne mmerappa ,selgr seC : erircd tiord el sap zeruan suov : s n o it a r a l c d s e c c e v a , e m m e D : erircd tiord el sap zeruan suov
tableau <int, 12> t1 ; tableau <float, 12> t2 ; t2 = t1 ; // incorrect car valeurs diffrentes du premier paramtre (float et int) tableau <int, 15> ta ; tableau <int, 20> tb ; ta = tb ; // incorrect car valeurs diffrentes du second paramtre (15 et 20)

: s n o it a r a l c d sec ceva ,1.3 ehpargarap ua inifd uaelbat nortap ud snoisopsid suon euq tnasoppus ne ,isniA .ruelav emm al tno snoisserpxe sertmarap sruel is te ep yt e mm ua tne metcaxe tnednopser -roc ep yt ed sertmarap sruel is ep yt emm nu tnordnopserroc snortap sessalc xued ,tiaf nE
377

8.1 Dclaration de classes ou fonctions ordinaires amies

8 Classes patrons et dclarations damiti

} ; { int x ; class essai template <class T> public : ... friend int fct (float) ; // fct est amie de toute instance du patron essai friend class A ; // A est amie de toute instance du patron essai

8 - Classes patrons et dclarations damiti

: sussed-ic euq tcf te tniop snortap semm xua leppa tnasia f elpmexe nu icioV

. )elbuod( tcf tni te >tni<tniop rus tnoretrop itimad snoitaralcd sel ,>elbuod ,tni< 2iasse ecnatnil ruop ,elpmexe raP .setnadnopserroc itimad snoitaralcd sel te 2iasse nortap el rap erng nortap essalc al ertne egalpuoc nu tilbat no ,sac dnoces el snad euq ,neib zetoN
template <class T, class U> class essai2 { int x ; public : friend class point<T> ; friend int fct (U) ; }

: eini fd isnia nortap essalc enu tse tniop euq snosoppuS .)es sa lc e d n ort a p u d sertmarap ed etsil al snad sini fd( steu m uo s fitce ffe tnos enrecnoc ecnatsnil rini fd ruop ssilitu sert marap sel euq noles stner ffid stcepsa xued erdnerp tuep tilibissop ettec ,tia f nE

378

8.3 Dclaration dun autre patron de fonctions ou de classes


: tcepsa dnoces el tnartsulli elpmexe nu icioV
... } ;

8.2 Dclaration dinstances particulires de classes patrons ou de fonctions patrons

Les patrons de classes CHAPITRE 18

template <class T, class U> class essai2 { int x ; public : template <class X> friend class point <X> ; template <class X> friend class int fct (point <X>) ; } ; template <class T, class U> class essai1 { int x ; public : friend class point<int> ; template <class T> int fct (T x) { ... } template <class T> class point { ... } ; friend int fct (double) ; // // // // la de la de

classe patron point<int> est amie toutes les instances de essai1 fonction patron int fct (double toutes les instances de essai1

: tcepsa reimerp el tnartsulli elpmexe nu icioV : eini fd isnia nortap noitcno f enu tcf te

.snoitcurtsnoc setnerf fid sed ecart enu rinetbod ni fa ruetcurtsnoc nu tnemelleici fitra tuoja tnemelp mis snova suoN .alec tnartsulli )i filpmis sruojuot siam( telpmoc elpmexe nu icioV .d2t ed sreitne xued ed uaelbat e mixued ud tneml emisiort ua erid--tsec ,]1[ d2t ed tneml emisiort ua ecner fr al etnesrper elle ; snes nu a ]2[ ]1[ d2t euq ellet noitaton enU .sreitne 2 ed uaelbat nu e m m-iul tse stneml 3 sec ed nucahc ,tid tnemertua ; >2,tni< uaelbat ep yt el nucahc tna ya stneml 3 ed uaelbat nu tse d2t ,te ffe nE
tableau <tableau<int,2>,3> t2d ;

: ei filpmis noa f ettec ed eini fd uaelbat essalc al tnatsnil ruop snordisnoc suon iS .snortap sed noit -isop moc al ed uej elpmis el rap )sulp uo( secidni xued uaelbat nu reuqilppal ed ,ecidni n u u a el b a t e d n or t a p n u i ni f d a n o u q s i o f e n u , e li c a f s rt ts e li u q r i o v s n o ll a s u o n , i cI .ecidni nu xuaelbat sed sti mil sruojuot sem mos suon suon ,sniomnaN .uaelbat essalc enud nies ua ][ ruetarpol rini fdrus tnemmoc sesirper srueisulp uv snova suoN

. 2 i a s s e n ort a p u d e c n a ts n i e l l e u q etr o p m i n ed sei ma tnos tcf snoitcno f ed nortap ud secnatsni sel setuot ,e m m eD .2iasse nortap ud ecnatsni elleuq etrop min ed seima tnos tniop nortap ud secnatsni sel setuot ,sio f etteC
379

9 Exemple de classe tableau deux indices

// implmentation dun tableau deux dimensions #include <iostream> using namespace std ; template <class T, int n> class tableau { T tab [n] ; public : tableau () // constructeur {cout << "construction tableau a " << n << " elements\n" ; } T & operator [] (int i) // oprateur [] { return tab[i] ; } } ; main() { tableau <tableau<int,2>,3> t2d ; t2d [1] [2] = 15 ;

: reralcd tia f tuot snovuop suon

template <class T, int n> class tableau { T tab [n] ; public : T & operator [] (int i) // oprateur [] { return tab[i] ; } } ;

9 - Exemple de classe tableau deux indices

.32 ertipahc ud 1 ehpargarap ua ,elpmexe emm ec rus ,eriaf el snordnerppa suon emmoc , noitpecxe enu rehcnelcd ed xueiciduj ert tnemelag tiarruop lI .1
// implmentation dun tableau 2d avec test dbordement dindices #include <iostream.h> template <class T, int n> class tableau { T tab [n] ; int limite ; // nombre dlments du tableau public : tableau (int init=0) { int i ; for (i=0 ; i<n ; i++) tab[i] = init ; limite = n-1 ; cout << "appel constructeur tableau de taille " << n << " init = " << init << "\n" ; }

: noitasilitud elp mexe nu te ei fido m isnia essalc al icioV .)tua fd rap 0 ruelav al snoriovrp suon ,tirucs rap( uaelbat nud noitaralcd al ed srol elaitini ruelav enu riovrp ed arttemrep alec ,puoc emm uD .tni ep yt ed tne ml nu ruetcurtsnoc nu ceva resilar al ed elica f tse lI .tni ne T ed noisrevnoc enu retsixe tiod liuq ei fingis aleC .0 ruelav al retce f fa ruel essiup no ,uaelbat ud stneml sed T ep yt el tios euq leuq ,euq erid--tsec ,elbissop tios esohc al euq li-tua f erocne siaM .0 ruelav al eria f ec ruop snoresilitu suon : noitcurtsnoc as ed srol uaelbat ud stneml sel suot resilaitinid ; l u n ec i d n i n u i nr u o f t ia v a r ue ta si li t ul i s e m m o c er ia f e d te egasse m nu rehci ffad snoretnetnoc suon suon ,ici : secidnid stne medrobd sel rerg ed : riovrp snolla suon ,etsilar sulp erdner el ruoP .uaelbat lanab nuuq sulp ed neir etroppan li ,leuq let ,sruelliad ; etsilp mis port tse elp mexe tec ,tnemetse finaM .secidnid euqnocleuq erb mon nu xuaelbat sed reuqilppal ed temrep esilitul no tnod erinam al elueS .ecidni nu uaelbat nu iroirp a tse uaelbat nortap erton euq neib areton nO
1

)1( secidni xued xuaelbat sed relupinam ruop uaelbat nortap ud noitasilitU

380

Les patrons de classes CHAPITRE 18

construction tableau a 2 construction tableau a 2 construction tableau a 2 construction tableau a 3 t2d [1] [2] = 15 t2d [0] [1] = -858993460 }

cout << "t2d [1] [2] = " << t2d [1] [2] << "\n" ; cout << "t2d [0] [1] = " << t2d [0] [1] << "\n" ;

elements elements elements elements

9 - Exemple de classe tableau deux indices

381

T & operator [] (int i) { if (i<0 || i>limite) { cout << "--debordement " << i << "\n" ; i=0 ; // choix arbitraire } return tab[i] ; } } ; main() { tableau <tableau<int,3>,2> ti ; // pas dinitialisation tableau <tableau<float,4>,2> td (10) ; // initialisation 10 ti [1] [6] = 15 ; ti [8] [-1] = 20 ; cout << ti [1] [2] << "\n" ; // lment initialis valeur par dfaut (0) cout << td [1] [0] << "\n" ; // lment initialis explicitement } appel constructeur appel constructeur appel constructeur appel constructeur appel constructeur appel constructeur appel constructeur appel constructeur appel constructeur appel constructeur --debordement 6 --debordement 8 --debordement -1 0 10 tableau tableau tableau tableau tableau tableau tableau tableau tableau tableau de de de de de de de de de de taille taille taille taille taille taille taille taille taille taille 3 3 3 3 2 4 4 4 4 2 init init init init init init init init init init = = = = = = = = = = 0 0 0 0 0 0 0 10 10 10

.01 ruelav al ceva silaitini uaelbat nud noitcurtsnoc enu te 0 ruelav al ceva silaitini eriaropmet uaelbat nud noitcurtsnoc enu evuort no leuqel ruop ,dt uaelbat ud sac el snad tnemerialc srt tiov es aleC .ep yt ec ed eriaropmet tejbo nu rerc ruop )tni(uaelbat ruet -curtsnoc ud leppal euqovorp noitcurtsni ettec ,)>...<uaelbat emro f al ed tse T ici( T ep yt ed tejbo nu eriaffa a nol euqsrol ,ehcnaver nE .esab ed ep yt ec snad tini eritne ruelav al ed noisrevnoc tnemelp mis a y li ,esab ed ep yt ed tneml nu engisd ]i[bat euqsrol ,tef fe nE .uaelbat ruetcurtsnoc ud tini = ]i[bat noitcurtsnil snad edisr noitacilpxeL .ecidni nu xuaelbat sel ruop uvrp euq segasse m ed sulp sio f xued tneitbo nol euq zerev -resbo suov ,xuaelbat stner ffid sed noitcurtsnoc ed segassem sel neib zeni maxe suov iS

)2( secidni xued xuaelbat sed relupinam ruop uaelbat nortap ud noitasilitU
e uqrameR

.)e v ir d ess al c al ed ellec ed euq esab ed essalc al ed noitpecnoc al ed uaevin ua neib issua( esab ed essalc al ed serb me m xua evird essalc al ed scca sed elrtnoc ed erita m ne ++C el etnesrp euq esselp -uos al snorrev suon siuP .)esab ed essalc al ed te evird essalc al ed( sruetcurtsnoc ertne snoitamro fnid noissimsnart ed tnassertni e msinacm nu erf fo ++C ,serb me m stejbod sac el snad tiassap es iuq ec ed ega mil ,tnemmoc etiusne snoreni maxe suoN .elpmis srt elp mexe nud ritrap ++C ne egatirhl ed ervu ne esi m al retnesrp suov rap snorecnem moc suoN . es a b e d s es s a l c sr u ei s u l p e d e vir d er t tuep essalc enu leuqua ecrg ,elpitlum egatirhl esirotua ++C euq snorrev suon ,tse sulp iuQ . e t n as si or c n o it as il ai c ps e d l it u o e m m o c e g a tir h d n o it o n a l er t ar a p p a isnia tiov nO .essalc ertua enu ruop esab ed essalc ruot nos rineved tuep evird essalc e n u : u ae v i n l u es n u t i m il sa p ts e n e g at ir h l , ert u o n E . esa b e d ess al c e m m e n u d se v -ird ert tnorruop sessalc srueisulp ,udnetne neiB .egatirhd emret el ei fitsuj iuq ec ,siuqca niatrec nu rus tnadno f es ne slituo xuaevuon ed reppolevd ed cnod temrep euqinhcet etteC .) n oi t ar al c d as e d et i a f n o it -pecxe( tnadnopserroc ecruos e mmargorp ud resopsid ed e m m in ,relip mocer al ed elitu sap ares en lI .esab ed essalc al noitseuq ne erttemer ed eriassecn tios liuq snas alec te ,sellev -uon ed tnatuoja ne iul ne tuot ,esab ed essalc al ed stilaitnetop sed aretirh evird essalc a L . esab ed etid etnatsixe essalc enud ritrap , evird etid ,essalc ellevuon enu rini fd esirotua suov li ,tef fe nE .)sessalc ed ,ecnerruccol ne( sleicigol stnasopmoc ed noitasilitur ed stilibissop sed esab al tse li ,reilucitrap nE .O.O.P al ed stne mednof s e d n ul e ut i ts n o c )s e v ir d s ess al c e d t n e m el a g e lr a p n o( e g a tir h d t p e c n o c el e u q ti as n O

Lhritage simple

19

: )engil ne ici tse eroloc noitcno f al( loctniop ed noitaralcd al ert tiarruop euq ec iciov ,roloc tniop nu rueluoc enu reubirtta enitsed te ,eroloc em mon loctniop euqi ficps erbmem noitcno f enu )tnatsnil ruop( sno yovrp suon iS .tniop ed evird essalc enu em moc loctniop rini fd ed stnet ert snov -uop suon ,snoitidnoc sec snaD .rueluoc al rini fd ed egrahc ,eroloc e mmon edoht m enu ,elpmexe rap ,erdniojda tiarruop no selleuqxua ,tniop essalc al euq stilannoitcno f se m m s e d r e s o p si d t n e m e ts e f i n a m t u e p ess a l c el l e t e n U . n al p n u d s r o l o c s t ni o p s e d r e l u pi n a m nitsed ,loctniop mmon essalc ep yt uaevuon nu rini fd ed nioseb sno ya suon euq snosoppuS
)tniop( esab ed essalc enud noitaralcD
/* ------------ Dclaration de la classe point ------------- */ class point { /* dclaration des membres privs */ int x ; int y ; /* dclaration des membres publics */ public : void initialise (int, int) ; void deplace (int, int) ; void affiche () ; } ;

: n o it ara lc d al snoleppar suon tnod ,11 ertipahc ua einifd tniop essalc eri merp al snordisnoC . t i m il t se s cc a sed elrtnoc el o te ,ruetcurtsed ed uo ruetcurtsnoc ed rinevretni sap tnasia f en elpmis elp - mexe nud ritrap ++C ne egatirhl ed ervu ne esim al ed sesab sel drobad tuot snosopxE

. t na vi us er tip a hc u d t ejb ol are f l i ,e lpi tl u m e g at ir h l t n a uQ .evird essalc enu tnemetrcnoc retiolpxe s n or d n er p p a s u o n ,s e v iss e c c u s s n o it a vir d e d s n oi t a u ti s s e l ni m a x e ri o v a s r p a , n i f n E .s ess al c e d s n ort a p s e d t e n o it at c e f f a d r u e t ar p o l e d , ei p o c er e d r u e t c urt s n o c u d t ne i v d a l i u q e c sr ol a s n ore n i ma x e s u o N . se ll e utr i v se d o ht m se d s ia i b e l ra p e ms i h p -rom ylop ud ervu ne esim al snad xuatne madnof tnordneived stcepsa seC .stejbo sec sec -ner fr sed uo stejbo sec rus sruetniop sed euq semm-xue stejbo sed uaevin ua tnat ,evird essalc enu te esab ed essalc enu ertne tilibitap moc ed snoitautis sel etiusne snoredroba suoN
384
Lhritage simple CHAPITRE 19

1 La notion dhritage

.tniop essalc al ed noitaralcd al tnanetnoc ,h.tniop ici mmon reihci f nud ; sneil ed noitidl ed tnemom ua reroprocnid eriassecn tse liuq tniop essalc al fitaler tejbo eludom nud : snosopsid suon euq snosoppus suon ,tnemsicrp sulP .tniop ua jd essalc enud noitasilitud selleutibah snoitidnoc sel snad scalp sem mos suon suon rac ,tniop essalc al ed etsil al sap zerevuort yn suoV .stilibissop sec tnartsulli e mmargorp nu icioV .)ehciffa te ecalped ,tini ici( tniop esab ed essalc al ed seuqilbup sedohtm xua ; ) eroloc ici( loctniop ed seuqilbup sedohtm xua : leppa eria f srola tuep loctniop ep yt ed tejbo euqahC : e ll eu su erinam ed loctniop ep yt ed stejbo sed reralcd snovuop suon ,eini fd isnia loctniop essalc a L . c i l b u p t o m u d n o iss i m ol t i ar i u d n o c i o u q ,s c c a s e d el r t n o c u a r c a s n o c e h p ar g -arap el snad ,niol sulp snorrev suoN .O.O.P al ed larng nalp el rus ,egatirhl ed riova tuep
pointcol p, q ;

nol euq etneuqr f sulp al edil dnopserroc alec ; )loctniop( evird essalc al ed scilbup serbmem sed tnores )tniop( esab ed essalc al ed scilbup serbmem sel euq ei fingis cilbup
class pointcol : public point

tom el ,sulp eD .tniop esab ed essalc al ed evird essalc enu tse loctniop euq ei ficps ellE : n oi t ar al c d a l z e t o N

/* --- Dclaration et dfinition de la classe pointcol ----- */ class pointcol : public point // pointcol drive de point { short couleur ; public : void colore (short cl) { couleur = cl ; } } ; #include <iostream> #include "point.h" // incorporation des dclarations de point using namespace std ;

t n i o p e d e v i r d , l o c t n i o p e ss al c e n U

class pointcol : public point { short couleur ; public : void colore (short cl) { couleur = cl ; } } ;

// pointcol drive de point

1 - La notion dhritage

385

.seuqilbup serbmem snoitcnof sel rap eutitsnoc eriotagilbo ecafretnil rap ressap snas erid--tseC .1

:++C rap etpoda elgr al oD ! evird essalc enu tnarc ne tnemelpmis ,essalc enud sevirp sennod xua tnemetcerid tnadcca noitcno f enu erircd elbissop srola tiardneived li ,te ffe nE .noitaluspacned epicnirp ua eriartnoc tiares iuq ec ,tniop ed svirp serb me m xua scca tiarua ,loctniop ed erb me m ,cehciffa noitcno f al euq tiarei fingis alec srola siaM
1

: etnavius erina m al ed cehciffa rini fd resnep zeirruop suov ,uaevin ec .)ehciffa tnemelag releppal ed elbissop tse liuq drat sulp snorrev suon( cehciffa tnatsnil ruop al-snoleppA .rueluoc al te sennodrooc sel sio f al rehci ffa esnec ,loctniop ed euqilbup erbmem noitcno f ellevuon enu erirc etsisnoc noitautis ettec reroilmad noa f erimerp enU .rueluoc as rus noit -amro fni enucua snonetbon suon ,loctniop ep yt ed tejbo nu ruop ehciffa snoleppa suon euq -srol ,elpmexe raP .senucal sed etnesrp eini fd snoval suon euq ellet loctniop essalc al rO . )02 ,01( esilaitini.p noitcurtsnil snad elp mexe rap ,niam noitcno f al ed nies ua ,res -ilitu sel ed simrep a suon iuq ec tseC .loctniop ed scilbup serbmem tnemelag tnos tniop ed sc il b u p ser b m e m s el , c i l b u p t o m u d i ol p m e l e c r g , e u q t n e m el p mis s n o v as s u o n , t n a ts ni l ruoP .scca sed elrtnoc ed eritam ne tnem maton ,stilibissop sel setuot rerolpxe ne sap tiahcrehc en ,++C ne egatirhl e mirpxes tne mmoc rertnom nitsed ,tnedcrp elpmexeL

386

2 Utilisation des membres de la classe de base dans une classe drive

t n i o p e d e v i r d , l o c t n i o p e s s a l c e n u d n oi t a si l i t u d e l p m e x E
Je suis en 10 20 Je suis en 12 24

Lhritage simple CHAPITRE 19

void affichec () { cout << "Je suis en " << x << " " << y << "\n" ; cout << " et ma couleur est : " << couleur << "\n" ; }

main() { pointcol p ; p.initialise (10,20) ; p.colore (5) ; p.affiche () ; p.deplace (2,4) ; p.affiche () ; }

Une mthode dune classe drive na pas accs aux membres privs de sa classe de base.

tniop ed euqilbup noitcnof enu sap tiatn ehciffa is sac el sap tiares en ec siaM .1

: ) h . t n i o p s n a d er u g i f noitaralcd as euq te tne mraps einruo f tse tniop essalc al ed noitini fd al euq snosoppus suon( loctniop essalc al ed noitini fd al tnanerper e mmargorp ed telpmoc elpmexe nu icioV loctniop epyt ed tejbo nu ruop noitasilaitinid noitcnof enU
void pointcol::initialisec (int abs, int ord, short cl) { initialise (abs, ord) ; couleur = cl ; }

ed tigas li ,noitnevnoc rap : euqilppa ert tiaved noitcnof ettec tejbo leuq reificps riova snas ehciffa leppa tne metcerid tia f snova suon ,cehciffa ed nies ua ,euq neib zetoN loctniop epyt ed tejbo nu ruop egahciffad noitcnof enU
void pointcol::affichec () { affiche () ; cout << " et ma couleur est : " << couleur << "\n" ; }

: tnemugra ne seuer sruelav siort ed rit -rap ,rueluoc te y ,x sennod xua sruelav sed reubirttad egrahc ,cesilaitini e mmon noitas -ilaitinid noitcno f ellevuon enu loctniop snad rini fd snovuop suon ,eugolana erina m enuD . loctniop ed erb me m noitcno f enu tse ehciffa euq rerdisnoc siamrosd tua f li ,tia f nE .essalc emm enud serb me m snoitcno f sel ruop euq elgr e mm al snovuorter suoN .cehciffa leppa tna ya iulec
1

: cehciffa ed elbissop noitini fd enu oD .essalc e m m ettec ed ehciffa noitcnof al leppa eriaf snio mnan tuep elle ,tniop essalc al ed y te x sevirp sennod xua tne metcerid redcca sap tuep en cehciffa erbme m noitcno f erton is ,epuccorp suon iuq sac el snad ,isni A .esab e d ess al c a s e d s ci l b u p s er b m e m x u a s c c a a e vir d ess al c e n u d e d o ht m e n u , e h c n a v er n E
387

using namespace std ; class pointcol : public point { short couleur ; public : void colore (short cl) { couleur = cl ; } #include <iostream> #include "point.h"

2 - Utilisation des membres de la classe de base dans une classe drive

/* dclaration de la classe point (ncessaire */ /* pour compiler la dfinition de pointcol) */

388

Lhritage simple CHAPITRE 19

void affichec () ; void initialisec (int, int, short) ; } ; void pointcol::affichec () { affiche () ; cout << " et ma couleur est : " << couleur << "\n" ; } void pointcol::initialisec (int abs, int ord, short cl) { initialise (abs, ord) ; couleur = cl ; } main() { pointcol p ; p.initialisec (10,20, 5) ; p.affichec () ; p.affiche () ; p.deplace (2,4) ; p.affichec () ; p.colore (2) ; p.affichec () ; } Je suis et Je suis Je suis et Je suis et en ma en en ma en ma 10 20 couleur est : 5 10 20 12 24 couleur est : 5 12 24 couleur est : 2

3 Redfinition des membres dune classe drive


3.1 Redfinition des fonctions membres dune classe drive
.cehciffa e mmon erb me m noitcno f enud , loctniop snad ; ehciffa e mmon erb me m noitcno f enud ,tniop snad : s i o f al s n o is o ps i d s u o n , l o c t n i o p ess al c e d e l p m e x e r ei nr e d e l s n a D

.++C ne sap etsixen tilibissop ellet enu ; lanif lc tom el ceva tnai filauq al ne evird essalc enu ecnassian rennod ed essalc enu eridretni tuep nO .cilbup ed ecalp al sdnetxe lc-tom ua leppa tia f ellE .avaJ ne rs neib etsixe egatirhd noiton a L

noitasilitu nos te loctniop essalc ellevuon enU


avaJ n E

: loctniop ed serbme m snoitcno f sellevuon sel esilaitini te ehciffa tnam mon ne tnedcrp ehpargarap ud elpmexel remro fsnart snovuop suon tne mmoc icioV .ehciffa::tniop.p arelleppa no ,tniop essalc al ed ehci ffa noitcno f al resilitu tnemulosba tneit nol iS .loctniop snad eini fder noitcno f al ed arigas li ,ehciffa.p noitcno f al elleppa no ,loctniop ep yt ed p tejbo nu ruop ,is ,elbarap moc erinam eD .)ehciffa::tniop arelleppa no ,ici( euluov edohtm al tnemelbanevnoc resilacol ruop )::( etrop ed noitulosr ed ruetarpol leppa eriaf srola tua f lI .loctniop ed ehciffa noitcno f al ed fisrucr leppa nu tiareuqovorp alec : tnavarapua e mmoc tniop ed ehciffa noitcno f al releppa sulp tuep en no ,loctniop ed ehciffa noitcno f al ed nies ua ,te ffe nE .noituacrp etitep enu tnanne yo m ,++C ne elbissop tnemev -itce ffe tse iceC .mon emm el rennod ruel retiahuos tiarruop no ,snoitidnoc sec snaD .essalc ruel ed sennod sed sruelav sel rehci ffa riovas ,liavart emm el tno f sedohtm xued sec rO
389

Je suis et Je suis Je suis et

main() { pointcol p ; p.initialise (10,20, 5) ; p.affiche () ; p.point::affiche () ; // pour forcer lappel de affiche de point p.deplace (2,4) ; p.affiche () ; p.colore (2) ; p.affiche () ; } #include <iostream> #include "point.h" using namespace std ; class pointcol : public point { short couleur ; public : void colore (short cl) { couleur = cl ; } void affiche () ; // redfinition de affiche de point void initialise (int, int, short) ; // redfinition de initialise de point } ; void pointcol::affiche () { point::affiche () ; // appel de affiche de la classe point cout << " et ma couleur est : " << couleur << "\n" ; } void pointcol::initialise (int abs, int ord, short cl) { point::initialise (abs, ord) ; // appel de initialise de la classe point couleur = cl ; }

en ma en en ma

10 20 couleur est : 5 10 20 12 24 couleur est : 5

3 - Redfinition des membres dune classe drive

. s sir otua t n eio s n oi t seu q ne s c ca s el eu q r s ne ib t na s o ppu s nE .1

: z er d i s n o C . s ti l -ibissop xued sec ertne egaxim ed ,emm ,uo noitini fdrus ed sac ne sellerutan sniom tnos ses -ohc sel ,riov el av no e mmoc ,ehcnaver nE .esab ed essalc al ed erutangis e m m ed noitcno f enu euqsa m elle ,evird essalc enu snad eini fder tse noitcno f enuuqsrol euq ios ed av lI

.sap ecalp - mer el en li ; A ed tirh a erb me m ua etuojas B snad inifd a erb mem el euq neib zetoN . a::A.b rap ) A ed tirh( tni ep yt ed a ennod erbmem ua redccad elbissop sruojuot ares lI .b ed taolf ep yt ed a erb me m ua ecner fr are f a.b ,B ep yt ed tse b tejbol is ,sac ec snaD
1

: a mmon ennod erb me m ertua nu rini fd ,elpmexe rap ,arruop A ed evird B essalc enu
class A { ..... int a ; char b ; ..... } ;

: is ni a ei n i f d ts e A ess al c e n u i s , t n e m -sicrp sulP .sennod serbmem xua neib issua tuot euqilppas serb me m snoitcno f sed noit -ini fder al ed soporp tid snova suon euq ec ,tnaruoc sniom iolp me nud tios alec euq neiB

.esab ed essalc al snad lanif lc tom el ceva tnaralcd al ne erb me m noitcno f enud noitini fder al eridretnid tnemelag te mrep egagnal eC .sevird ses -salc sed ecnassian rennod ed essalc enu eridretnid tiattemrep avaJ euq tid jd a nO
avaJ n E

seinifder tnos ehci f fa te esilaitini sedohtm sel elleuqal snad loctniop essalc enU
Je suis en 12 24 et ma couleur est : 2

390

3.3 Redfinition et surdfinition 3.2 Redfinition des membres donnes dune classe drive
Lhritage simple CHAPITRE 19
class B : public A { float a ; ..... } ;

3 - Redfinition des membres dune classe drive

391

class A { public : void f(int n) { ..... } // f est surdfinie void f(char c) { ..... } // dans A } ; class B : public A { public : void f(float x) { ..... } // on ajoute une troisme dfinition dans B } ; main() { int n ; char c ; A a ; B b ; a.f(n) ; // appelle A:f(int) (rgles habituelles) a.f(c) ; // appelle A:f(char) (rgles habituelles) b.f(n) ; // appelle B:f(float) (alors que peut-tre A:f(int) conviendrait) b.f(c) ; // appelle B:f(float) (alors que peut-tre A:f(char) conviendrait) }

: s n a d e m m o c , A e d f s n o it c n o f sed enul ed noitini fder enu B snad tiautce ffe nol is tiariudorp es enmonhp e m m e L .A ed )rahc( te )tni(f snoit - c n o f s e l s il it u t i ar u a n o , B s n a d e i n i f d t t i a v a n f n o i t c n o f e n u c u a i S .s a c x u e d s e l s n a d eleppa evuort tses iuq B ed f noitcno f al euq rdisnoc an ruetalip moc el ,)c(f.b te )n(f.b sleppa sel erduosr ruoP .taolf ep yt el ruop f ed noisrev emisiort enu B snad tuoja a no icI
class A { public : void f(int n) { ..... } // f est surdfinie void f(char c) { ..... } // dans A } ; class B : public A { public : void f(int n) { ..... } // on redfinit f(int) dans B } ; main() { int n ; char c ; B b ; b.f(n) ; // appelle B:(int) b.f(c) ; // appelle B:f(int) }

: elpmexe reinred nu icioV .sertua sel etros euqleuq ne e h ca c e v ir d es sa lc e n u s na d e d o ht m e n u d n oi t i n i f d er e n u u q t i o v n o ,sa c r e i nr e d ec s na D


class A { public : void f(int n) { ..... } void f(char c) { ..... } } ; class B : public A { public : void f(int, int) { ..... }

-ugra ne seinruo f snoita mro fni sed noitcno f ne isiohc ,ruetcurtsnoc nud leppal arenartne ) wen rap uo noitaralcd rap( tejbo nud noitarc etuot ,ruetcurtsnoc nu sniom ua etsixe liS : )evird essalc enud sap tigas en li o sac el snad( essalc enud ruetcurtsed ud uo ruetcurtsnoc nud leppal tnanrecnoc selgr sed leitnessel snoleppaR

.s et n a d n e c s a s es s et u ot s n a d t e e nr e c n o c ess al c al s n a d si o f al , n n o d m o n e d se d o h t m se d e l b m es ne l sr u o j u o t er dis n oc n o , a vaJ n E


avaJ n E

. )e m m e l , i c i , t n a t s er s l ep p a s er t u a s e d t n e m e tr o p m o c e l( ) r a h c ( f : : A e d l e p p a l sr o l a ar i u d n o c ) c ( f . b n o i t c ur t s n i l : noitcurtsnil )cilbup uaevin nu ( tiudortni no ,etnedcrp A essalc al snad is ,elpmexe raP .gnisu evitcerid enu tnasilitu ne sessalc srueis -ulp snad esssa f es eini fdrus noitcno f enud ehcrehcer al euq resopmid elbissop tse lI
using A::f ; // on rintroduit les fonctions f de A

.)ruoter ed ruelav as te stnemugra ses tnetrop mi uep( mon e mm ed evirp noitcno f enu rinifd yd ti ffus li : esab ed sesalc enud erbmem noitcno f enud evird essalc enu snad iolpmel eridretni ruop e yolpme ert tuep tiralucitrap ettec euq sruelliad tiov nO
Lorsquune fonction membre est dfinie dans une clase, elle masque toutes les fonctions membres de mme nom de la classe de base (et des classes ascendantes). Autrement dit, la recherche dune fonction (surdfinie ou non) se fait dans une seule porte, soit celle de la classe concerne, soit celle de la classe de base (ou dune classe ascendante), mais jamais dans plusieurs classes la fois.

: m us r nE .s a p t ne m et se f i n a m t n ei v n oc e n el le u q al , B e d ) tni , tni (f noitcno f euqinul euq rdisnoc an ruetalip moc el ,)c(f.b te )n(f.b sleppa sel ruop ,icI
main() { int n ; char c ; B b ; b.f(n) ; // erreur de compilation b.f(c) ; // erreur de compilation }

392

4.1 Rappels

4 Appel des constructeurs et des destructeurs


e uqrameR
Lhritage simple CHAPITRE 19

...tua f d rap ru et curt s n oc nu d l e ppa a y liu q i s sua ti d nO .1

: i ce c a nol is ,elpmexe raP .)31 ertipahc ud 5 ehpargarap ua( serb mem stejbo sed sac el snad sopxe snova suov suon euq iulec euq emm el tse emsinac m e L .esab ed essalc al ed ruetcurt -s n o c n u ert t e ms n ar t et i a h u os n o l e u q s n o it a mr o f n i s e l , e vir d ess a l c e n u d r u et c urts n o c nud noitini fd al snad ,rei ficps ed tilibissop al uvrp a ++C ,tia f nE ! ruetcurtsnoc nos senitsed iroirp a tnos B ep yt ed tejbo nud noitarc al ed srol seinruo f snoitamro fni sel ,te ffe nE .stnemugra sed etissecn A ed ruetcurtsnoc el euqsrol esop es emlborp nu ,sio fetuoT

.)sruetcurtsnoc sed leppal ed esrevni erdrol snad sleppa tnos sruet -curtsed sel( A ed iulec ed leppa siup ,B ed ruetcurtsed ud leppa tne meuqita motua arua y li ,B ep yt ed tejbo nud noitcurtsed al ed srol : sruetcurtsed xua euqilppas ehcramd emm a L .A ed ruetcurtsnoc ud leppal B ed ruetcurtsnoc el snad riovrp sap arua yn li : ++C rap egrahc ne sirp tse e msinacm eC .B ed ruetcurt -snoc ua leppa eria f te B euqi ficps tse iuq ec rap retlpmoc el siup ,A ed ruetcurtsnoc ua leppa eria f cnod ,A ep yt ed tejbo nu rerc drobad tuot tua f li ,B ep yt ed tejbo nu rerc ruoP
} ; } ;

: r u e t c urt s e d n u t e r u e t c urt -snoc nu edssop essalc euqahc euq snosoppus ,sedi sel rexi f ruoP .tnesiudortni selleuq euq - ih crar i h tc epsa l e d etp mo c tn a ne t ne ,s e vir d se ssa lc se d s ac u a tn es il ar n g es se lg r s eC

.tejbol ed noitcurtsed al tnava leppa ares li ,ruetcurtsed nu etsixe liS .)! eria f el ed noaf elues al emm tsec( leppa tios en ruetcurtsnoc nuuq snas ,tejbo nu rerc ed elbissop tneived li ,sio f etteC .tejbo nud noitarc al ed srol snoitamro fni sed resicrp ed elbissop sap tsen li ,ruetcurtsnoc nucua etsixen liS .leppa tios en ruetcurtsnoc nuuq snas tejbo nu rerc ed sac ec snad el b iss o p m i c n o d ts e l I . n oi t a li p m o c e d r u err e a y l i ,t n ei v n o c e n r u e t c ur ts n o c n u c u a i S . st n e m
1

4.3 Transmission dinformations entre constructeurs 4.2 La hirarchisation des appels


{ class A public : ..... ~A () A (...) ..... {

4 - Appel des constructeurs et des destructeurs

class B : public A

public :

..... ..... ~B () B (...)

393

.es ab e d e s s a l c a l r e n g i s d r u o p r e p u s t o m e l sr o l a es il i t u n o : e s a b e d e ss a l c e n u d r u e t c ur t -snoc nud eticilpxe leppal riovrp ed eriassecn tse li ,evird essalc enud ruetcurtsnoc nu snaD .etner ffid noa f ed emirpxes elle siam ,elbissop etser esab ed essalc enud ruet -curtsnoc nu te evird essalc enud ruetcurtsnoc nu ertne snoitamro fnid noissi msnart a L
avaJ n E

.)tniop ep yt ed stejbo sel ruop suvrp riova sel tuep no sia m( ici ecnedicni enucua an tniop snad tua fd rap stne mugrad elleutnev ecnesrp al euq zetoN .1 te 0 ,5 stnemugra sel ceva loctniop ed leppal ; 0 te 5 stnemugra sel ceva tniop ed leppal : are n art n e : n oi t ar al c d a l ,s n o i ti d n o c s e c s n a D : e l p m e x e r a p ,l o c -tniop snad tua fd rap stne mugra sed rennoitne m ed elbissop sruojuot etser li ,udnetne neiB .s t ne m -ugra xued loctniop ruetcurtsnoc nucua etsixen liuqsiup ruetalipmoc el rap etejer ares : n o it ar a l c d a l , e h c n a v er n E .3 te 51 ,01 stnemugra sel arvecer iuq loctniop ed leppal ; 51 te 01 stnemugra sel arvecer iuq tniop ed leppal : are n art n e : noitaralcd al ,isniA .loctniop ed stnemugra sreimerp xued xua )ici( tnadnopserroc dro te sba snoitamro fni sed tniop ed ruetcurtsnoc ua noissimsnart al ecalp ne arttem ruetalipmoc e L : er i na m et te c ed e t t- ne n os ar irc n o ,seuer snoita mro fni serimerp xued sel tniop ette msnarter loctniop euq etiahuos nol euq te
} ; ..... } ; ..... pointcol (int abs, int ord, char cl) : point (abs, ord) pointcol a (10, 15, 3) ; pointcol q (5, 2) pointcol (int abs = 0, int ord = 0, char cl = 1) : point (abs, ord) pointcol b (5) ; { class point ..... public :

394

Lhritage simple CHAPITRE 19

point (int, int) ; {

class pointcol : public point

..... public :

pointcol (int, int, char) ;

4 - Appel des constructeurs et des destructeurs

395

4.4 Exemple
: ) e u qi t ar p n e t r t ni tuot ,rs neib ,tiarevlne ruel iuq ec( sruetcurtsed te sruetcurtsnoc sruel seti mil t tno loc -tniop te tniop sessalc sel : noitautis ettec tnartsulli emmargorp ed telpmoc elp mexe nu icioV
#include <iostream> using namespace std ; // ************ classe point ********************* class point { int x, y ; public : point (int abs=0, int ord=0) // constructeur de point ("inline") { cout << "++ constr. point : " << abs << " " << ord << "\n" ; x = abs ; y =ord ; } ~point () // destructeur de point ("inline") { cout << "-- destr. point : " << x << " " << y << "\n" ; } } ; // ************ classe pointcol ****************** class pointcol : public point { short couleur ; public : pointcol (int, int, short) ; // dclaration constructeur pointcol ~pointcol () // destructeur de pointcol ("inline") { cout << "-- dest. pointcol - couleur : " << couleur << "\n" ; } } ; pointcol::pointcol (int abs=0, int ord=0, short cl=1) : point (abs, ord) { cout << "++ constr. pointcol : " << abs << " " << ord << " " << cl << "\n" ; couleur = cl ; } // ************ programme dessai **************** main() { pointcol a(10,15,3) ; // objets pointcol b (2,3) ; // automatiques pointcol c (12) ; // ..... pointcol * adr ; adr = new pointcol (12,25) ; // objet dynamique delete adr ; } ++ ++ ++ ++ ++ constr. constr. constr. constr. constr. point : 10 15 pointcol : 10 15 3 point : 2 3 pointcol : 2 3 1 point : 12 0

: erirc snoirruop suon ,ici snes ed erug tian alec euq neib ,elpmexe raP .noisserpxe elleuq etropmin re yolpme tuep nO .stnemugrad smon sed ,iciuqsuj tia f snoval suon e mmoc ,retimil es ed gilbo sap tsen no ,esab ed essalc al ed ruetcurtsnoc nu erttemsnart snoitamro fni sel ennoitnem nol euqsrol ,sruellia raP .noitalip moc ed ruerre enu tituoba no ,sac sertua sel snaD .tnemugra snas ruetcurtsnoc nud esopsid esab ed essalc al o el l e c ti os e l b a t p e c c a n oi t a u ti s e l u e s al e u q d n er p m o c n o , e vir d e ss a l c a l e d r u e t c ur t -snoc ud rinevorp sulp tnevuep en ic-sellec emmoC .uaevuon ed esop es esab ed essalc al ed ruetcurtsnoc el rap seudnetta snoitamro fni sed noissi msnart al ed e mlborp el ,etrop moc ne esab ed essalc al euq srola ,ruetcurtsnoc ed sap edssop en evird essalc al is ,ehcnaver nE .ruetcurtsed ed sap edssop en elle is e mm ed av ne lI .esop es en reilucitrap emlborp nucua ,ruetcurtsnoc ed sap edssop en esab ed essalc al iS .ruetcurtsnoc nu sniom ua tneiadssop evird essalc al te esab ed essalc al : elleusu sulp al noitautis al reni maxed snonev suoN

. selbasilitur sess a lc e d n o it p ec n oc a l s na d l at ne ma d n o f tc e psa t ec r us s n or d ne i ver s u o N .es a b e d ess al c al ed svirp serbmem xua scca sap an evird essalc enud erb mem nu ,tef fe nE .eunoc t a tniop essalc al euq ellet sniom ud ,elbissop sap tsen alec rO .y ed te x ed sruelav s e l er t ar a p p a r i o v t i a h u os er t - t u e p z e ir u a s u o v , l o c t n i o p ~ r a p h c i f f a e g a s s e m e l s n a D

evird essalc al ed te esab ed essalc al ed sruetcurtsed te sruetcurtsnoc sed leppA


3

396

4.5 Complments

Lhritage simple CHAPITRE 19

pointcol (int abs, int ord, char cl) : point (abs + ord, abs - ord) ++ ++ ++ --------constr. pointcol constr. point : constr. pointcol dest. pointcol destr. point : dest. pointcol destr. point : dest. pointcol destr. point : dest. pointcol destr. point : : 12 0 1 12 25 : 12 25 1 couleur : 12 25 couleur : 12 0 couleur : 2 3 couleur : 10 15 1 1 1

e uqrameR

.evird essalc al ed epyt ud tejbo tuot erid--tseC .2 .evird essalc enud erbmem noitcnof etuot erid--tseC .1

.scilbup serb me m sed svirp serb - m e m s el r e u g n i tsi d e d t i a tt e mr e p te s l c-st o m s e d i ol p m el e u q u v s n o v a s u o N .)es sa lc e tt ec e d ep yt ud tejbo leuq etrop min erid--tsec( essalc al ed ruetasilitul tne melag sia m ,seima snoitcno f xua uo serb me m snoitcno f xua tnemelues non elbissecca tse erbmem el : cilbup ; e ss a l c a l e d s e i m a s n oi t c n o f xua te )sevirp uo seuqilbup( serb me m snoitcno f xuauq elbissecca tsen erbme m el : virp : essalc ed erb - m e m n u r u o p s el b iss o p st u t a ts x u e d e u q t i a tsi x e n li u q r d is n o c s n o v a s u o n , i c i u qs uJ
etav irp ci lbup

d et ce torp

.es ab e d es sa lc a l ed serb me m xua sccad stilibissop sel erdniertser tuep no : evird essalc al ed noitpecnoc al ed sroL .e m m-elle evird essalc al ruop scilbup serb mem sed e mmoc siam evird essalc al ed ruetasilitul ruop svirp serbme m sed e mmoc tnetrop moc es sgtorp erb me m se L .) l c- t o m( g t or p t i d t u t a ts e m isi or t n u e ts i x e li ,s n oss i a n n o c suon euq svirp te scilbup stutats sed sulp ne : esab ed essalc al ed noitpecnoc al ed sroL : x u a e v i n x u e d e c t e ,s c c a d n oi t a sir ot u a d setros xued sec rus eitrap ne rinevretnid temrep ++C ,tnanetnia m riov el snolla suon em moC . esab e d ess al c as ed s ci lbup serb -mem xuauq isnia ,scilbup serbmem ses scca tno evird essalc al ed sruetasilitu sel
2

; esab ed essalc al ed scilbup serbmem xua scca a evird essalc al


1

: e ll e u q a l s n a d ellec erid--tsec ,ellerutan sulp al egatirhd noitautis al euq iciuqsuj ni maxe snovan suoN

.es ab e d es sa lc e n u ne e vir d ess a l c e n u d e ti ci l p m i n o isr e v n o c e d s t il i bis s o p s e d e c n a ssi a n n o c a l et iss e c n er v u ne esim ennob as rac ,niol sulp uep nu nimaxe ares eipocer ed ruetcurtsnoc ud sac e L

5.1 Les membres protgs

5 Contrle des accs


e uqrameR
5 - Contrle des accs

397

ts e li o eru se m al s na d ,s e n n o d se d t n os ser b m e m s ec is t ne m ma t o n ,e v ir d es sa lc e n u d ruetpecnoc ua se mlborp sed resop tuep aleC .)...evird essalc ettec ed stejbo ,evird essalc enud serb me m snoitcnof ,essalc ettec ed stejbo( essalc al ed rueirtxel snorelleppa suon euq ec siuped selbisseccani tnemevitinifd tnos essalc enud svirp serb me m se L

e r i n a m al e d

eh ciffa

erb me m noitcno f enu ,

loc tn iop

: e t na v iu s snad ,rini fd ed elbissop tneived li


class point { protected : int x, y ; public : point ( ... ) ; affiche () ; ..... } ;

: ess al c ert o n is ni a s n os si ni f d su o n iS . e d t e s v ir p s er b me m x ua re d cc a d , e d e vir d e ss a l c e n u d erbme m noitcno f enu ruop ,tilibissop mil uqov snova suon ,2 ehpargarap ud tubd uA
tniop tn iop y x tniop lo c tn iop

.essalc ettec ed sruetasilitu xua selbisseccani sac sel suot snad tnatser ne tuot ,evird essalc el le u t ne v e n u d s er b me m x ua s el bi sse cc a t n or es sl i s ia M . s vir p ser b m e m se d e m m oc t ne s -siarappa sli iuq ruop ,essalc al ed ruetasilitul selbisseccani tnetser sgtorp serb me m se L
// partie prive

: e t na v iu s er ul l a l er d n er p t u e p es s a l c e n u d n o it i ni f d a l , el p m e x e r a P .st n e d c r p s l c-s t o m x u e d sel e mmoc eiolpmes iuq detcetorp lc-tom el rap ini fd tse gtorp tutats emisiort e L
398
Lhritage simple CHAPITRE 19

5.3 Intrt du statut protg 5.2 Exemple


class pointcol : public point { short couleur ; public : void affiche () { cout << "Je suis en " << x << " " << y << "\n" ; cout << " et ma couleur est " << couleur << "\n" ; } class X { public : ..... protected : ..... private : ..... } ; // // partie protge partie publique

.evird essalc al ed sruetasil - it u x ua u q is ni a e vir d es sa lc al e d s ei ma s n o it c n o f x u a t e s er b me m s n oi t c n o f x ua si o f al erid--tsec , edno m el tuot selbissecca tnos esab ed essalc al ed scilbup serbmem se L : sac ec snad ,euq snoleppaR
class pointcol : public point { ... } ;
f

: s n ad e m m oc ,evird essalc al ed noitaralcd al snad l c t o m e l r a p et i u d or t ni r a c e u qi l b u p etid ,noitavird ed etnaruoc sulp al e mro f al rinevretni tneiasia f stnedcrp selpmexe se L
c ilbup

.)++C ne sap etsixen egakcap ed noiton al( egakcap em m ua tnanetrappa sessalc x ua iss ua s ia m ,se vir d s ess al c x u a t ne me l ues n on s elb iss ec ca t n os s g t orp serb m e m s el : e t n er f i d u e p n u n o it a c i fi n g is e n u c e v a si a m , a v aJ n e iss u a e ts i x e g t or p t u t ats e L
avaJ n E

.) B s n a d e ir p o r p p a i t i m a d n o i t a r a l c d e n u r i o v r p e d e l b is s o p r s n e i b t s e l i( B e d e i m a t n e m e u q i t a m o t u a s a p ts e n , A e d e v i r d B i s t e A e s s a l c e n u d e i m a e r a l c d t a is , is n i A . s a p t n e t ir h s e n i t i m a d s n o i t ar a l c d s e l , e h c n a v er n E 2 .esab ed essalc as snad sgtorp sralcd serb me m xua scca neib tnorua evird essalc enud sei ma snoitcno f sel ,reilucitrap nE .evird essalc al ed serb mem snoitcno f sel euq sccad snoitasirotua semm sed tnem -etcaxe tnesopsid serinred sec ,seima snoitcno f sed edssop evird essalc enuuqsro L 1
f

.sennod sed selletnedicca snoitaci fidom ed seuqsir sed ceva riov neir sulp an alec ; ruetasilitul rap tnem -r bi l d u n o c l o i v n u d t i gas li , u d n et n e ne i B .s et na d n o pserr oc se n n o d x ua re d c ca d t n at -temrep seirporppa snoitcno f sel tnanetnoc evird essalc enu rerc ed egtorp eitrap enu tnatropmoc essalc enud ruetasilitu nu ehcp men neir ,te ffe nE .sennod sed noitaluspacned epicnirp el )tnemmeicsnoc( reloiv ed sne yom sel puoc e m m ud er ffo nouq ertannocer tua f li ,snio mnaN .)erinred ettec ed ruetasilitul ruop svirp serbme m sed selbar -ap moc tnatser ne tuot( evird essalc enud ruetpecnoc el ruop scilbup serb me m sed selbar -ap m oc t n os sl i si a m , ess al c a l e d r ue ta si li t ul r uop s v irp s erb me m se d e m m oc t n et n esrp es sgtorp serb me m sel : etse finam srgorp nu cnod eutitsnoc gtorp tutats ud noitcudortniL .rng edoc ud ticaci ffel eriun tuep eria f ed noaf ettec ,sulp eD .eriotagilbo eca fretnil rap ressap ed , ruetasilitu lanab nu emmoc ,tniartnoc
399

5.4 Drivation publique et drivation prive


se uqrameR
5 - Contrle des accs

5.4.1 Rappels concernant la drivation publique

.loctniop snad einifder t tian ecalped uo ehciffa serbmem snoitcnof sed enul euq sniom .1

: t p e c c a ar es i c-i u l e c , t n e m e ll er u t a n , e u q sr ol a
p.affiche () p.deplace (...) /* ou mme : /* ou mme : p.point::affiche () p.point::deplace (...) */ */

: ruetalipmoc el rap stejer tnores stnavius sleppa sel ,


1

loc tniop

: snoitaralcd sec ceva ,elpmexe raP .esab ed essalc as ed scilbup serbmem xua sccal evird essalc enud ruetas - il i t u n u e r i d r e t n i d el b i s s o p t s e l i , l c-t o m u d u ei l u a l c-t o m el t n asi l it u n E
c i lbup etav irp

.s e g t or p u o s e v -irp snoitavird sed em mon nol euq ec tnassini fd ne setniertser ert tnevuep stilibissop seC
euq ilbup noi tav ir d aL

vi rp gto rp ci lbup no i tavi rd e llevuon ed sac ne ,ev ird essa lc a l s n a d t u t at s u a e v u o N

non non iuo

non iuo iuo

ev ird essalc evi rd essa lc a l ed al ed se ima te serb mem esab r u e t a s il i t u n u s c c A snoitcnof xua sccA ed essalc al snad tutatS

: noitautis al tnalutipacr uaelbat nu icioV . e vir d ess a l c a l e d ess al c e l l e v u o n e n u d noitavird ed sac neuq tneivretnin euqramer etteC .esab ed essalc al snad tneiava sliuq tutats el evird essalc al snad tnevresnoc esab ed essalc al ed serb me m sel suot ,sulp eD .evird essalc ettec ed sruetasilitu xua te evird essalc al ed sei ma uo serbmem snoitcno f xua sio f al selbisseccani tnos esab ed essalc al ed svirp serbmem se L . e vir d e ss a l c e tt e c e d sr u et as il it u x u a s a p s i a m , e v ir d ess a l c a l e d s e i m a s n o it c n o f xua te serb me m snoitcno f xua selbissecca tnos esab ed essalc al ed sgtorp serb mem se L
400
Lhritage simple CHAPITRE 19

5.4.2 Drivation prive

p.colore (...)

ep yt ed tse iS
p

class point { ..... public : point (...) ; void affiche () ; void deplace (...) ; ... } ;

class pointcol : private point { ..... public : pointcol (...) ; void colore (...) ; ... } ;

v irp g torp c ilbup

: e lp m e x e t e c s n a d e m m o c t n e m e t i c i l p x e t n a r a l c d e r e l n e , e s a b e d e s s a l c a l e d er b m e m n u c i l b u p ressial ed ,egtorp uo evirp noitavir d enu snad ,elbissop tse li ,rue ugir etuot nE 3 .) e v ir p u o e u q i l b u p( n o i t a v i r d e d e p y t e l t s e l e u q , es a b e d e ss a l c e u q a h c r u o p , e ri d sr o l a ar d u a f l i , t n e m s i c r p s u l P . e l p i t l u m e g a t i r h d s a c e l s n a d s u g i b m a t n or e s te s n o i s s er p x e s e L 2 .erutu f noitavird enu ruop svirp e mmoc srdisnoc tnores sli ,ehc -naver nE .evird essalc al ed seima snoitcno f xua te serbmem snoitcno f xua selbissecca t ne tser e sa b e d essa lc al e d s g t or p ser b m e m s el , e v ir p n o it a vir d e n u d sa c e l s na D 1
e v i r p n o it a v i r d e uq i l bu p n o i tav i r d

se uqrameR

.sto m siort sec ed nul rap tnemelag ini fd )virp uo gtorp ,cilbup( essalc enud serb mem sed tutats el ceva ,etavirp uo detcetorp ,cilbup sto m sed nul rap eini fd ,)evirp uo egtorp ,euqilbup( esab ed essalc as troppar rap essalc enud noitavird ed edom el erdno fnoc sap en edrag ardnerp nO .serueirtlu noitavird ed srol sgtorp em moc srdisnoc tnores esab ed essalc al ed scilbup serb me m sel ,sac ec snaD .evirp noitavird al te euqilbup noitavird al ertne eriaidm -retni ,egtorp noitavird etid ,noitavird ed eriatne mlppus tilibissop enud esopsid ++C ! etner f fid tse noitasilitu nos elues , es a b e d ess a l c a l e m m o c t i g a e l l e : )s t il a n n o i t c n o f s e l l e v u o n e d s a p ,s e n n o d s e ll e v u o n ed sap( sulp ed retroppa neir en ,etimil al ,tuep evird essalc al ,sac ec snad ; secnegixe seniatrec erdnopr erina m ed ,essalc enud eca fretnil retpada etiahuos nol euqsrol ; senneicna xua redcca ruetasilitul ressial ed nosiar enucua a yn liuq te e vir d e ss a l c a l s n a d s e i ni f d er t n o s es a b e d es s a l c al e d s e li t u s n oi t c n o f s el s e t u ot e u qsr o l : elp mexe rap ,sicrp neib sac sed snad euq e yolp me ares en esab ed essalc al scca sed erutemre f ed euqinhcet ettec euq ertnom aleC .)tniop ed noitaralcd al ertannoc tiallaf li ,loctniop essalc al ruop ecalped erbmem noitcnof al ed ecnetsixel ertannoc ruop ,stnedcrp sehpargarap sed selp mexe sel snad : elleusu noit - a u ti s al s n a d e m m e d s a p ti al l a n e n li( es a b e d es s a l c as e d el l e c eri l e d ni os e b t n e m e n u c u a tian liuq snas ,noitaralcd as tnasil ne essalc al ed stilannoitcno f sel setuot artan - n o c r u et as il it u l e u q er i d t u e p n O . e vir d e ss a l c a l e d r u e t a si li t ul s c c a t e c t n e m e l a t ot r e m -re f ed edicd li ,ehcnaver ne ; )erianidro ruetasilitu nu em moc( esab ed essalc al ed scilbup serb me m sel tne merbil resilitu ,iul tnauq ,tuep evird essalc al ed ruetpecnoc el ,tnem - si c r p s ul P . e g at ir h l e d t r t ni l e ti mi l e u qi n h c e t e tt e c e u q r es n e p er ti t e ts u j t u e p n O
401
5.4.3 Les possibilits de drivation protge

5 - Contrle des accs

.03 ertipahc ua snorrev el suon emmoc ,smon ed secapse sed snad sralcd selobmys ed noitasilitul tnadnepec etser erimerp noitacov al tnoD .1

. + + C u d e u qi l b u p n o i ta vir d al t n a d n o ps err o c n o it a v ir d e d e d o m l ue s n u d e u q es o ps i d e n l i , v ir p te ) + + C ne u q egral sulp noitaci fingis enu ceva( gtorp ,cilbup stutats siort sed esopsid avaJ euq srolA
avaJ n E

.noitseuq ne evird essalc al ed sessalc sellevuon ed revird nema tse nol euqsrol euq evirp noitavird enud eugnitsid es en egtorp noitavird enuuq tnemerialc tiov nO

e uqrameR

sno ita vir d ed se tros se tner ff id s eL

N N N ruetasilitu sc cA

virp virp

N N

virp g torp

N N

virp g torp

N N

O O

virp gto rp

.)evird essalc elleutnev enu snad erbmem ec aruauq tutats : ei fingis tutats uaevuon n o it ne m al ; es sa lc a l e d s ei ma u o ser b m e m s n oi tc n o f x ua s cc a : ei f i n gis A M F s cc A noitne m al( noitavird ed setros setner ffid sed stirporp sel tnalutipacr uaelbat nu icioV

virp N g torp O cilbup O tuta ts rueta s tu ta ts rueta s tuta ts rue tasilitu uaevuoN -ilitu sccA uaevuoN -ilitu sccA uaevuoN s ccA evirp evir D egtorp evirD euqilbup evirD

O cilbup A MF lai t s c c A -ini tu tat S esab ed essalC

gn i su

l c - t o m u d e d i a l er i a f e s t n e m e l a g t u e p n o i t ar a l c d e t t e c , e mr o n a l s i u p e D
class pointcol : private point // drivation prive { ..... public : ..... point::affiche() ; // la mthode affiche de la classe de base point // sera publique dans pointcol } ;

402

5.5 Rcapitulation
Lhritage simple CHAPITRE 19
class pointcol : private point // drivation prive { ..... public : ..... using point::affiche() ; // la mthode affiche de la classe de base point // sera publique dans pointcol } ;

riova

.esab ed epyt ud scilbup serbmem sed noitasitavirp al ertuo ressap ruop esab ed essalc as ed epyt el snad evird essalc enud tejbo nu ritrevnoc ed tiariffus li ,eriartnoc sac el snad ,euq tiaf el rap eifitsuj es iuq eC .3 .tnavius ertipahc ua snoredroba suon euq ,elpitlum egatirhl ed sac el snad esab ed sessalc ses ed enul uO .2 .) ebrev ud( epyt ed noitaler enu tiasilar serbmem stejbod emrof suos ,tejbo ertua nu tejbo nud ecnanetrappaL .1
a

loc tniop

tn iop

tniop

loc tniop

.tneluocd ne iuq noitaluspacned epicnirp ud noitaloiv ed seuqsir sel ; ) 1 2 ert i p a h c u d t ej b o l ar e f i u q( e m si h pr o m yl o p e d n oi t o n et n a t -rop mil esoper leuqel rus euqiman yd egap yt el tnatte mrep elleutriv edoht m ed noiton al noitcudortni enu tia f ne areutitsnoc tniop ec ; eluocd ne iuq stejbo sed euqitats egap yt el : ec ne d i v n e ert te m ed artte mrep suon ,eudnapr sulp al tnarue med ua ,noitautis erinred a L .etiusne sruetniop ertne ,drobad stejbo ertne snoitatcef fa sel rus snoisrevnoc sec ed ecnedicnil riov snolla suoN .es ab e d es sa lc e n u r us )ecner fr enu uo( ruetniop nu ne evird essalc enu rus )ecner fr enud uo( ruetniop nud ; esab ed ep yt nud tejbo nu snad vird ep yt nud tejbo nud : seticilpmi snoisrevnoc ed ecnetsixel e musr es tilibitapmoc ettec ,tne metrcnoC . euqilbup noitavird ed sac el snad euq euqilppas en elle : ecnaun ergl enu ceva ,++C ne evuorter es esab ed essalc as te evird essalc enu ertne tilibitapmoc etteC . nu sap tsen ep yt ed tejbo tuot sia m , n u ts e ep y t e d te jb o tu o t : es ab e d e ssa lc a l te e vir d e ssa lc al ert ne noitaler enu esilar egatirhl euq tnasid ne stirporp sec tnevuos tiudart nO .rueluoc as ressertnis uo tniop nu reroloc sap tuep en no ,elpmexe rap ; sessua f tnos snoitisoporp xued sec ed seuqorpicr sel ,udnetne neiB .tniop nud sellec ruop em moc tnadcorp ne rehci ffa sel tuep no ; sennodrooc sed edssop li : tniop nu em moc tiart ert sruojuot tuep roloc tniop nu ,elp - m e x e r a P .) ! el b i s s o p t s e n o i t c a e l l e t e n u u q t n e m e l u e s e mr i f f a n o e s a b e d e s s al c al e d i ul e c snad euq evird essalc al ed sac el snad tnasia fsitas issua ares tatlusr el euq tnatua ruop erid sap tuev en iuq ec( evird essalc enu rus esilar ert sruojuot tuep esab ed essalc enu rus elbasilar noitca etuot ,emm eD .evird essalc al snad tnemelag evuort es )sennod uo snoitcno f( esab ed essalc enu snad evuort nol euq ec tuot euq tia f el rus esoper edi etteC . eri a f f a l eri a f t u e p A e d e v ir d ess al c e n u d t ej b o t u o t , u d n et t a tse A essalc ed tejbo nu o l euq erocne uo esab ed essalc enud tejbo nu recalp mer tuep evird essalc enud tejbo nuuq erdisnoc no ,.O.O.P ne ,elarng erinam enuD
ts e

6 Compatibilit entre classe de base et classe drive


6 - Compatibilit entre classe de base et classe drive

403

al sap enartnen elle ,tnemelarnG .

tniop

.tejbo levuon nud noitarc epyt ud tse iuq ec euq ed revresnoc en tneiver noisrevnoc etteC .1
b

.*

tn iop

ep yt e l sn a d *

loc tniop

: esrevni noitatce ffaL e p y t u d n o isr e v n o c e n u d n o ps err o c i u q : n o it at ce f f al es iro t ua + + C , er oc ne L : s n o it a r a l c d s e c t i o S


class point { int x, y ; public : ..... void affiche () ; ..... } ; point * adp ; pointcol * adpc ; adp = adpc ;

ehc iffa

e nu ca h c ,

tn iop

e d e v ir d

loc tniop

ess al c e n u t e

tniop

erb me m noitcno f enu tnatropmoc ess al c e n u ua e v u o n s n or d is n o C

tniop

.a

t a tl us r u d n o it at c e f f al t e

: e t ej er ti ar es e t n a v i u s n oi t a t c e f f a l , e h c n a v er n E . er i ar t n o c s a c e l s n a d t u a f d r a p n o it at c e f f a l e d i o l p m e r a p ; i n i f dr u s t a i c- i u l e c i s ) ess al c al e d( n o it at c e f f a d r u et ar p ol e d l e p p a r a p : sa c s el t n a vi us , ti a f e s n oi ta tc e f fa e tt e C e p y t el s n a d e d n o isr e v n o c e n u e n ar t n e el l E . el a g l ts e
1

tn iop

: s e l l e ut i b a h s ess a l c x u e d s o n t i o S

404

6.2 Conversion de pointeurs

: snoitaralcd sel cevA


class point { ..... } class pointcol : public point { ..... }

6.1 Conversion dun type driv en un type de base

Lhritage simple CHAPITRE 19

adpc = adp ; b = a ; a = b ; point a ; pointcol b ;

class pointcol : public point { short couleur ; public : ..... void affiche () ; ..... } ;

: n oi ta tc e f fa l

.sirporppa sruetcurtsnoc sed etsixe liuq tnasoppus nE .3 .)! elaitini esserdal tnemetcaxe essinruof ) siup ( seuqorpicr snoisrevnoc xued sed evisseccus noitacilppal euq titnarag en neir ,noitnetta( esserdad tnemengila nud tnemelleutnev ngapmocca ,)euqixatnys nalp el rus( epyt ed tnemegnahc nu tiaf ne enrob es elleuqaL .2 .4.6 ehpargarap ua snorrev el suon emmoc ,esueregnad emm tE .1
* tniop > * loctniop * loctn iop > * tniop

: c e va st at l usr se m m s el un etb o s no ir ua s uoN . e d o h t m al ar el l e p p a


ehc iffa::loc tniop

: noitcurtsnil euq sidnat ,

ehc iffa:: tniop

e d o h t m al ar el l e p p a

: n oi t c ur t s ni l , u a e v i n e c
2 6 8 5 3

cpda

pda : i c-e ll ec sro l a t se n o it a ut is a L

: ed sengapmocca tnedcrp ehpargarap ud snoitaralcd sel snordisnoC


3

tn iop

. eri a f z et i a h -uos suov euq ec reniga mi tuep en ruetalipmoc el ,dnoces el snad euq srola , sac reimerp el snad eini fdrp noisrevnoc enu eria ffa a nol euq ec ed tneiv ecner ffid a L . ep yt ed tejbo nu ne ep yt ed tejbo nu ritrevnoc ed elbissopmi tse li , ep yt ed r ue tn i op n u n e ep yt ed ruetniop nu tnemeticilpxe ritrevnoc ed elbissop tse liS
2

* tniop

: n o i t c u rt s n i l erircd elbissop sruojuot ares suov li , elbatucsid tios noitaci fingis as euq neib ,isniA . ed r ue tarp o l leppa t n asi a f ne , elb asi l ar t na d nep ec ts e el lE . e te jer t n e m el ler ut a n ti ares
1

6.3 Limitations lies au typage statique des objets

p.affiche () ; pc.affiche () ;
lo ctn iop * lo ctn iop

adpc -> affiche () ; adp -> affiche () ; adpc = (pointcol *) adp ;

point p (3, 5) ; pointcol pc (8, 6, 2) ; adp = & p ; adpc = & pc ;

e uqrameR

tsac

6 - Compatibilit entre classe de base et classe drive

405

se l

- leut riv sn o itcn o f

.12 ertipahc ua snoredroba suon euq , ed iolpmel aretissecn aleC .) euqitats egap yt ud uq eria ffa snoivan suon iciuqsuj euq srola( emsihpro m ylop ud tne medno f , euqi man yd egap yt ud e mmon nol euq ec resilar ed te )noitalipmoc al tnemeriartibra sulp non te( noitucxel ed tnemo m ua tejbo nud noitaci fitnedi ettec reutce ffed te mrep ++C euq snorrev suon ,tilar nE .) l o c t n i o p n u d u o t n i o p n u d tigas lis riovas sap tuep en siam ,tniop nu em moc loctniop nu etiart ehciffa elp mexe rap( tniop tejbol ed ep yt ud etpmoc tnemeller rinet ed ne yo m nucua tnatsnil ruop snovan suon siam ,tner ffid ep yt ed stejbo sed ,ruetniop emm nud edial ,rengisd snovuop suon ,te ffe nE .)tniop nud tiassigas lis emmoc loctniop nu rehci ffa sruojuot arruop no ,tid snoval suon em moc( noitalip moc al ed tnemom ua tia f xiohc ud siv--siv emlborp ed sap tnoresop en ,etpmoc ud tuob ua ,iuq sellec erlot li ,sruelliaD .sruetniop ed snoisrevnoc seniatrec erlot ++C euq tia f el erruel nu e mmoc rerdisnoc srola tuep nO .noitalip moc al ed tnemom ua gi f te dicd tse cpda te pda rap stniop stejbo sed ep yt el euq ,tnatsnil ruop erid cnod tuep nO .ruetalipmoc el rap tejer ares
adp -> colore (8) ; adp -> affiche () ;

: euq let leppa nu ,)tniop snad sap tnatsixen( eroloc edoht m enud esopsid loctniop is euq neib zetoN .* tniop ep yt ud tse pda euqsiup ,ehciffa::tniop ed cnod arigas li ,icI .ruetniop el rap ini fd ep yt ua tnadnopserroc edohtm al ed leppal ecalp ne ertte m ed red -icd euq tuep en ruetalipmoc el euq dnerpmoc no ,snoitidnoc sec snad ,udnetne neiB .tniop t e j b ol e d e p y t e d sl e ut n e v s t n e m e g n a h c s e d l i f u a r e ul o v arr u o p e n t e s e t u o t r u o p s i o f e n u eini fd tse elleuq ei fingis iuq ec ,ruetalipmoc el rap silar tse eleppa edoht m al ed xiohc el ,tia f nE . loctniop ep yt ud tse pda rap tniop tejbol siam tniop ep yt ud tse pda ,te ffe nE ? ehciffa::loctniop ed uo ehciffa::tniop ed leppa li-t-arua Y : e u q el l e t n oi t c ur ts ni e n u eri a f a v e u q , u a e v i n e c
2 6 8 5 3

cpda

pda

: n o it a ut is et t e c s n oss i t u o b a s u o n : n o it at c e f f al sr o l a s n ot u c x e s u o n i S
406
Lhritage simple CHAPITRE 19
adp = adpc ;

6 - Compatibilit entre classe de base et classe drive

407

. g t or p t u t a ts e l r e n n o d r u e l e d u v r p s n o v a suon ,tniop ed y te x serb mem xua redcca essiup elleuq ruop ; tniop ed ehciffa edohtm al leppa tia f sap snovan suon ,loctniop ed ehciffa edoht m al snad ,euq zeuqrameR .reuqovd snonev suon euq snoitatimil sel tnartsulli emmargorp ed elpmexe nu icioV
#include <iostream> using namespace std ; class point { protected : // pour que x et y soient accessibles pointcol int x, y ; public : point (int abs=0, int ord=0) { x=abs ; y=ord ; } void affiche () { cout << "Je suis un point \n" ; cout << " mes coordonnees sont : " << x << " " << y << "\n" ; } } ; class pointcol : public point { short couleur ; public : pointcol (int abs=0, int ord=0, short cl=1) : point (abs, ord) { couleur = cl ; } void affiche () { cout << "Je suis un point colore \n" ; cout << " mes coordonnees sont : " << x << " " << y ; cout << " et ma couleur est : " << couleur << "\n" ; } } ; main() { point p(3,5) ; point * adp = &p ; pointcol pc (8,6,2) ; pointcol * adpc = &pc ; adp->affiche () ; adpc->affiche () ; cout << "-----------------\n" ; adp = adpc ; // adpc = adp serait rejet adp->affiche () ; adpc->affiche () ; } Je suis un point mes coordonnees sont Je suis un point colore mes coordonnees sont ----------------Je suis un point mes coordonnees sont Je suis un point colore mes coordonnees sont : 3 5 : 8 6 et ma couleur est : 2 : 8 6 : 8 6 et ma couleur est : 2

stejbo sed euqitats egapyt ua seil snoitatimil seL

a ada siam ; )etejer tiares esab >- evird noisrevnoc al ,nonis ,euq sap zeilbuon rac tsac e l r e y o l p m e d s n o v a s u o n ( b e d ess er d al t n e m e v it c e f f e t n e it n o c a d a ,s n oi ti d n o c s e c s n a D : t ne me v ir b s u l p ,er oc n e u o
A * ada ; B * adb ; adb = &b ; ada = (A *) adb ; A * ada = (A *) & b ; b.z = 8.3 ; b.fa () ; a.z = 5.25 ; a.fa () ; class A { int x ; public : float z ; void fa () ; ..... } ; A a ;

: is n ia t na d c orp ne e ssa lc a l e d r ue tpe cn o c el r a p e c a l p n e e s i m n oi t c et or p e tt e c er t u o r e s s a p t u e p B e s s a l c al e d r u e t a s il i t u l , s n i o m n a N .) B e ss a l c a l s n a d s i n -i fder tneios en af te z serb mem sel euq ,rs neib ,sniom ( ruetalip moc el rap setejer tnores : s n o it c urts n i s el ,s n o it i d n o c s e c s n a D . B ess al c al e d n o it ar a l c d a l s n a d tnarugi f etavirp tom ud unet etp moc ,serbmem sec scca sap aruan b tejbol ,ertnoc raP : elp mexe rap erirc arruop nO .A ed af te z serbmem xua scca arua a tejbol ,icI
class B : private A { int u ; public : double v ; void fb () ; ..... } ; B b ;

: elp mexe nu iciov nE .evirp noitavird enu tnaruocer ne ,esab ed essalc al ed stirh scilbup serbmem sel svirp erdner ed ,evird essalc enu snad ,elbissop tiat liuq uv snova suoN .spmet rei merp nu snad rongi ert tuep ehpargarap eC
.B .N

.s el l e u tri v s n o i t c n o f sed tiadssop tejbo tuot is emmoc tia f ne essap es tuot : euqiman yd sruojuot tnat erut - a gi l al , a v aJ n e s a p t n e tsi x e n e u q it at s e g a p yt u d s o p or p s u q o v s e m l b or p s e l ,sr u e l li a raP .)evitce ffe eipoc ed non te( secner fr ed noitatce ffad tigas liuq reilbuo sap tua f e n l i si a M .) a v aJ n e s a p t n e tsi x e n sr u et n i o p s el( s t e j b o d n oi t a t c e f f a l e nr e c n o c i u q e c ne evird essalc te esab ed essalc ertne tilibitap moc neib a y li ,++C ne em moc ,avaJ nE
avaJ n E

408

6.4 Les risques de violation des protections de la classe de base


Lhritage simple CHAPITRE 19

ne ,rinifd el snas ,virp ruetcurtsnoc nu eralcd A is ,tnem matoN .)31 ertipahc ud 3.1.3 ehp - ar g ar a p e l t n e m el l e u t n e v z e y o v er( s eri ai d mr e t ni s n oi t a u tis s e d e ts i x e li , tr a p ert u a D . t u a f d r a p n oi t c ur ts n o c al l e p p a ar e f n o ,r u et c urts n o c l e t n u d n o it i ni f d e n u c u a t e n oi t ar al c d e n u c u a et si x e n l is ; l e p p a ar e s li , e u q il b u p e mr o f s u os ,r u e t c urt s n o c l e t n u i ni f d a A is : euq snoleppaR .stnadnopserroc sennod serb me m sel ruop A ed eipocer ed ruetcurtsnoc el releppa cnod arehcrehc nO .A ep yt ed erb -mem nu e mmoc etiart ares A essalc al tnanetrappa 1b ed eitrap al euq ei fingis alec ,icI .ser b m e m s te j b o se d s ac el s n a d t ia i fi n gi s a le c e u q e c u v s n o va s u o N . er b me m ra p er b me m tia f es eipocer al euq snoleppaR .B ed tua fd rap eipocer ed ruetcurtsnoc ud leppa cnod a y lI

.)31 ertipahc ud 4 ehpargarap ua te 31 ertipahc ud 3 ehpargarap ua tnemelleutnev riov( )1b( 2b B erocne uo 1b = 2b B snad e mmoc ,B ep yt e d t e j b o er t u a n u c e v a B e p yt e d t ej b o n u t i ar e si l a it i ni n ol o i u l e c er o c n e u o B e p y t e d t at -lusr nu ruelav rap tiarrevner noitcno f enu o sac ua erid--tsec ,eipocer rap noitasilaitinid snoitautis sertua xua tnemelag tiareuqilppas erid snolla suon euq ec tuot ,udnetne neiB
usuel" par valeur, ce qui recopie de la classe B

: )A ed evird B( setnavius snoitcurtsni xua eria ffa tia nol euq t nas o p p u s ne ,s el b iss o p s n oi ta u ti s s esre v i d se l s n o ni ma x E . t ua f d ra p ei p oc er e d r u et c urts n oc nud ecnetsixel ed etpmoc rinet issua tua f li ,sio fetuoT .eipocer ed ruetcurtsnoc ua cnod ,sruetcurtsnoc sel suot tneuqilppas 4 ehpargarap ua secnon snova suon euq selgr se L . n oi t c n o f e n u d r u o t er n e u o t n e m u gr a n e t ej b o n u d r u e l a v a l e d n o iss i ms n art e d ; ep yt emm ed tejbo nu rap tejbo nud noitasilaitinid : sac ne leppa tse eipocer ed ruetcurt -s n o c el e u q s n o v as s u o n ,t n e m et i c il p x e i nr u o f i u l e c e d u o t u a f d r a p i u l e c e d e ssi g as l i u Q

: setpecca tnores snoitcurtsni seC .B essalc al ruop svirp tnos sliuq srola ,A essalc al ed scilbup serbmem xua redcca tnanetnia m cnod tuep nO .* A ep yt el sruojuot
409

7.1 La classe drive ne dfinit pas de constructeur de recopie

7 Le constructeur de recopie et lhritage

class A { ... } ; class B : public A { ... } ; void fct (B) ; // fct est une fonction recevant un argument ... B b1 (...) ; // arguments ventuels pour un "constructeur fct (b1) ; // appel de fct qui on doit transmettre b1 // implique lappel dun constructeur de ada -> z = 8.3 ; ada -> fa () ;

7 - Le constructeur de recopie et lhritage

de type B

...sccad stiord ed semlborp sleutnevd unet etpmoc ,tacild rervas tuep iuq ec ,B ed eipocer ed ruetcurt -snoc ud nies ua liavart el reutceffe arduaf li ,noniS .sruetcurtsnoc ertne snoitamrofnid noissimsnart ed emsinacm el rap rinevrap y erocne arruop no ,sac sniatrec snaD .A nu tse iuq x ed eitrap al ed sruelav sel tejbol snad tnem -elbanevnoc retroper ed erusem ne ert srola tuaf lI .eipocer rap ruetcurtsnoc nos euq ertua ,A ed ruetcurtsnoc leuq etropmin releppad B evird essalc al ed eipocer rap ruetcurtsnoc ua elbissop etser li ,eiroht ne ,udnetne neiB .1
}

: et n asi a fsi t a s ei p o c er enu rituoba ruop ruetcurtsnoc erton isnia rini fd ed arif fus suon lI .)6 ehpargarap ua eid - u t ( e s a b e d e s s a l c e n u s n a d e v ir d e s s a l c e n u d et i c il p mi n o i sr e v n o c e d t il i bi s s o p a l t n e i v -retniuq l tseC .A ep yt ed tse ,x snad ,iuq ec tne melues siam ,reitne tuot x tejbol sap non tne mugra ne riovecer tiod ruetcurtsnoc ec euq tiov no ,snoitidnoc sec snaD . A ed eipocer e d r u e t c urt s n o c e l ti os u a e v i n e c l e p p a A e d r u et c ur ts n o c el e u q ar et i a h u os n o ,l ar n g n E .A ed tnadnopserroc ruetcurtsnoc ud leppa arua y li
1

: e mr o f a l e d et t- n e n u c e v a A e d r u e t c urts n o c n u ruop snoitamro fni sed tiovrp B ed ruetcurtsnoc el is ,isniA .)3.4 ehpargarap ua eidut( sruet -curtsnoc ertne snoita mro fnid noissimsnart ed emsinacm el resilitud elbissop etser li siaM
Le constructeur de recopie de la classe drive doit prendre en charge lintgralit de la recopie de lobjet, en non seulement de sa partie hrite.

: euq eifingis aleC .)! A snad eipocer ed ruetcurt -snoc nu etsixe lis emm( sac ec snad esab ed essalc al ed ruetcurtsnoc ed euqita motua leppa nucua riovrp en ed dicd a ++C ,tia f nE .A ed ruetcurtsnoc nud leppa a y lis riovas ed tse es o p es i u q n o its e u q al s i a M . l e p p a t n e m e l l er ut a n sr o l a t s e B e d ei p o c er e d r u e t c ur ts n o c e L

.8 ehpargarap ua snordneiver y suon ; sac el sap ares en ec ,tiaf nE .)eipocer al elbalbmes noa f ed tiannoitcno f liuq uv snova suon tnod( noitatce ffad ruetarpol ruop e m m ed ari ne liuq resoppus res -sial tiarruop sevird sessalc xua erbmem rap erb me m eipocer al ed noitasilarng etteC

.etidretni tne melag arevuort nes B ep yt ed stejbod eipocer al ,sac ec snad ; A ep yt ed stejbod eipocer al eridretnid euv
410
Lhritage simple CHAPITRE 19

7.2 La classe drive dfinit un constructeur de recopie

{ // recopie de la partie de x spcifique B (non hrite de A) B (B & x) : A (x) // x, de type B, est converti dans le type A pour tre B (B & x) : A (...) // transmis au constructeur de recopie de A

e uqrameR

7 - Le constructeur de recopie et lhritage

411

: ruelav rap si msnart loctniop ep yt ed tnemugra nu tcf noitcnof enu tnaleppa ne loctniop ed iulec ed leppal snouqovorp suon te eip -ocer ed ruetcurtsnoc nud xued sel setuot tnassinu m sel ne loctniop te tniop selleutibah ses -salc xued son tne melp mis snossini fd suoN .tilibissop ettec tnartsulli e mmargorp nu icioV
.sruetcurtsnoc ertne snoitamrofnid noissimsnart ed emsinacm el rertsullid tnemelpmis tse fitcejbol ,ici ,siaM .sac sel suot snad etnasiffus tnarvas tnemmedcrp etircd tuafd rap eipocer al ,elitu sap tsen ,sruetniop ed sap tnatropmoc en essalc ed sicrp sac ec snad ,iuq eC .1
1

#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 << "++ point " << x << " " << y << "\n" ; } point (point & p) // constructeur de recopie { x = p.x ; y = p.y ; cout << "CR point " << x << " " << y << "\n" ; } } ; class pointcol : public point { char coul ; public : pointcol (int abs=0, int ord=0, int cl=1) : point (abs, ord) // constr usuel { coul = cl ; cout << "++ pointcol " << int(coul) << "\n" ; } pointcol (pointcol & p) : point (p) // constructeur de recopie // il y aura conversion implicite de p dans le type point { coul = p.coul ; cout << "CR pointcol " << int(coul) << "\n" ; } } ; void fct (pointcol pc) { cout << "*** entree dans fct ***\n" ; } main() { void fct (pointcol) ; pointcol a (2,3,4) ; fct (a) ; // appel de fct, qui on transmet a par valeur } ++ point 2 3 ++ pointcol 4 CR point 2 3

B epyt ed stejb od no itat ce f fal e nr ecn o c iuq e c tu ot egrah c n e enn erp B ed = ru et

: = r u e t ar p o l i n i f dr us t n o s ess al c x u e d s e L .tniop ed evird loctniop essalc al : alec tnartsulli emmargorp ed elpmexe rei merp nu icioV .A ed stirh serb me m sed tse iuq ec ruop sirpmoc y, . i ni f dr us t a lis e m m , leppa sap ar es e n A e d i u le C . B sn a d ini fd = ruetarpol leppa tnemeriassecn srola aref B ep yt ed stejbo xued ed noitatce ffaL
-a rp ol euq cn od a rdua f lI

. ei p o cer e d ruetcurtsnoc ud sac el snad tircd iulec eugolana tia f tuot tnemetropmoc nu evuorter nO . B s na d n o it a tc e f fal e d e ll ec , ec i f f o d ,c n o d e n art ne A s n a d n oi ta tc e f fa l e d n oi tc i d -retniL .)B ed serbmem snoitcno f sed srohed ne( B ep yt ed tejbo nu ruop eria f es sap arruop en leppa nos ,A snad evirp e mro f suos ini fdrus t a = ruetarpol is euq neib areton nO .tuot ud ini fder t sap an = ruetarpol is A ed tua fd rap noitatce f fal rap ; cilbup tse liuq te etsixe lis A snad inifdrus = ruetarpol rap : erid--tsec ,A essalc al snad euvrp noitatce ffal rap etiart tse A ed etirh eitrap a L .)eini fdrus uo tua fd rap( ep yt ruel ruop euvrp noitatce ffal rap stiart tnos B serporp serbme m sel ,isniA .erbmem nu eutitsnoc A ed etirh eitrap al euq tnardisnoc ne erb me m erb me m eluord es B ep yt ed stejbo xued ed noitatce ffaL

.selbissop snoitautis setner ffid sel ,)7 ehpargarap( ei p o cer e d r ue tc urt s n o c e l r u o p t ia f s n o va l s u o n e m m o c ,s n or d is n o c t e A e d )t n e m e u q il b u p( etirh B essalc al euq snosoppuS .egatirhd sac ne stilibissop sec tnenneived euq ec sno yoV .)erbmem noitcno f enud e mro f al suos tnemeriotagilbo( noitatce ffad ruetarpo tec rini fdrus ed elbissop tiat liuq rtno m snova suon ,trap ertuaD .ep yt e m m ed stejbo xued ertne tua fd rap noitatce ffal tini fd ++C tnem moc uqilpxe snova suoN

esab ed essalc al ed eipocer ed ruetcurtsnoc nud leppal recrof ruo P


CR pointcol 4 *** entree dans fct ***

412

8.2 La classe drive surdfinit loprateur =

8.1 La classe drive ne surdfinit pas loprateur =

8 Loprateur daffectation et lhritage

Lhritage simple CHAPITRE 19

#include <iostream> using namespace std ;

8 - Loprateur daffectation et lhritage

413

class point { protected : int x, y ; public : point (int abs=0, int ord=0) { x=abs ; y=ord ;} point & operator = (point & a) { x = a.x ; y = a.y ; cout << "operateur = de point \n" ; return * this ; } } ; class pointcol : public point { protected : int coul ; public : pointcol (int abs=0, int ord=0, int cl=1) : point (abs, ord) { coul=cl ; } pointcol & operator = (pointcol & b) { coul = b.coul ; cout << "operateur = de pointcol\n" ; return * this ; } void affiche () { cout << "pointcol : " << x << " " << y << " " << coul << "\n" ; } } ; main() { pointcol p(1, 3, 10) , q(4, 9, 20) ; cout << "p = " ; p.affiche () ; cout << "q avant = " ; q.affiche () ; q = p ; cout << "q apres = " ; q.affiche () ; } p = q avant = operateur q apres = pointcol : 1 3 10 pointcol : 4 9 20 = de pointcol pointcol : 4 9 10

: loctniop ed = ruetarpol snes ec ne rei fidom snoirruop suon tnem moc icioV .tnedcrp ehpargarap ua senimaxe sruetniop ed snoisrev -noc ed stilibissop sel resilitud tse eria f ec ruop elpmis sulp e L .tnemeticilpxe releppal ard -ua f li ,A snad ini fd = ruetarpol ed retiforp riovuop tuev nol iS .eticilp mi )euqserp( leppa nu tiattemrep ne iuq stnemugrad tre fsnart ed emsinacm ud ici sulp esopsid en nouq ecnerf - fid ettec ceva ,eipocer ed ruetcurtsnoc ud soporp rtnocner iulec ed nisiov tse e mlborp e L .loctniop ep yt ed stejbo ertne noitatce ffa enud srol leppa t sap an tniop essalc al snad ini fd = ruetarpol euq tnemerialc tiov nO

= ruetarpol tnessinifdrus evird essalc al te esab ed essalc al dnauQ

414

Lhritage simple CHAPITRE 19

pointcol & operator = { point * ad1, * ad2 cout << "oprateur ad1 = this ; // ad2 = & b ; // * ad1 = * ad2 ; // coul = b.coul ; // return * this ; }

(pointcol & b) ; = de pointcol\n" ; conversion pointeur sur pointcol en pointeur sur point idem affectation de la "partie point" de b affectation de la partie propre pointcol

. e t n a s i a f s i t a s t s e l o c t n i o p e p yt e d s t ej b o ert n e n oi t - at c e f f al e u q t n er t n o m st at l us r s el ,s i o f et t e C . i f i d o m is ni a t el p m o c e m m ar g or p u a e v u o n el icioV .tniop essalc al ed = ruetarpol ed leppal renartne ruop )2da* te 1da *( stniop stejbo xuaevuon sel ertne noitatce ffa enu resilar ed etiusne ti ffus lI .tniop ep yt ed stejbo sed rus sruetniop sed ne loctniop ed stejbo sed rus )b & te siht( sruetniop sel snossitrevnoc suoN
#include <iostream> using namespace std ; class point { protected : int x, y ; public : point (int abs=0, int ord=0) { x=abs ; y=ord ;} point & operator = (point & a) { x = a.x ; y = a.y ; cout << "operateur = de point \n" ; return * this ; } } ; class pointcol : public point { protected : int coul ; public : pointcol (int abs=0, int ord=0, int cl=1) : point (abs, ord) { coul=cl ; } pointcol & operator = (pointcol & b) { point * ad1, * ad2 ; cout << "operateur = de pointcol\n" ; ad1 = this ; // conversion pointeur sur pointcol en pointeur sur point ad2 = & b ; // idem * ad1 = * ad2 ; // affectation de la "partie point" de b coul = b.coul ; // affectation de la partie propre pointcol return * this ; } void affiche () { cout << "pointcol : " << x << " " << y << " " << coul << "\n" ; } } ;

.) n oi t at c e f - fad ruetarpo te eipocer rap ruetcurtsnoc( esab ed essalc as ed stilannoitcnof sed seniatrec rus tna yuppas siam ,euqinonac e mro f al issua elle tnatcepser ,U em mon evird essalc enu ; etnesrp jd euqinonac emro f al tnatcepser ,T em mon esab ed essalc enu : evuort nO .)engil ne secalp t tno snoitcno f seniatrec ,tevirb ed icuos rap( egatirhl ed erdac el snad silarng ert tiarruop a mhcs ec tnem -moc iciov ,ertipahc ec ed 8 te 7 sehpargarap xua tnesrp t a iuq ec ed etp moc tnanet nE .sr ue tn i op ed tnasopsid essalc etuot etiurtsnoc ert tiarved leuqel noles savenac el erid--tsec ,essalc enud euqinonac emro f al e mmon nol euq ec ini fd snova suon ,51 ertipahc ud 4 ehpargarapuA

.A snad ini fd ruetarpol ed )tne meuqita motua( retiforp emm dnauq tuep essalc ettec ,= ruetarpol sap tini fdrus en B euqsrol ,euqsiup essua f tse n oi t a mri f f a e tt e c e u q r er d is n o c t u e p n o , e h c n a v er n E .) ! A e d e tir h ei tr a p a l e u q t n a n -recnoc en elleitrap noitatcef fa enu resilar tiardneiver iuq ec( A snad )tnemelleutnev( ini fd iulec leppa eriaf ed sap etnetnoc es en no ,= ruetarpol ini fd sap an B euqsrol r a c , et c a x e ts e e l l e u q r er d is n o c t u e p n o ,t e f f e n E .s n oi s u f n o c e d e cr u os t i a f n e ts e n o it -a mri f f a e ll et e nU . noitatce ffad ruetarpol ,++C neuq tnevuos tid nO
ti rh sap tse n

esab ed essal c a l snad inifdrus = ruetarpol ed noitasilitul ,evird essalc enu snad ,recrof tnemmoC
p = q avant = operateur operateur q apres = pointcol : 1 3 10 pointcol : 4 9 20 = de pointcol = de point pointcol : 1 3 10

9 Hritage et forme canonique dune classe


e uqrameR
main() { pointcol p(1, 3, cout << "p cout << "q avant q = p ; cout << "q apres } = " ; q.affiche () ; 10) , q(4, 9, 20) ; = " ; p.affiche () ; = " ; q.affiche () ;

9 - Hritage et forme canonique dune classe

415

.se vir d se ssa lc se s p u oc e m m u d e g t or p ,snoitatce ffa sel te seipocer sel ertnoc essalc enu regtorp ,elarng erina m enud ,isniA .U s n a d c i l b u p n o i t a t c e f f a d r u e t ar p o n u s a p t i n i f d er e n n o l i s e t i d r e t n i t n e m e l a g ar e s U e p y t e d s t e j b o d n o i t a t c e f f a l , v i r p n o i t a t c e f f a d r u e t ar p o n u t i n i f d T i s , e m m e D .)! e d i v sproc ed uvrp t sap tian liuq noitidnoc ,T ed virp eipocer rap ruetcurtsnoc nu rus re yuppas tnemelleutnev arruop li( tejbol ed tilargtnil egrahc ne tnanerp cilbup ei p o c er r a p r u e t c ur ts n o c n u U s n a d r i n i f d e d r s n e i b , s n i o m , e t i d r e t n i t n e m e l a g a r e s U ep yt ed stejbod eipocer al ,virp eipocer ed ruetcurtsnoc nu tini fd T is ,euq snoleppaR e uqrameR
evird essalc enud euqinonac emro F
class U : public T { public : U (...) ; // constructeurs autres que recopie U (const U & x) : T (x) // constructeur recopie de U : utilise celui de T { // prvoir ici la copie de la partie de x spcifique T (qui nest pas un T) } ~U () ; U & U::operator = (const U & x) // oprateur daffectation (forme conseille) { T * ad1 = this, * ad2 = &x ; *ad1 = *ad2 ; // affectation ( lobjet courant) // de la partie de x hrite de T // prvoir ici laffectation ( lobjet courant) // de la partie de x spcifique U (non hrite de T) }

416

Lhritage simple CHAPITRE 19

class T { public : T (...) ; // T (const T &) ; // ~T () ; // T & T::operator = (const ..... } ;

constructeurs de T, autres que par recopie constructeur de recopie de T (forme conseille) destructeur T &) ; // oprateur daffectation (forme conseille)

: leppa l euq re mr i f fa d sro la t e mr ep A e d t ne m e uqi lbup e tir h B e uq t ia f e L . t e p yt e d t a t l u s r n u t i nr u o f t e s n es n u a : l e p p a l , u d n e t n e n e i B : b te a stejbo xued tneioS .f ed cnod ,A ed scilbup serb mem sed etirh B essalc a L .)ruetasilitul rap ini fd uo esab ed ep yt( t ep yt ed tatlusr nu tnassinruof ,)stne mugra sel ici sap snosicrp en suon tnod( f erb me m noitcno f enu edssop A essalc a L
A a ; B b ; a.f (.....) ;

: ) e u q n oc le u q e p yt n u t n a n g is d t ( sa v e n ac e c s n or d is n o C

.) elp me xe rap ,snoisrevnoc( seriatnemlppus sne yom sed sruocer el tnoretissecn sertua sel ; seuqov snoitautis sed seniatrec snes nu rennod ed temrep )sussed-ic lrap snova suon tnod( sv -ird stejbo ertne tilibitapmoc ed selgr sed te egatirhl ed nosiagujnoc al tnemmoc etiusne s n orre v s u o N . n o it o n e tt ec e d )t ne me u q i n u( sa p t n e v ler e n s u sse d- ic se tir c d s n oi ta u tis sel euq rertno m ed arttemrep suon iuq ec ,egatirhl tseuq ec resicrp snolla suon ,eria f ec ruoP .snoitseuq setner ffid sec sesnopr ed stne ml sed retroppad snosoporp suov suoN ? s r o l o c s t n i o p x u e d e d e c n e d i c n o c al r e ts et r u o p e s i li t u er t )tse elleuq ellet( elle-t-arruop edicnioc noitcno f etteC .tniop ed tnatirh loctniop essalc enu te 41 ertipahc ud 1 ehpargarap ua erdisnoc snoival suon euq ellet ,edicnioc )ei ma uo erb -mem( noitcno f enud einum ,tniop essalc al ed iulec : elp mexe ertua nu tnanetniam snonerP .tniop ed noitiddad stilibissop sed tirh a loctniop euq erid tne miarv sap tuep en n o ,sa c ec s na D ? t n i o p n u t n e m e l p m i s e l l e - t - a r e S ? r u e l u o c a s e r t n e i b t i a r r u o p e l l e u q , i u o i S ? roloc tniop nu elle-t-ares sroloc stniop xued ed e mmos a L .seuol f tnos sesohc ed erb mon niatrec nu ,tia f nE ? + ruetarpol tseuq tniop essalc al ed tilannoitcno f ettec resilitu elle -t-arruoP .)+ sap tini fder en iuq te( tniop ed tnemeuqilbup etirh iuq loctniop essalc enud te )tniop >- tniop + tniop( + ruetarpol ini fdrus a iuq tniop essalc enud elp mexel snonerP .tilar ne tsel en liuq larng sulp tse egatirhl euq eriorc tnassial ne noisu fnoc retrp tuep noisserpxel , stilannoitcnof ses ed etirh elleuq sio frap tid nol iS .esab ed essalc enud stilibissop sed itrap rerit tuep evird essalc enu tnem moc uv snova suoN

10.1 La situation dhritage

10 Lhritage et ses limites

b.f (.....) ;

class A { ..... public : t f(.....) ; ..... } ;

class B : public A { ..... } ;

10 - Lhritage et ses limites

417

.e h par gar a p e c e d n oi tc u d ort n i ne s u q o v se l p m e x e x u a t n a ne t ni a m s n o n e v e R

.e c ner f r rap stne mugra ses tioer f is A ep yt ed tejbo nu ecner fr enu ne B ep yt ed 1b ecner fr enud ; )ini fdrus uo tuafd rap( eipocer ed ruetcurtsnoc nud leppa arua y li srolauq sap ze il b u o n ; ru el a v ra p t n e m u gra n os ti o er f is A e p y t u d t ej b o nu n e B e p yt e d 1 b t e j b o l e d : seticilp mi snoisrevnoc ed ecnetsixel ecrg tsec ,snes nu a lis : l eppa l t n a uQ : noitaci fingis enu tnemevitce ffe ennod )cilbup( egatirhL : r al c d s n o y a s u o n e u q t e : ep ytotorp ruop tia f euq snosoppus ,elpmexe raP .f ed stne mugra xua euqilppas ruoter ed ruelav al ed soporp etia f euqra mer a L .nrecnoc tejbol ed ep yt ud erdnepd ed selbitpecsus erid--tsec , setnairavoc sruoter ed sruelav ed resopsid srola tnorruop selleutriv snoitcno f sel euq te ffe ne ardnerppa y nO .12 ertipahc ud 3.4 ehpargarap ua arrev el no e mmoc ,secner fr sed uo sruetniop sed t n a y o v n er s n oi t c n o f e d s a c el s n a d e u n t t a t n e m er g l s i o f et u o t ar e v u or t es n o it at i m i l e tt e C .)...retiahuos el sio frap tiarruop no em moc B ep yt ed non te( A ep yt ed neib ares ).....(f.b leppal ed tatlusr el
A f(.....) t f(A) ; A a1, a2 ; B b1 b2 ; b1.f(a1) b1.f(b2)

: ep ytotorp el ceva ,isniA .erbmem tse f tnod essalc al ed ep yt ud tigas lis tuotrus ,tejbo ep yt nu tse t euq sd tnessiarappa setuod sed siaM .etnediv elb mes sussed-ic noitamrif fal ,leusu ep yt nu tse t euq tnat ,tnemelarnG .s uo n-s n o u q -ilpxE .rinet es tne mulosba tua f li elleuqal noita mri ffa ettec snad unetnoc tse egatirhl tuoT .ep y t -otorp nos rap sopmi ep yt el sruojuot tnorua stnemugra ses te t ep yt ed sruojuot ares tatlusr noS .A ep yt ud tiat lis em moc )b ceva uo( b rus ariga f euq ,tid tne mertua ,snes nu issua iul a
10.1.1 Le type du rsultat de lappel

418

10.2 Exemples
10.1.2 Le type des arguments de f
Lhritage simple CHAPITRE 19

tse iuq

tniop

! essalc epyt nud sap tsen edicnioc rap inruof tatlusr el ,ici ,siaM .4 .eyolpme ceva itimad noitaler al tnemelues tsec ,ici ,siam ,egatirh rap loctniop ed te tniop ed eimA .3 .secnerfr ed noisrevnoc uo stejbod noisrevnoc arua y li ,sac sel noleS .2 .tniop ed etirh siam ,loctniop ed erbmem noitcnoF .1
#include <iostream> using namespace std ;

: tniop ed erb me m noitcno f enu e mmoc ini fd tse edicnioc leuqel snad ,telp moc e mmargorp ed elp mexe nu iciov , fitacidni ertit .)s a p t n a n e vr e t n i n r u e l u o c al( s e n n o dr o o c s e l u es sr u e l e d t il a g l d n o ps err o c s r ol o c s t n i o p x u e d e d e c n e d i c n o c al e u q er d is n o c n ol o tnemo m ud ritrap , esop es en reilucitrap e mlborp nucuauq riov ed elica f tse li ,sio f etteC
4

.s e n n odr o oc s ed emmos al ruop tniop snad ini fd iulec leppa essaf liuq ec ettiuq ,loctniop ed nies ua + ruet - ar p o l r i ni f d er ar d u a f li , s r ol o c s t ni o p x u e d e d e m m os a l r i ni f d e ti a h u o s n o t n a n et n i a m iS .tatlusr nos reubirtta tiarruop noisrevnoc ellet enu rueluoc elleuq rednamed es tnemeuq -igol sruelliad tuep nO . loctniop ne tniop ed noisrevnoc al ed resopsid ed etua f ,etejer ares
c = a + b ;

: euq el l e t n o it at c e f f a el a n a b e n u , l o c t n i o p e p y t e d t s e c i s e u q z e y o v s u o v , s n o i t i d n o c s e c s n a D .tniop ep yt ed sruojuot ares tatlusr e L .tniop ep yt el snad b te a ed noisrev -noc al ed tatlusr el arttemsnart no elleuqal ,+rotarepo eima noitcno f al ed leppa arua y lI
3

: e m m o c e u l a v ar es n o iss er p x e l ,s a c d n o c es el s n a D .tniop ep yt ed ares tatlusr noS . tniop nu ne b ed noisrevnoc al ed tatlusr el tne mugra ne artte msnart no elleuqal ,)tniop ep yt ud tse iuq ec euq arerdisnoc en no tnod( a tejbol ruop +rotarepo erb me m noitcno f al ed leppa arua y lI
2 1

: noisserpxel ,sac reimerp el snad ,te ffe nE .tniop ep yt ed ares loctniop ep yt ed b te a stejbo xued ed em mos al ,eima n oi t c n o f e n u d u o er b m e m n oi t c n o f e n u d e mr o f a l s u os i n i f d t i os + r u e t ar p o l e u q ,t i a f n E
10.2.1 Hritage dans pointcol dun oprateur + dfini dans point

10.2.2 Hritage dans pointcol de la fonction coincide de point

: e m m oc e ul av ares
a + b

operator+ (a, b) a.operator+ (b)

10 - Lhritage et ses limites

419

420

Lhritage simple CHAPITRE 19

class point { int x, y ; public : point (int friend int } ; int coincide { if ((p.x

abs=0, int ord=0) { x=abs ; y=ord ; } coincide (point &, point &) ; (point & p, point & q) == q.x) && (p.y == q.y)) return 1 ; else return 0 ;

} class pointcol : public point { short couleur ; public : pointcol (int abs=0, int ord=0, short cl=1) : point (abs, ord) { couleur = cl ; } } ; main() { pointcol a(2,5,3), b(2,5,9), c if (coincide (a,b)) cout << "a else cout << "a if (coincide (a,c)) cout << "a else cout << "a } a coincide avec b a et c sont differents // programme dessai ; coincide avec b \n" ; et b sont diffrents \n" ; coincide avec c \n" ; et c sont differents \n" ;

11 Exemple de classe drive


.) n oi ta tc e f fa d r u et ar -pol ed noitini fdrus al te eipocer rap ruetcurtsnoc nu tnemelag retropmoc tiarved ,seuqi m -an yd seitrap sed tneitnoc iuq essalc ettec ,elbatiolpxe ert ruop ,euq neib zeton( ][ egaidnid ruetarpo nud te ruetcurtsed nud ,ruetcurtsnoc nud einu m tse essalc etteC .51 ertipahc ud 5 ehpargarap ua einifd snoval suon euq ellet ess al c a l e d s n ois o ps i d s u o n e u q s n os o p p u S
tc ev

class vect { int nelem ; int * adr ; public : vect (int n) { adr = new int [nelem=n] ; } ~vect () {delete adr ;} int & operator [] (int) ; } ;

t ni op

ed

e d ic n i oc

no it cnof a l ed

, l oc t ni op

snad ,egat ir H

1 tc ev

: s u o n t n er f f o s s n i o m u a s n oi t ul os x u e d , u a e v i n e c . essalc al ruop ][ ruetarpol rini fdrus cnod tua f suon lI .snoluov suon euq ec sulp tsen ec tE . tejbol ed euqiman yd uaelbat ud tneml el sruojuot arengisd noitaton ettec euq tse iunne lues e L .noitaci fingis enu neib arua
em i

1 tc ev

][ro ta repo

tni

tc ev

t ce v

1 tc ev

tc ev

1t c e v

: ce va , is ni A . vird ep yt ed tejbo nu ruop leppa essa f nouq aretpecca ++C te tne metcerroc cnod arennoitcno f egatirhl ,nalp ec ruS . ep yt ed ruelav enu tinruo f elle ; ep yt ed tnemugra nu te eticilp mi tnemugra nu tioer er b m e m n oi t c n o f a l , s n a D ? t n e m et c a x e l i-ts e n e u Q . ed iulec ed etirh elle o erusem al snad ,][ ruetarpol rini fdrus ed nioseb sap an e uq re sn ep iss ua s no irr uop s uoN . r ap u o ll a j d iu l ec e uq er t ua e uqi ma n y d t ne m -ecalpme nucua euollan elleuqsiup ,ruetcurtsed ed nioseb sap an ess a l c a l ,ir oir p A . te ed sruelav sel rengiesner eti mil es elle , ed euqi ficps ehct al tnauQ
tn i ][ro tarepo nif tub ed 1 tc ev 1 tc ev t ce v

1 tc ev

: e d t e l p m o c e t t- n e l o d ,s ti a h u os st n e m l d erb mon el erttemsnart iul ed ti ffus suon li : r a p u t c e f f e l i a v art el s n o si li t u r s u o n , eri art -noc uA .ruetcev erton ed euqi man yd noitacollal s n a d eri a f e d n oi ts e u q s a p c n o d ts e n lI . e d r u e t c ur ts n o c u d i ul e c t n e m e u q it a m o t u a ar e n ar t n e r u et c urts n o c e c e d l e p p al s i a M
t ce v

: emro f al ed ares ett-ne noS .ecidnil ed senrob xua tnadnopserroc sreitne stnemugra xued ruetcurtsnoc nu etissecn ,t ne me ts e fi na M
1t c e v

tc ev

: ess al c e l l e v u o n er t o n ed noitaralcd al ed tubd el od ,ecidnil ed senrob sel revresnoc ruop seriatne mlppus serb me m xued riovrp tua f lI . ed essalc enu revird ed re yassed lerutan srola elb mes lI .42 51 ed tnairav secidnid sreitne xid ed uaelbat nu tse euq tiareifingis iuq ec
t

: )e ssa lc e ll e v uo n a l ed m o n el t s e is( reralcd snoirruop suon ,elp mexe raP .)reitne ep yt ed sruojuot ert ssop -pus( secidni sed ) mu mixam te mu minim( senrob sel siam ,stnemld erb mon el tne melues non rexi f essiup no sleuqsel snad sruetcev ed nioseb sno ya suon euq tnanetniam snosoppuS
1t c e v

t.operator[] (i) t[i] vect1 t (15, 24) vect1 (int d, int f) : vect (f-d+1) vect1 (int d, int f) class vect1 : public vect { int debut, fin ; vect1 t (15, 24) ; int & vect::operator [] (int i) { return adr[i] ; }

arei fingis iuq : n o it at o n al

11 - Exemple de classe drive

421

422

Lhritage simple CHAPITRE 19

int & operator[] (int i) { return vect::operator[] (i-debut) ; }


t ce v

int & operator [] (int i) { return adr [i-debut] ; }


rda

: e d te ed serb me m snoitcno f seniatrec ed nies ua noitamro fnid segahci ffa seuq - le uq , e mu t u oc ca l e m m oc ,t i ud or t ni te ne ma xe n os re t il ic a f r u op e m m- el le ess al c al rerugi f tia f snova suoN .noitulos eri merp al leppa tnasia f telpmoc elpmexe nu icioV . e t n as i u d s s ul p er t -t u e p t ar a p n oi t ul os er i nr e d e tt e C .) virp , tn e m elb an n os iar n oi t c n o f a l el b iss e c c a t i o s e u q n oi ti d n o c (

#include <iostream> using namespace std ; // **************** la classe vect ********************************** class vect { int nelem ; // nombre dlments int * adr ; // pointeur sur ces lments public : vect (int n) // constructeur vect { adr = new int [nelem = n] ; cout << "+ Constr. vect de taille " << n << "\n" ; } ~vect () // destructeur vect { cout << "- Destr. vect " ; delete adr ; } int & operator [] (int) ; } ; int & vect::operator [] (int i) { return adr[i] ; } // **************** la classe drive : vect1 ********************** class vect1 : public vect { int debut, fin ; public : vect1 (int d, int f) : vect (f - d + 1) // constructeur vect1 { cout << "++ Constr. vect1 - bornes : " << d << " " << f << "\n" ; debut = d ; fin = f ; } int & operator [] (int) ; } ; int & vect1::operator [] (int i) { return vect::operator [] (i-debut) ; }

su lp , uo c ilb up ra lc d cn o d ,

.eriassecn is retlpmoc el ed tnatnetnoc es ne ,utceffe jd liavart el rerpucr ttulp arehcrehc no ,euqitarp nE .elpmis tiat reutceffe liavart el rac ,ici sniom uD .1

1 tc ev

t ce v

: tiariudnoc suon iuq ec ,

][ ro ta repo

: t iu d n oc s u on i uq ec ,
1

s n ad t n ats i xe ru e tarp ol res i li t u s ap e n

tc ev

s n a d t n a ts i x e r u et ar p ol r es il it u
tc ev

: tuep no ,A >T ssalc< etalpmet rap eini fd nortap essalc enu tse A is ,elp mexe raP .noitavird al ed srol sertmarap xuaevuon ed non uo tiudortni nol euq noles stcepsa xued ritver tuep tilibissop etteC .sessalc ed nortap nud vird sessalc ed nortaP . n oi t a v ir d a l e d t n e m o m u a i c i tiudortni t a nortap tcepsa L .)T ep yt ed ert marap ed( sessalc ed ellima f enu tneitbo no : er i a ni dr o essalc enu tnat A ,elpmexe raP . erianidro essalc enud vird sessalc ed nortaP . B e m m o n e ss a l c e l u es e n u t n e it b o n o : A >T ssalc< etalpmet rap eini fd nortap essalc enu tse A is ,elpmexe raP .)sessalc ed nortap nud erilucitrap ecnatsni enud erid--tsec( nortap essalc enud evird erianidro essalC : stcepsa srueisulp ritver tuep nosianib -moc etteC .sessalc ed nortap ed ellec ceva egatirhd noiton al renib moc ed elica f srt tse lI
class B : public A <int> // B drive de la classe patron A<int> template <class T> class B : public A
t ce v

. s n a d t n e m et c err o c s ei n i f d t s a p t n o n s el l e is e m m , snad snoitcno f xued sec rini fd ed elb - iss o p e ts er li u q r et o n t u e p n o , s o p or p e c . n o i t a t c e f f a d r u et ar p ol t e ei p o c er r a p r u et - c ur ts n o c n u r i ni f d ti ar v e d e s s al c a l , el b a t i o l p x e er t r u o p , er o c n e l , u d n e t n e n e i B


1t c e v 1t c e v

12 Patrons de classes et hritage


e uqrameR
+ Constr. vect de taille 10 ++ Constr. vect1 - bornes : 15 24 15 16 17 18 19 20 21 22 23 24 - Destr. vect // **************** un programme dessai **************************** main() { const int MIN=15, MAX = 24 ; vect1 t(MIN, MAX) ; int i ; for (i=MIN ; i<=MAX ; i++) t[i] = i ; for (i=MIN ; i<=MAX ; i++) cout << t[i] << " " ; cout << "\n" ; }

12 - Patrons de classes et hritage

423

424

Lhritage simple CHAPITRE 19

12.1 Classe ordinaire drivant dune classe patron


: tni_tniop e mmon erianidro essalc enu >tni<tniop nortap essalc al ed vird snova suon ,icI

.reuqovd snonev suon euq snoitautis sed seniatrec tnadnopserroc selp mexe siort icioV .tnolov remirppus ne uo eriudortni ne erid--tsec ,sert marap sel ceva rg ertov reuoj zevuop suov ,elarng erinam enuD .)U ep yt ed ert marap ed( sevird sessalc ed ellimaf enu rerdnegne tuep elbissop esab ed essalc euqahc euq erid tuep no ,sac ec snaD

#include <iostream> using namespace std ; template <class T> class point { T x ; T y ; public : point (T abs=0, T ord=0) { x = abs ; y = ord ; } void affiche () { cout << "Coordonnees : " << x << " " << y << "\n" ; } } ; class pointcol_int : public point <int> { int coul ; public : pointcol_int (int abs=0, int ord=0, int cl=1) : point <int> (abs, ord) { coul = cl ; } void affiche () { point<int>::affiche () ; cout << " couleur : " << coul << "\n" ; } } ; main () { point <float> pf (3.5, 2.8) ; pf.affiche () ; // instanciation classe patron pointcol_int p (3, 5, 9) ; p.affiche (); // emploi (classique) de poincol_int } Coordonnees : 3.5 2.8 Coordonnees : 3 5 couleur : 9

: r a p s e v ir d s n o i t c n o f e d e ll i m a f el l e v u o n e n u r i ni f d .selbissop esab ed sessalc ed euq selbissop sevird sessalc ed tnatua etsixe li ,sac ec snaD
template <class T, class U> class B : public A <T>

nortap essalc enud tnavird erianidro essalC

: r a p s e v ir d s n o i t c n o f e d e ll i m a f el l e v u o n e n u r i ni f d
template <class T> class B : public A <T>

12 - Patrons de classes et hritage

425

12.2 Drivation de patrons avec les mmes paramtres


: tniop ud sennodrooc sel euq T ep yt emm ud tse tiudortni erb mem uaevuon el leuqel snad loctniop mmon nortap nu snovird suon ,tniop ssalc >T ssalc< etalpmet nortap ud ritrap
#include <iostream> using namespace std ; template <class T> class point { T x ; T y ; public : point (T abs=0, T ord=0) { x = abs ; y = ord ; } void affiche () { cout << "Coordonnees : " << x << " " << y << "\n" ; } } ; template <class T> class pointcol : public point <T> { T coul ; public : pointcol (T abs=0, T ord=0, T cl=1) : point <T> (abs, ord) { coul = cl ; } void affiche () { point<T>::affiche () ; cout << "couleur : " << coul ; } } ; main () { point <long> p (34, 45) ; p.affiche () ; pointcol <short> q (12, 45, 5) ; q.affiche () ; } Coordonnees : 34 45 Coordonnees : 12 45 couleur : 5

12.3 Drivation de patrons avec introduction dun nouveau paramtre


: tniop ud sennodrooc sed iulec ed tner ffid U ep yt nud tse tiudortni erbmem uaevuon el leuqel snad loctniop mmon nortap nu snovird suon ,tniop ssalc >T ssalc< etalpmet nortap ud ritrap

#include <iostream> using namespace std ; template <class T> class point { T x ; T y ; public : point (T abs=0, T ord=0) { x = abs ; y = ord ; } void affiche () { cout << "Coordonnees : " << x << " " << y << "\n" ; } } ;

sertmarap semm sel tnavresnoc ne snortap ed noitavirD

. e vir d es s a l c ert u a e n u r u o p es a b e d es s a l c e d r i vr es r u o t n os t u e p e v ir d ess al c e n u ; ) e m m ar gor p e m m nu d n ie s ua se s il -itu tne melleutnev( setner f fid sessalc srueisulp sevird ert tnevuep essalc emm enud : euqsiup sevitaler tnos evird essalc ed te esab ed essalc ed snoiton sec ,tia f nE .e v ir d es sa lc e n u te es ab e d es sa lc e n u : s i o f a l sess al c x u ed e uq r i ne vre t ni t n asi a f en snoitautis sed tnati mil suon ne egatirhl ed esab ed sepicnirp sel resopxed snonev suoN

.egatirhl ed erdac el snad serias -secn tne melarng seudner sneil ed snoitid te snoitalip moc setner ffid sel ervu ne ertte m ed erinam al snorenimaxe suon ,ni fnE .stner ffid tnemevitaler stub sed snad silitu ert tuep egatirhl euq snorrev suon siuP .sevisseccus snoitavird sed tnasilitu ne etiahuos el nouq sio f ed tnatua erti ert tuep euqinhcet al euq snorertnom suon ,drobad tuoT .egatirhl ed noitacilppa ne esi m al snad tnenneivretni iuq stniop seuqleuq eni maxe ehpargarap eC

ertmarap uaevuon nud noitcudortni ceva nortap ed noitavirD


Coordonnees : 3.5 2.8 couleur : 12 Coordonnees : 295467 345789 couleur : 8

426

13.1 Drivations successives

13 Lhritage en pratique
Lhritage simple CHAPITRE 19
main () { // un point coordonnes de type float et couleur de type int pointcol <float, int> p (3.5, 2.8, 12) ; p.affiche () ; // un point coordonnes de type unsigned long et couleur de type short pointcol <unsigned long, short> q (295467, 345789, 8) ; q.affiche () ; } template <class T, class U> class pointcol : public point <T> { U coul ; public : pointcol (T abs=0, T ord=0, U cl=1) : point <T> (abs, ord) { coul = cl ; } void affiche () { point<T>::affiche () ; cout << "couleur : " << coul << "\n" ; } } ;

.udnapr uep tse egasu ruel euq ecrap tnem maton ,02 ertipahc ua repuorger sel r frp snova suoN .seriatnemlppus secnassiannoc seuqleuq etissecn ervu ne esim ruel ,elpitlum egatirhd snoitautis sel enrecnoc iuq ec nE . evirp noitavird ed tnemelabolg elrap no ,etpmoc ud tuob uauq ruop ev -irp tios snoitavird sec ed elues enuuq tiffus liuq zetoN .esab ed essalc as ed seuqilbup s e vis se cc us s n oi ta v ir d sr u e is ul p u o e n u ra p t n ei t b o s e nre c n oc es sa lc a l e u q er d ner p m oc arduaf li ,euqilbup noitavird ed snorelrap suon euqsrol ,emm eD .)non uo etcerid( euqnoc -leuq etnadnecsed enud rigas arruop li ,esab ed essalc enud evird essalc enud snorelrap suon euqsrol ,elarng erinam enuD .)...sruetcurtsnoc sed leppa ,exatn ys( elp mis egatirhd snoitautis sel setuot e mlborp nucua snas dnets tnanetniam uqsuj tid t a iuq ec tuoT

: el p mis e l p m e x e n u i ci o v n E . e x el p m o c r i n e v e d t n e m e l l e ut -nev tuep iuq ehparg nu sia m ,sessalc ed ecnecserobra enu eria ffa sulp an no ,snoitidnoc sec snaD .sessalc srueisulp ed tne mnatlu mis retirh tuep ennod essalc enu : elpitlum egat -irh l e mmon nol euq ec tnasiudortni ne egatirhd stilibissop sel tigral ++C ,sruellia raP . B e d et cer id etnadnecsed enu tse D euq arid no ,sicrp sulp ertd nioseb arua nouqsrol ; B ed etnadnec -sed enu issua tse D ,tnemellerutaN .D ed etnadnecsa enu tse A euq erocne uo A ed etnadnec -sed enu tse D euq arid no ,D te A ertne tnatsixe noitaler al eriudart ruoP .)A ed etirh e mm - e l l e i u q , B e d e t ir h D e u q is s u a t i d n o( A e d e v ir d e m m- el l e , B e d e v ir d ts e D , i cI

G C

E B A

: e uq el le t ec n ecs erobr a e n u r ap s e t nes -rper ert tnevuep esab ed essalc emm enud sevird sessalc setner ffid sel ,tid tne mertuA
427

13 - Lhritage en pratique

.elpitlum egatirhl ed sap esopsid en nol is erbra nud uO .1

.) X U N I L uo XINU stnemennorivne sel snad( ekam reihci f ed uo ) CP stnemennorivned erbmon nob snad( tejorp ed noiton al snad emsinac m ec evuorter nO .eriassecn is euq ueil tneian setnadnopserroc snoitalipmoc sel euq etros ne eria f ed te sreihci f stner ffid sec ertne sec -nadnepd sed etp moc rinet ed tnettemrep noitam margorp ed stnemennorivne sed trapulp a L .e v ir d es sa lc e tt ec t na si li t u e m m ar gorp n u ; e v ir d ess al c e n u ; esab e d ess al c en u : tnemraps te tne mevisseccus elip moc nouqsrol uej ne sesim snoitarpo sel tnartno m larng a mhcs nu srpad-ic zerevuort suoV .raps reihci f nu snad eini fd esab ed essalc enu esilitu nouqsrol redcorp tnem moc uv jd snova suon ,2 ehpargarap uA .isnia tnemerar av ne li siaM .)...tejbo eludom nu ,ecruos reihci f lues nu( em m-iul em margorp el snad serc tnos evird essalc al te esab ed essalc al is selpmis srt tnos sesohc sel ,e mmargorp nud nies ua evird essalc enud )sneil ed noitid ,noitalip moc( noitasilitul enrecnoc iuq ec nE

.se v - ir d ses sa lc ser t ua d r u op esab e d se ssa lc e m m oc s es il i tu er t d t n e me lp m is si a m ,s te jb o sed ecnassian rennod ed sap tsen noitacov al tnod erid--tsec , setiartsba sessalc sed em mon nol euq ec rerc e mm tuep nO . sessalc ed ehparg nud e mro f suos tna mirpxel ne emlborp nu erduosr rehcrehc neir ed tnatrap en ne tuep no ,tirpse ertua tuot nu snaD .etnerffid tse resilitul ed noa f al elues ; esab ed essalc al em moc tiga iuq evird essalc enu srola erc nO .snnod sertirc sed ednopr elleuq ruop ruetasilitu eca fretnil rei fidom ne etiahuos no ,essalc enud tnasopsid ,o sac el issua evuort no ,noitasilitur ed tirpse tec snaD . e p yt u d s t e j b o s el s u o t s n a d ec a pse l e d t n ore p u cc o )a ne y l is( s si li t u no n s e n n o d ser b m e m s el , e hc n av er n E . ess al c al t n e m e l at o t t n a v ir c r n e r e t i m il u p ti ar u a n o l e u q s u qir b m i s l e p p a s e d s n a d n oi t u c x e d sp met ed etrep enud iulec ares uruocne euqsir lues e L .sneil ed noitidl seroprocni sap tnores en sesilitu non snoitcno f sel o erusem al snad silanp port sap ares en no ,trapd ed ess al c al e d s n oi t c n o f s e l s et u o t s a p et i ol p x e n n o l is e m M . l e i c i g o l e d ei tr a p e n u es il it u r nouqsiup noitam margorp ed sp met ud srola engag nO .emlborp ud elbmesnel erdnopr n o a f e d et l p m o c n o u q e vir d ess al c e n u r e r c sr o l a t u e p n O . t n e m el l ei tr a p e vl os r el iuq essalc enud jd esopsid nouq tuep es li ,nnod emlborp nu eca f ,elpmexe raP .stnerf fid srt stub xued snad silitu ert tuep egatirhL
1

428

13.3 Exploitation dune classe drive 13.2 Diffrentes utilisations de lhritage


Lhritage simple CHAPITRE 19

c l a s s e d r i v e
E x p l o i t a t i o n

u t i l i s a n t l a

P r o g r a m m e

d r i v e

c l a s s e

D f i n i t i o n C o m p i l a t i o n d r i v e cM l a s o s d e u l e o b j e t

d r i v e

c l a s s e

D c l a r a t i o n

b a s e

c l a s s e d e

D f i n i t i o n C o m p i l a t i o n b a s e

b a s e

c l a s s e d e

D c l a r a t i o n

d u n e c l a s s e d r i v e

C o m p i l a t i o n u t i l i s a t e u r pM r o o d g u r a l m e m o e b j e t

cM l a s o s d e u l d e e o b j e t

l i e d E n e d i t s o i n e x c u t a b l e P r o g r a m m e

13 - Lhritage en pratique

429

? A e d x u e d s et u ot t n et ir h i u q C t e B e d e tir h D o ,ic-ellec euq sellet snoitautis sed snad ertarappad tneuqsir iuq stil fnoc sel relgr tnemmoC ? . ct e , s n o it a mr o f ni d noissi msnart ,erdro : snrecnoc sruetcurtsed te sruetcurtsnoc sel sleppa tnos tnemmoC ? e vir d e ss a l c e n u d ni es u a el p it l u m e c n a d n e p d e t t e c r e mir p x e t n e m m o C : s et n a vi us s n o i ts e u q x u a er d n o p r r u o p s et i u d or t ni er t t n e v i o d seriatnemlppus snoitamro fnid erb mon niatrec nu ,snio mnaN .elpitlum egatirhl tned -nets elpmis egatirhl ed soporp setid snova suon euq sesohc sed trapulp al ,udnetne neiB .)elpitlum egatirhl ed sac( tiucric snas tneiro ehparg elpmis nu noles euq )elp mis e g at ir h l e d s a c( s er br a sr u eis u l p u o n u n ol es s e ss a l c e d el b m es n e n u r er ut c ur ts e d e l i c a f sulp ,te ffe ne ,tse lI .sleicigol sed noitpecnoc al ed uaevin ua euqilp mi liuq stluci ffid sel snad tnemeniatrec edisr nosiar elapicnirp a L .udnapr uep zessa etser egasu nos ,tuot rglaM .elpmis egatirhl rap esopmi euqihcrarih etniartnoc al ed rihcnar ffas ed temrep elle o erusem al snad ,etneuqsnoc noitasilarng enud l tigas lI .elpitlum egatirhd stilibissop ed esopsid ++C ,tnedcrp ertipahc ua langis snoval suon em moC

Lhritage multiple

20

.egahci ffad noitcno f enu te ruetcurtsed nu ,ruetcurtsnoc nu snoti mil suon suon ,icI .serbme m xuaevuon ed rini fd snovuop suon ,essalc ettec ed nies uA .esab ed sessalc ed snoitnem ed etsil e n u ra p es a b e d ess al c e n u d n o it n e m a l r ec al p m er e d s t n et n oc s e m m o s s u o n s u o n e u q ze t o N : )detcetorp u o e t a v i r p r e y ol p m e s n oirr u o p s u o n s i a m ,s ess al c x u e d s e l r u o p c i l b u p i si o hc s n o va s u o n , ic i( isnia tnaralcd al ne sessalc xued sec ed tnatirh luoctniop essalc enu rini fd snovuop suoN
class point { int x, y ; public : point (...) {...} ~point () {...} affiche () {...} } ; class coul { short couleur ; public : coul (...) {...} ~coul () {...} affiche () {...} } ; class pointcoul : public point, public coul { ... } ;

: ) n oi t ar ts n o m d a l el b a s n e ps i d n i ti at i u q e c s e ti u d r s n o v a sel suon( isnia tnetnesrp es luoc te tniop sessalc sel euq ,sedi sel rexi f ruop ,snosoppuS

luoctniop luoc tniop

: luoc te tniop se mmon sessalc sertua xued ed etirh , luoctniop snorem mon suon euq ,essalc enu o ellec ,elp mis noitautis enu snordisnoC

432

1 Mise en uvre de lhritage multiple


D C A B
Lhritage multiple CHAPITRE 20

: sfita mro fni segahci ffa seuqleuq stiudortni t tno elleuqal snad ,luoctniop essalc al ed noitasilitud te noitini fd ed telpmoc elpmexe nu icioV .)etrop ed noitulosr ed ruetarpol sruocer siof srueisulp tnemelleutnev tna ya ne( serb me m sed nul resilitu ned elbissop tnemelag tiares li ,essalc ertua enud evird e m m-elle tiat luoc te tniop sessalc sed enul is ,tnemellerutaN .tniop ed ehciffa noitcno f al arelleppa )( ehciffa::tniop.p euq sidnat ,luoctniop ed ehciffa noitcno f al arelleppa )( ehciffa.p : c e v a , e l p m e x e r a P . ) s t u g i b m a sed revel ruop etrop ed noitulosr ed ruetarpol ed tnavres es ne( luoc te tniop esab ed sessalc sed serbmem snoitcnof xua tne melleutnev uo , luoctniop ed serbmem snoitcno f xua leppa eria f tuep luoctniop ep yt ed tejbo nU .euqissalc tse luoctniop essalc al ed noitasilituL
void affiche () { affp () ; affc () ; } pointcoul p(3, 9, 2) ;

: tne melp mis erircs up tiarua ehciffa noitcno f al ,cffa te pffa elpmexe rap tneia mmon es luoc ed te tniop ed egahcif fad snoitcnof sel is ,udnetne neiB
void affiche () { point::affiche () ; coul::affiche () ; }

: ares luoctniop ed ehciffa noitcnof al ,isniA .etrop ed noitulosr ed ruetarpol tna yolpme ne tugib mal revel tuep no ,sessalc setner ffid snad mon e m m el tnetrop serb -mem snoitcno f srueisulp euqsro L .esab ed essalc enud )egtorp uo( euqilbup erb me m noit -cno f etuot resilitu tuep no ,evird essalc al ed erb me m noitcno f enu snad ,elpmis egatirhl ed sac el snad e mmoC .luoc ed te tniop ed ehciffa snoitcno f sel tnemevisseccus re yolpmed snosoporp suov suon ,ehciffa issua elle snore mmon suon euq egahcif fad noitcno f al snaD .luoctniop ep yt ed tejbo nud noit -curtsed al ed srol esrevni erdrol snad sleppa ,erocne l ,tnores sleutnev sruetcurtsed se L .) luoctniop ,ici( evird essalc al ed ruetcurtsnoc ; )luoc siup tniop ,ici( evird essalc al snad seralcd tnos esab ed sessalc sel o erdrol snad ,esab ed sessalc sed sruetcurtsnoc : tnavius el tse sruetcurtsnoc sed leppad erdroL
pointcoul ( .......) : point (.......), coul (.......) | | | arguments arguments arguments de pointcoul transmettre transmettre point coul

: isnia etnesrp es ruetcurtsnoc ud ett-neL .esab ed sessalc xued a y liuq ecner ffid ettec ceva ,ici emm ed av ne lI .esab ed essalc al ed ruetcurtsnoc ua snoit -a mrofni sed erttemsnarter riovuop tiaved ruetcurtsnoc el ,elpmis egatirhl ed sac el snaD
433

1 - Mise en uvre de lhritage multiple

434

Lhritage multiple CHAPITRE 20

#include <iostream> using namespace std ; class point { int x, y ; public : point (int abs, int ord) { cout << "++ Constr. point \n" ; x=abs ; y=ord ; } ~point () { cout << "-- Destr. point \n" ; } void affiche () { cout << "Coordonnees : " << x << " " << y << "\n" ; } } ; class coul { short couleur ; public : coul (int cl) { cout << "++ Constr. coul \n" ; couleur = cl ; } ~coul () { cout << "-- Destr. coul \n" ; } void affiche () { cout << "Couleur : " << couleur << "\n" ; } } ; class pointcoul : public point, public coul { public : pointcoul (int, int, int) ; ~pointcoul () { cout << "---- Destr. pointcoul \n" ; } void affiche () { point::affiche () ; coul::affiche () ; } } ; pointcoul::pointcoul (int abs, int ord, int cl) : point (abs, ord), coul (cl) { cout << "++++ Constr. pointcoul \n" ; } main() { pointcoul p(3,9,2) ; cout << "------------\n" p.affiche () ; cout << "------------\n" p.point::affiche () ; cout << "------------\n" p.coul::affiche () ; cout << "------------\n" }

; // appel de affiche de pointcoul ; // on force lappel de affiche de point ; // on force lappel de affiche de coul ;

.egatirhd noiton al ed tnem madnepdni ,etiahuos el elleuq seca fretnid tnatua retne mlp mi tuep essalc enU .setnadnopserroc sedohtm s el t ne m e vi tc e f fe r inr u o f t i od el le ,e ca fre t ni en u et n e m lp m i essa lc e nu uqsr o L .) se n - n o d e d s a p a y n li( s e d o h t m e d s n oi t a c i f i c ps e d el b m es n e n u t n e m el p mis ts e e c a fr e t ni enU .se mlborp sel tnem magl sulp retiart ed larng ne temrep iuq )++C ed eunnocni( ecafretnid noiton al ed esopsid li ,ehcnaver nE .elpitlum egatirhl sap tannoc en avaJ
avaJ n E

. x : : B e d u o x : : A e d ar e l r a p n o : e tr o p e d n o i t u l o s r e d r u e t a r p o l e d e d i a l n o i t c n i t s i d a l a r e f n o , C e d s er b m e m s n o i t - c n o f s e d n i e s u A . B e d er t u a l , A e d t ir h n u l , x s m m o n s e r b m e m x u e d a r e d s s o p C

: ceva ,elp mexe raP .)sirotua tse scca ruel o erusem al snad( sennod serbmem sed tiareuqilppas ehcra md emm a L .) ehciffa elpmexe rap( setner ffid sessalc xued t n a ne tra p pa m on e m m e d ser b m e m sn o it c n o f xu e d re u g ni ts i d t n e m m o c u v s n o va su o N

luoc ed te tniop ed etirh luoctniop : elpitlum egatirhd elpmexe nU


++ Constr. point ++ Constr. coul ++++ Constr. pointcoul -----------Coordonnees : 3 9 Couleur : 2 -----------Coordonnees : 3 9 -----------Couleur : 2 --------------- Destr. pointcoul -- Destr. coul -- Destr. point

class A { ..... public : int x ; ..... } ; class C : public A, public B { ..... } ;

1 - Mise en uvre de lhritage multiple

class B { ..... public : int x ; ..... } ;

e uqrameR

435

redna med zevuop suov ,tiaf nE .xueregnad te xueiditsa f ertd euqsir alec siam ,)! e m m el sruojuot( xuej xued sed nul ceva relliavart ruop relliuorbd es sruojuot tuep no ,snoit - i d n o c s e c s n a D .s e n n o d s e d n o it a c il p u d e tt e c s a p ar e t i a h u os e n n o ,t n a d n e p e c , l ar n g n E x: : C e d x :: B : x erbme m ed sap tnedssop en C te B is ,tnemelleutnev ,uo x :: C :: A e d x :: B :: A : ar e u g n it si d n o , e l p m e x e r a P . e tr o p e d n oi t ul os r e d r u et ar p ol e d e di al r e u g -nitsid sel ed aretnetnoc es no te reilucitrap ed neir are f en no ,)A ed( sennod ed xuej xued ed es o psi d D e u q et i a h u os n o l i S . e m l b or p u d d n e p d es n o p r a l ,t i a f n E ? e c n a d n o d er li- t- a Y .D epyt ed stejbo sel suot snad suqilpud tnemevitcef fe tnores )y te x( sennod serb me m sel , e h c n a v er n E .) e s a b e d es s a l c al r u o p e n u u q e ts i x e n e n li( s e u q il p u d t n e m el l e r s a p t n os e n selleuqsiup ecnatrop mi snas siam ,)snoitcno f semm sel tnos ec( elituni tnemetse finam tse alec ,serbmem snoitcno f sel enrecnoc iuq ec nE .D snad siof xued tnessiarappa )sennod uo snoitcno f( A ed serb me m sel ,snoitidnoc sec snaD ! A ed sio f xued etirh D ,etros euqleuq nE
class A { ..... int x, y ; } ; class B : public A {.....} ; class C : public A {.....} ; class D : public B, public C { ..... } ;

: euq sellet snoitaralcd sed tnadnopserroc

D C A
: e t n a v i u s n oi t a u ti s a l s n or d is n o C

436

2 Pour rgler les ventuels conflits : les classes virtuelles


Lhritage multiple CHAPITRE 20

uaevin nud noita mro fnid tre fsnart euqahc euqsiup( rioluov el ed nosiar enucua sruelliad s n o va n s u o n t e )e l p m e x e ra p , A r u o p C( tc eri d ni t na d ne cs a n u d r ue tc ur ts n o c n u s n o it -a mrofni sed rer fsnart ed ruetcurtsnoc nu rednamed sap snovuop en suon ,ehcnaver nE .)E te D ruop F ,A ruop B ,B ruop C( stcerid stnadnecsa ses ed sruetcurtsnoc sel te essalc enud r u e t c ur ts n o c n u ert n e s n o it a mr o f ni d str e fs n ar t s e d r e d n a m e d t n e m m o c s n o v as s u o n ,s ul p e D

C F E D B A

: e uq se ll et snoitautis sed snad sruetcurtsed sel te sruetcurtsnoc sel sleppa tnos tnemmoc uv snova suoN

.) e t a v -irp tom el uo( cilbup to m el srpa uo tnava tne mmer ffidni calp ert tuep lautriv to m e L e uqrameR .stnadnecsed ed sap tnon selleuq tnat erinam e mm al ed tnetropmoc es ,C te B sessalc sel ,lautriv to m el snas uo cevA .)! C te B ed nies ua elleutriv e mmoc A reuqram ruop ruetalipmoc el rap ecalp ne esi m ehcac noitamro fni enu tsen ec is( semm-selle C t e B s ess a l c s el r us t e f f e d er u g a n n o it ar a l c d et t e c , ti d t n e m ert u A . C e d sl e u t n e v st n a d -necsed sel snad sio f elues enuuq etiudortni ert arved en A euq ei fingis B ed noitaralcd al snad elleutriv e mmoc A rini fd ,te ffe nE .C te B snad ici tarappa lautriv euq neib zetoN : ) lautriv lc-to m( elleutriv tse A essalc al euq )! D ed ellec snad sap ,noitnetta( C te B sessalc sed snoitaralcd sel snad ,resicrp tuaf suov li ,alec ruoP .D essalc al snad A ed serb mem sel siof elues enuuq reroprocnin ed ++C
437
class B : public virtual A {.....} ; class C : public virtual A {.....} ; class D : public B, public C {.....} ;

3 Appels des constructeurs et des destructeurs : cas des classes virtuelles


3 - Appels des constructeurs et des destructeurs : cas des classes virtuelles

. A e p yt e d st c ni t -sid stejbo xued ed noitcurtsnoc evitini fd ne arua y liuqsiup ecnatropmi enucua an aleC : ri o v a tu e p n o ,e l p me x e r a P .A enrecnoc iuq ec ne stnemugra se m m sel uvrp sap tneian C te B euq reniga mi neib srt tuep no ,snoitamro fnid stre fsnart sel enrecnoc iuq ec nE D C 2A B 1A : t na v iu s erdrol snad sleppa tnores sruetcurtsnoc sel ,erdro tec snad C te B sessalc sel ralcd a D iS
C (int q, float x) : A (q) B (int n, int p, double z) : A (n, p)

D C 2A B 1A

: A e ss a l c a l x u e d s e l s e t u o t t n es il o b m ys 2 A t e 1 A s n oi t a t o n sel elleuqal snad ,etnavius noitautis al ed ecnesrp ne tiat nol is e mmoc essap es tuot ,euq -ilpud tnat A essalc al ,euq rerdisnoc tuep no ,C te B snad elleutriv eralcd sap tsen A iS

D C A
: e t n a vi us n o i t a ut is a l t n a n e t ni a m s n or dis n o c s i a M .) t n a d -nopserroc uaevin ud ruetcurtsnoc ud ett-nel snad i ficps tiat rueirpus uaevin el srev
438
Lhritage multiple CHAPITRE 20

.)I ed noitaralcd al snad H te G tnerugif leuqel snad erdrol noles I ,G ,H ,E ,F uo( I ,H ,G ,E ,F )tnediv snio m( erdrol tiudnoc alec

I )F lautr iv( H F E
: e u q el l et n o it a ut is e n u s n a d si a M . er d n e tt as t n e m e ll er ut a n tuot tuep no leuqua ,D te C ,B ,A erdrol tiudnoc suon alec ,icI .sertua sel tnava leppa sruojuot tse elleutriv essalc enud ruetcurtsnoc el ,sleppa sed erdrol enrecnoc iuq ec nE .)A ed ruetcurtsnoc nu srev C uo B ed ruetcurt -snoc nud noitamro fnid noissimsnart ed emsinac m ed sulp etsixen li ,sio f ettec ,euqsiup( C uo B ep yt ed stejbod elbanevnoc noitarc al ertte mrep ed ni fa ,)ruetcurtsnoc nucuad u o ( t n e m u g r a s n a s r u e t c u r t s n o c n u d e s o p s i d A e u q t n e m u l o s b a a r d u a f l i , er t u o n E .) C te B s na d e ll e u tri v e ra lc d t sap tiavan A euq srola ,tne mmedcrp uvrp snoival suon e mmoc( C te B sruetcurtsnoc sed uaevin ua A ruop snoita mrofni sed resicrp ed )tidretni te( elituni ares li ,udnetne neiB : ri o va snorruop suon ,isniA .A senitsed snoitamro fni sed ,D ed ruetcurtsnoc el snad ,rei ficps ) elleutriv noitavird ed sac ec snad tnemeuqinu( esirotua suov ++C ,eria f ec ruoP .D snad s ia m , C u o B s na d s u l p n o n u ei l a A e d r u et c ur ts n oc u a ri nr u o f s n o it a mr o f n i s e d xi o hc e L : et n a v i us n o a f al e d t u gi b m a et t e c t u os r + + C , ti a f n E ? C rap suvrp xuec uo B rap suvrp xueC ? ruetcurtsnoc ua srola erttemsnart li-tua f stnem -ugra sleuQ .A ep yt ed tejbo lues nuuq ariurtsnoc en no ,sac ec snad ,tef fe nE .)elbalav sulp tsen a mhcs reinred el( tne mertua tuot av ne li ,C te B snad elleutriv eralcd t a A is siaM
439
D (int n, int p, double z) : B (n, p, z), A (n, p)

)F lautr iv( G

3 - Appels des constructeurs et des destructeurs : cas des classes virtuelles

.tne mugra snas ruetcurtsnoc nud ressopsid srola tiod iuq tniop essalc al ed tnemelleutriv tnevird essamtniop te loctniop sessalc sel euq uvrp riovad eri as e c n t s e l i u q t i o v n o , ess al c et t e c s n a d t n i o p e d s e r b m e m s e d n o i t a c i l p u d a l r e t i v r u o P

essa m

: a mhcs ec tiudnoc suon iuq ec ,essamtniop ed te loctniop ed revird snosia f al suoN .essa m enud te rueluoc enud sio f al stod stniop sed retnesrper ruop essamloctniop essalc enu snorc suon ,nifnE .essam enud stod stniop sed retnesrper ruop essamtniop essalc enu te essam enu retnesrper ruop essam essalc enu ertuo ne snossin -i fd suon ,icI .sroloc stniop sed retnesrper ruop tniop ed evird loctniop essalc enu te ruel -uoc enu retnesrpr ruop luoc esalc enu inifd snoiva y suoN .1 ehpargrap ud elpmexel ed noitasilarng enud tigas lI .ruetcurtsnoc ertne snoita mro fnid snoissimsnart sel te selleutriv snoitavird sel ,elpitlu m egatirhl sio f al tnartsulli elpmexe titep nu snosoporp suov suoN

440

4 Exemple dutilisation de lhritage multiple et de la drivation virtuelle

Lhritage multiple CHAPITRE 20

#include <iostream> class point { int x, y ; public : point (int abs, int ord) { cout << "++ Constr. point " << abs << " " << ord << "\n" ; x=abs ; y=ord ; } point () // constr. par dfaut ncessaire pour drivations virtuelles { cout << "++ Constr. defaut point \n" ; x=0 ; y=0 ; } void affiche () { cout << "Coordonnees : " << x << " " << y << "\n" ; } } ;

essa mloctn iop essa mtn iop tn iop luoctn iop luoc

4 - Exemple dutilisation de lhritage multiple et de la drivation virtuelle

441

class coul { short couleur ; public : coul (short cl) { cout << "++ Constr. coul " << cl << "\n" ; couleur = cl ; } void affiche () { cout << "Couleur : " << couleur << "\n" ; } } ; class masse { int mas ; public : masse (int m) { cout << "++ Constr. masse " << m << "\n" ; mas = m ; } void affiche () { cout << "Masse : " << mas << "\n" ; } } ; class pointcoul : public virtual point, public coul { public : pointcoul (int abs, int ord, int cl) : coul (cl) // pas dinfo pour point car drivation virtuelle { cout << "++++ Constr. pointcoul " << abs << " " << ord << " " << cl << "\n" ; } void affiche () { point::affiche () ; coul::affiche () ; } } ; class pointmasse : public virtual point, public masse { public : pointmasse (int abs, int ord, int m) : masse (m) // pas dinfo pour point car drivation virtuelle { cout << "++++ Constr. pointmasse " << abs << " " << ord << " " << m << "\n" ; } void affiche () { point::affiche () ; masse::affiche () ; } } ;

442

Lhritage multiple CHAPITRE 20

class pointcolmasse : public pointcoul, public pointmasse { public : pointcolmasse (int abs, int ord, short c, int m) : point (abs, ord), pointcoul (abs, ord, c), pointmasse (abs, ord, m) // infos abs ord en fait inutiles pour pointcol et pointmasse { cout << "++++ Constr. pointcolmasse " << abs + " " << ord << " " << c << " " << m << "\n" ; } void affiche () { point::affiche () ; coul::affiche() ; masse::affiche () ; } } ; main() { pointcoul p(3,9,2) ; p.affiche () ; // appel de affiche de pointcoul pointmasse pm(12, 25, 100) ; pm.affiche () ; pointcolmasse pcm (2, 5, 10, 20) ; pcm.affiche () ; int n ; cin >> n ; } ++ Constr. defaut point ++ Constr. coul 2 ++++ Constr. pointcoul 3 9 2 Coordonnees : 0 0 Couleur : 2 ++ Constr. defaut point ++ Constr. masse 100 ++++ Constr. pointmasse 12 25 100 Coordonnees : 0 0 Masse : 100 ++ Constr. point 2 5 ++ Constr. coul 10 ++++ Constr. pointcoul 2 5 10 ++ Constr. masse 20 ++++ Constr. pointmasse 2 5 20 ++++ Constr. pointcolmasse 5 10 20 Coordonnees : 2 5 Couleur : 10 Masse : 20

selleutriv snoitavird sed te elpitlum egatirhl ed noitasilitud elpmexE

gnidnib cimanyd

ero c n e uo .

, s ia lg na nE .2 , s ia lg na nE .1

gnidnib etal gnidnib ylrae

.selleutriv snoitcno f sed emsinac m ua leppa tnasiaf ne er v u ne s i m ert t u e p e msi h pr o m y l o p el , + + C ne ,t na n et n ia m ri o v e l s n o ll a s u o n e m m o C .emsihp -r o m yl o p e d x ue i m u o ,e u q i m an y d e ga p yt e d u o e u q i m a n y d er ut a g i l e d sr ol a e lr a p n O .)em margorp ud tnemeluord ud li f ua reirav arruop ruetniop emm nu rap ngisd tejbol ed ep yt el( noitucxel ed tne mom uauq etpmoc ne sirp tios en tejbol ed ep yt el euq eriassecn tse li ,tniop tejbol ed ep yt ua tnadnopserroc edoht m al ed leppal rinetbo riovuop ruoP .ruetniop ud ep yt el a tniop tejbol euq rerdisnoc ed tnemevitcef fe tse ruetalip moc el eria f essiup euq xueim el ,s n oi t i d n o c s e c s n a D . n o it a li p m o c a l e d t n e m o m u a ni mr e t d ts e y ) t n i o p( t ej b o n u d ep yt e L .euqitats egap yt nu erocne uo , euqitats erutagil enu em mon nol euq ec esilar ++C ,iciuqsuj sertnocner snoitautis sel snad ,euq ec ed tnemelleitnesse tneivorp enucal etteC .emm-iul tniop tejbol ed fitce ffe ep yt ua sap non te ,ruetniop u d e p yt u a t n a d n o p s err o c e d o ht m al r e l e p p a t n e m e u q it a m ts ys ti u d n o c t ni o p t ej b o n u ruop edoht m enud leppal : etnatrop mi enucal enu esoppos egatnava tec ,91 ertipahc ud 3.6 ehpargarap ua tatsnoc snoval suon em moc ,sio fetuoT .tnadnecsed tejbo leuq etropmin ed esserdal riovecer tiavuop tejbod ep yt nu rus ruetniop nu ++C neuq uv snova suoN
1

Les fonctions virtuelles et le polymorphisme

21

: t n i o p ess al c al ed ehciffa edohtm al )lautriv lc-to m( elleutriv reralcd ed ti ffus li ,eria f ec ruoP .)loctniop uo tniop ici( pda rap ngisd tnemeller tejbol ed ep yt ua tnadnopserroc ellec sia m ,tniop ed ehciffa edohtm al tnemeuqitamts ys sulp non elleppa : noitcurtsnil euq etros ne eria f ed erttemrep suon av ++C rap soporp selleutriv snoitcno f sed e msinacm e L
adp -> affiche ()

. e u q it at s erutagil ed elrap no elleuqal ruop nosiar al tseC .pda elbairav al ed ep yt ud noitcnof ne tia f t cnod a li ; noitalipmoc al ed srol silar t a releppa edohtm al ed xiohc el ,te ffe nE . ehciffa edohtm enud issua iul esopsid loctniop ep yt el euq srola ,tniop epyt ud ehciffa edohtm al leppa sruojuot tiaf : noitcurtsnil ,sniomnaN .loctniop ep yt ed tejbo nu rus tnanetnia m etniop pda ruetniop el : )esirotua( noitatce ffa ettec snotucxe suon is siaM .tniop ep yt ud ehciffa edohtm al elleppa
adp -> affiche () ; adp = & pc ; adp -> affiche () ;

444

2 Le mcanisme des fonctions virtuelles

: 9 1 ert i p a h c u a e r t n o c n er j d , e t n a v i u s n oi t a u ti s a l s n or d is n o C

1 Rappel dune situation o le typage dynamique est ncessaire

Les fonctions virtuelles et le polymorphisme CHAPITRE 21

class point { ..... virtual void affiche () ; ..... } ; class point { void affiche () ; ..... } ; ..... point p ; pointcol pc ; point * adp = &p ;

: noitcurtsniL

class pointcol : public point { void affiche () ; ..... } ;

: ehciffa noitcno f al elleutriv erdner ed stnetnoc sem mos suon suon leuqel snad ,91 ertipahc ud 3.6 ehpargarap ud iulec tnadnopserroc e mmargorp el iciov ,elp mexed ertit .)etnadnoder tiares noitamro fni ettec( esab e d ess a l c e n u s n a d e ll e utr i v e r al c d n o it c n o f e n u ,s e v ir d s es s a l c s e l s n a d , e l l e utr i v r er a l c d ed eriassecn sap tsen li : noitacifidom enucua aredcorp en no ,loctniop essalc al snaD .)setner ffid snoitcno f sed releppa tnavuop noitcurtsni emm ettec ed snoituc -xe srueisulp( leppal utce ffe tna ya tejbol ed tcaxe ep yt el rus sab tnat xiohc ec ,noitcurt -sni ettec ed noitucxel ed tnemo m uauq noitcno f al ed xiohc el reutce ffen ed tnattemrep fitisopsid nu ecalp ne erttem ed aretnetnoc es lI .releppa erudcorp al ed sap aredicd en li : e uq le t lepp a n u ar ert n oc n er r ue ta lip mo c el e u qsr o l , ti d t n e m ert u A . e u qi t a ts er u t a g il e n u s ul p n o n t e e u qi m a n y d er ut a gi l e n u r e si li t u t n e v -iod ehciffa noitcno f al ed sleppa sleutnev sel euq ruetalip moc ua euqidni noitcurtsni etteC
445
adp -> affiche () ;

#include <iostream> using namespace std ; class point { protected : // pour que x et y soient accessibles pointcol int x, y ; public : point (int abs=0, int ord=0) { x=abs ; y=ord ; } virtual void affiche () { cout << "Je suis un point \n" ; cout << " mes coordonnees sont : " << x << " " << y << "\n" ; } } ; class pointcol : public point { short couleur ; public : pointcol (int abs=0, int ord=0, short cl=1) : point (abs, ord) { couleur = cl ; } void affiche () { cout << "Je suis un point colore \n" ; cout << " mes coordonnees sont : " << x << " " << y ; cout << " et ma couleur est : " << couleur << "\n" ; } } ; main() { point p(3,5) ; point * adp = &p ; pointcol pc (8,6,2) ; pointcol * adpc = &pc ; adp->affiche () ; adpc->affiche () ; cout << "-----------------\n" ; adp = adpc ; // adpc = adp serait rejet adp->affiche () ; adpc->affiche () ; }

2 - Le mcanisme des fonctions virtuelles

.ler sac nu snad tnatropmi ert tiarruop li siaM .ici timil srt tse uejnel ,udnetne neiB .1

s n os o p p us s u o n ,t n asi a f e c , u d n et n e n e i B .t ej b o e u q a h c s e u q i fi c ps s n o it a mr o f n i s el r e h ci f - fad noitacov ruop tna ya ,)eifitnedi elpmexe rap em mon( noitcno f ertua enu leppa essa f ; )sessalc sel setuot enu mmoc noitca( sennodrooc sel ehci f fa : elleuq erinam ed )tniop essalc al ed( ehciffa noitcno f al rini fd snovuop suon , ecnad -noder ettec retiv ruoP .sennodrooc sed egahci ffad snoitcurtsni sed ,noitcno f euqahc snad ,riovrp tiudnoc aleC .ehciffa noitcno f al esiug as tiarini fder setnadnecsed ses ed enuc - a hc e u q u vr p s n o va s u o n , t n i o p ess al c al e d n oi t p e c n o c al e d sr o l ,t n e d c r p el p m e x e l s n a D
1

. a v aJ n e f i t c e f f e sr u o j u o t c n o d t s e e m si h pr o m yl o p e L . ei h cr ar i h e m m e n u sr u o j u o t t n e n n e itr a p p a s e t n er f fi d s ess al c x u e d , t ce j b O es sa lc al e d e vir d sruojuot tse essalc etuot em moc ,ertuo nE .selleutriv tneiat serbme m snoitcno f sel setuot is emmoc tia f ne essap es tuot : sap etsixen elleutriv noitcno f ed noiton a L .euqi man yd sruojuot tse snoitcno f sed erutagil al te ecner fr rap slupina m tnos stejbo sel ,avaJ nE
avaJ n E

. s er t u a s e d s e n u s e l s e v ir d s e ss a l c e d e l b m e s n e n u e t i m i l t s e e u q i m a n y d e r u t a g i l a l , + + C n E 2 . e uqi m - a n y d er u ta g il e n u e ca l p n e er tt e m e t ia h u o s n o s el le u qs el r u o p s n o it c n o f s el u o al r isi o h c tuep no , lautriv to m ud edial .seuqitats serutagil sed ecalp ne tem ++C ,tua fd raP 1

selleutriv snoitcnof sed euqinhcet al rap )ehci ffa ruop ici( euqimanyd erutagil enud ervu ne esiM
: 8 6 et ma couleur est : 2

446

3 Autre situation o la ligature dynamique est indispensable


se uqrameR
Les fonctions virtuelles et le polymorphisme CHAPITRE 21
Je suis un point mes coordonnes sont Je suis un point colore mes coordonnes sont ----------------Je suis un point colore mes coordonnes sont Je suis un point colore mes coordonnes sont : 8 6 : 8 6 : 3 5 et ma couleur est : et ma couleur est : 2 2

s el r et n e s r p i vr es a s u o n i u q e ll e c e d e t n er f f i d t n e m er g l ts e n o it a ut is a l e u q t n a d -nepec zereton suov ,icI .eleppa tne mevitce ffe tna yal tejbol ed ep yt ua tnadnopserroc eifit -nedi noitcno f al ed leppal tnarussa snoitcurtsni sel ecalp ne erttem ed ruetalipmoc ua temrep aleC .tniop essalc al snad eifitnedi noitcno f al elleutriv reralcd ed ti ffus li ,erduosr el ruoP .euqitats erutagil ed emlborp nud ecnesrp ne uaev -uon snovuort suon suon ,)ruetniop nud edial ,tnemmedcrp em moc ,non te( tejbo nu ruop tne meticilpxe eleppa t tia ehciffa noitcno f al iciuq neib ,zetatsnoc el suov em moC .tniop essalc al ed eifitnedid ...leppa nu ne lipmoc t jd a noitcno f ettec snad tnarugif : leppal ,l-tnemom ec ,ehcnaver nE .)loctniop snad eini fder sap tsen noit -cno f ettec euqsiup( tniop essalc al ed ehciffa noitcnof al releppa ruetalipmoc el tiudnoc a : l e p p a l e d n o i t a li p m o c al ,s etr e C ! snoirpse suon euq ec sap tsen iuq ec
Je suis un point Mes coordonnes sont : 8 6 pc.affiche () identifie ()

: t at l us r e l s n o n e t b o s u o n

: etnavius noaf al ed loctniop resilitu srola snohcrehc suon iS


class pointcol : public point { short couleur ; public : pointcol (int abs=0, int ord=0, int cl=1 ) : point (abs, ord) { couleur = cl ; } void identifie () { cout << "Je suis un point colore de couleur : " << couleur << "\n" ; } } ;

: eifitnedi noitcno f al uluov em moc tnassini fder ne loctniop essalc enu snovirD
class point { int x, y ; public : point (int abs=0, int ord=0) { x=abs ; y=ord ; } void identifie () { cout << "Je suis un point \n" ; } void affiche () { identifie () ; cout << "Mes coordonnees sont : " << x << " " << y << "\n" ; } } ;

: etnavius noaf al ed tniop essalc al rini fd tiudnoc suon ehcra md etteC .)sennodrooc sed egahci f fal egrahc ne erdnerp sulp aruan elle siam( eirporppa noa f ed eifitnedi arini fder tniop ed etnadnecsed euqahc euq
447

pointcol pc (8, 6, 2) ; pc.affiche () ;

3 - Autre situation o la ligature dynamique est indispensable

448

Les fonctions virtuelles et le polymorphisme CHAPITRE 21

.tnemelbanevnoc tneluord es sesohc sel ,issua l ,euq rertnom ed ni fa ,ruetniop rap sleppa seuqleuq tiudortni snova suon , fitacidni ertit .)ehpargarap ec ed tub el eutitsnoc iuq ec( loctniop ep yt ud eifitnedi ed leppal neib enartne )( ehciffa.cp euq let leppa nu tnem moc ert -nom lI .loctniop te tniop sessalc sed snoitini fd sel tnanerper telp moc em margorp nu icioV .t c e ps a tec egrahc ne erdnerp ed elbapac tne melag tse selleutriv snoitcno f sed emsinac m el tne m - moc snorrev suoN .ehciffa noitcnof al rap tnemetceridni siam ,e m m-iul tejbol rap tne m -etcerid sulp non silar tse eifitnedid leppal ,te ffe nE .)1 ehpargarap( selleutriv snoitcno f
#include <iostream> using namespace std ; class point { int x, y ; public : point (int abs=0, int ord=0) { x=abs ; y=ord ; } virtual void identifie () { cout << "Je suis un point \n" ; } void affiche () { identifie () ; cout << "Mes coordonnees sont : " << x << " " << y << "\n" ; } } ; class pointcol : public point { short couleur ; public : pointcol (int abs=0, int ord=0, int cl=1 ) : point (abs, ord) { couleur = cl ; } void identifie () { cout << "Je suis un point colore de couleur : " << couleur << "\n" ; } } ; main() { point p(3,4) ; pointcol pc(5,9,5) ; p.affiche () ; pc.affiche () ; cout << "---------------\n" ; point * adp = &p ; pointcol * adpc = &pc ; adp->affiche () ; adpc->affiche () ; cout << "---------------\n" ; adp = adpc ; adp->affiche () ; adpc->affiche () ; } Je suis un point Mes coordonnees sont : 3 4 Je suis un point colore de couleur : 5 Mes coordonnees sont : 5 9 --------------Je suis un point Mes coordonnees sont : 3 4 Je suis un point colore de couleur : 5 Mes coordonnees sont : 5 9

.sevird sessalc ed noitarc al ed srol ,drat sulp sesicrp ert tnorruop seitrap seniatrec tnod oirancs nu ehciffa snad ini fd a no : tilibasilitur ed tnasiuds tcepsa nu l evuort nO .seunnoc tneios releppad elbitpecsus tiat elleuq eifitnedi snoitcno f sel setuot euq snas )tniop ed nies ua( elipmoc te esilar ert up tiarua ehciffa n oi t c n o f a l e u q ti o v n o ,s a c e c s n a d ,t e f f e n E . e ss a l c e u q a h c s n a d e i ni f d er , e i f i t n e d i e l l e u t r i v noitcno f enu leppa e m m-elle tiasia f ,elleutriv non ,ehciffa noitcno f al ,)3 ehpargarap( elp - m e x e d n o c e s el s n a d e m m o c ,i s t n ar g a l f s u l p er o c n e sr u el li a d ti ar es t ni o p r ei nr e d e C .t i os e c euq noaf euqleuq ed setnedcrp sel esuac ne erttemer snas ,sellevuon ed retuoja ne enneiv n ouq te se lip m o c te s ei n i f d t n e me t ia frap t n ei os s us se d-i c ses sa lc xis s el euq elba e gas -ivne emm tse lI .euqi man yd erutagil al esi muos neib ares elle ,tniop ed tnadnecsed sessalc sertua sel snad einifder te tniop essalc al snad elleutriv eralcd tse ehciffa noitcno f al iS
esp i l le e lcrec e lgnatcer rrac tn iop ruetcev

: seuqirtmog semro f ed eihcrarih enu renigami tuep no ,isniA .setcerid setnadnecsed xua ti mil sap cnod tse n n o : A e d s et n a d n ecs e d s ess al c se l s et u o t s n a d te A s n a d e u q i m a n y d er ut a gi l al es i m - u os ar e s e ll e , A es s a l c e n u s n a d el l e u tri v e r a l c d t a f n o it c n o f e n u o t ne m o m u d r itr a p

. s n o it a ti m i l s el t e s t i li b iss o p s el t n os n e s e ll e u q ri o v e d i c i s n os o p or p s u o v s u o N . s e ll e utr i v s e d o h t m e d n o it asi l it u d sr e i l u ci tr a p s a c s e d t n e i a u ti ts n o c st n e d c r p s e l p m e x e x u e d s e L

selleutriv snoitcnof sed euqinhcet al rap )ei fitnedi ruop ici( euqimanyd erutagil ed ervu ne esiM
--------------Je suis un point colore de couleur : 5 Mes coordonnees sont : 5 9 Je suis un point colore de couleur : 5 Mes coordonnees sont : 5 9

4.1 Leurs limitations sont celles de lhritage

4 Les proprits des fonctions virtuelles


4 - Les proprits des fonctions virtuelles

449

.stugibma sel tnanrecnoc selgr sel rap retlp moc el ed noitidnoc ,elpitlum egatirhd sac ne tiareuqilppas emsinac m emm e L e h c i f f a : : e s p il l e e s p il l e e h c i f f a : :t n i o p el cr e c e h c i f f a : :t n i o p elgnatcer e h c i f f a : :t n i o p errac e hc i f f a: :ru et ce v r ue tc ev : t c e n n oi t n e m noitcno f al ed leppal ,essalc euqahc ruop ,ariudnoc ehciffad leppal ,snoitidnoc sec snaD
*esp i l le e lcrec e lgnatcer rrac tn iop *ruetcev

: )tniop snad elleutriv e mmoc ,rs neib ,eini fd te( eliot enud seuqram snova suon euq sessalc sel snad euq eini fder t an ehciffa euq tnasoppus ne ,serugif ed eihcrarih etnedcrp al uaevuon ed snordisnoc ,isniA .serianidro serbmem snoit -cno f sed sac el snad euq elbasnepsidni sulp sap tsen aleC .esab ed essalc enu snad elleutriv eralcd edoht m enu setnadnecsed sessalc sel snad ini fder sruojuot snova suon ,iciuqsuJ

.tnavius ehpargarap ua elpmexe nu zerevuort suoV .ehciffa tnassini fder y ne te tniop ed seul -uov sessalc sel tnavird ne sengorth stejbod etsil enu rerg ruop stniop-etsil essalc al resilitud elbissop tneived li ,elleutriv eralcd t a ehciffa noitcnof al ,tniop snad ,iS
stn iop_ets i l

: 0 2 ert i p a h c u d 4 e h p ar g ar a p u a e t n es r p j d e t n a vi us er u t c urts a l i ni f d ti a n ol e u q s n os o p p us , e m m e D
450
Les fonctions virtuelles et le polymorphisme CHAPITRE 21

4.2 La redfinition dune fonction virtuelle nest pas obligatoire


tn iop ets i l

noitini fder a L .C essalc enu rus ecnerfr enu uo ruetniop nu tse elleutriv noitcno f enud ruoter ed ruelav al o sac ud tigas lI .setnairavoc ruoter ed sruelav sel sio frap em mon nol euq ec enrecnoc iuq ,elgr ettec noitpecxe enu sio fetuot etsixe lI .ruoter ed ruelav al ed epyt el tnemetcaxe retcepser cnod tiod elleutriv noitcnof enud noitinifder aL .noitalipmoc ed ruerre enu tiudnoc iuq tilibissop ettec esu fer ++C iouqruop tseC .lam tiarennoitcno f emsihprom ylop el euq ios ed srola av lI
virtual int affiche ()

: elp mexe nu iciov nE .C ed evird essalc enu rus ecner fr enu uo ruetniop nu ceva eriaf es srola tuep evird essalc enu snad elleutriv noitcno f ettec ed

: tniop snad isnia eini fd tios ehciffa noitcno f al ,tnedcrp ehpargarap ud sessalc ed eihcrarih al snad ,euq snosoppus ,elp mexe raP .em m ed sulp av nen li ,tne merueirtlu eini fd ert enit -sed ,elleutriv noitcno f enud sac el snad sia M .euqigol tse iuq ec ,ruoter ed ruelav al ed ep yt ud etp moc sap tneit en no ,)elleutriv non( elleusu erb me m noitcno f enud noitini fder al snaD

.s e ll e u tri v t n ets er m o n e m m e d s n o it c n o f s el s e t u o t e u q el b ar f r p ts e l i , e l l e ut -riv noitcno f enu rini fdrus zeved suov is : tilibissop ettec retiolpxed retivd snolliesnoc s u o v s u o n , t il i bi si l e d t e ti ci l p m is e d i c u os r a P . e i ni f dr us n o it c n o f e n u d x i o h c e l s n a d r u et -animircsid elr nu issua iul euoj leutriv non/leutriv tutats el euq rerdisnoc tuep no ,tia f nE .euq -itats erutagil enu esi muos ares elle ,elleutriv eralcd sap tsen erinred ettec iS .noitcnof ertua enud neib te leb srola arigas li ,stner ffid stnemugra sed ceva evird essalc enu snad tini fdrus al nouq te essalc enu snad elleutriv noitcno f enu ini fd a nol is ,sruellia raP .) n o i ti n i f d er t e n oi ti n i f dr us s a p z e d n o f n o c e n( n o n u o e ll e utr i v eralcd ert tnavuop eini fdrus noitcno f euqahc ,elleutriv noitcno f enu rini fdrus tuep nO

4.4 Le type de retour dune fonction virtuelle redfinie

4.3 Fonctions virtuelles et surdfinition

class Y : public X { ..... } ; class A { public : virtual X & f (int) ; ..... } ; class B : public A { public : virtual Y & f (int) ; ..... } virtual void affiche ()

// B::f(int) renvoie un Y // B::f(int) redfinit bien A::f(int) // A::f(int) renvoie un X // Y drive de X

: e s p i l l e s n a d is ni a t e

4 - Les proprits des fonctions virtuelles

451

snoitautis sed etsixe li ,tnadnepeC .ecnerfr uo ruetniop rap ruetcurtsnoc nu siamaj elleppan nouq resnep tuep no ,sruelliaD .e msihprom ylop ua simuos ertd nosiar enucua an ruetcurt -snoc nu ,cnod ,iroirp A .eriurtsnoc tejbol ed ep yt el rini fd ,tnemsicrp ,tres iuq ini fd tne metia frap essalc ep yt nu ruop euq leppa ert tuep en rueturtsnoc nu ,erutan as rap eD .) es s a l c e n u d e i m a ti at el l e i s e m m( eri a ni dr o n o it c n o f e n u reuqilppas sap tiarruop en aleC .noitcno f al leppa tna ya tejbol ed ep yt el rus sab xiohc n u ri o v as , e u qi m a n y d er u t a gi l al r e u t c e f f e r u o p y ol p m e e ms i n a c m e l r a p e i fi ts u j es al e C
4.6.2 Un constructeur ne peut pas tre virtuel

. n oi t a u ti s e d e p yt e c t n e m e tr o f s n o l li es n o c d s u o v s u o n e u q si o f e t u ot s n o le p pa R .e tr o p e d n oi t ul os r e d r u et ar p ol e d ne y o m ua e t n a d nec sa ess al c e n u d n o it - c n o f e n u d e ti ci l p xe le p pa n u e u tc e f f e n ol is f u as ,e u qi ma n y d er u ta g il al ses i m u os t n ores setnadnecsed sessalc sel snad ehciffad snoitini fd sellevuon sel setuot ,udnetne neiB .)noit - c ni tsi d a l er i a f t n a vr e s l e utr i v n o n /l e utr i v er t c ar a c el , n oi t i n i f dr us u e t i a v a y lis e m m o c( noitcno f ellevuon enu em moc ehciffa elleutriv noitcnof al rerdisnoc tua f li ,sac ec snaD .et -nadnecsa essalc enu snad ,stne mugra sem m sel ceva ,eini fd t jd a ehciffa noitcno f a L .esop es en reilucitrap emlborp nucua : setnadnecsa sessalc sel snad eini fd t sia maj an tniop essalc al ed ehciffa noitcno f a L : s n o it a ut is x ue d re u g ni tsi d sr ol a tua f li ,tnadnepeC .essalc ertua enud revird emm-elle tiarruop tniop ,semro f ed eihcrarih ed selpmexe sel snad ,isniA .eriotagilbo sap tsen aleC .ertua enud evird emm-elle sap t ia t n i u q es sa lc e n u d n o i tc n o f e n u e ll e u tri v ra lc d s n o i va s u o n ,s el p m e xe s o n s u ot s n a D

.ruoter ed ruelav al emsihprom ylop ud noitasilarng enu isnia tneitbo nO


// B::f(int) renvoie un B // B::f(int) redfinit bien A::f(int) et renvoie un B

: a n o , B t e A t n e d n o pserr o c Y t e X i S . s n i o m e l t u e p s u l p el t u e p i u q , u d n et n e n e i B
452
Les fonctions virtuelles et le polymorphisme CHAPITRE 21

4.6 Quelques restrictions et conseils 4.5 On peut dclarer une fonction virtuelle dans nimporte quelle classe
class A { public : virtual A & f (int) ; ..... } ; class B : public A { public : virtual B & f (int) ; ..... } // A::f(int) renvoie un A

4.6.1 Seule une fonction membre peut tre virtuelle

: noitautis ettec snordisnoc ,te ffe nE .tejus ec snoituacrp seuqleuq erdnerp ed lliesnoc sio fetuot tse lI .leutriv ert tuep ruetcurtsed nu ,ehcnaver nE ...elbissop sap tsen iuq ec ,leutriv tios ruetcurtsnoc ec euq cnod ,e msihprom ylop tia y liuq ulla f tiarua li ,B essalc al ed iulec ed leppa tia y liuq ruoP .A essalc al ed eipocer rap rueturtsnoc ud leppal enartne iuq ec ,ruelav rap tnanopserroc tejbol tnattemsnart iul ne g noitcno f al srola elleppa ellE .*A ep yt ed ruet -niop nud eriaidmretnil rap ,B ep yt ed tejbo nud esserdal tioer f erianidro noitcno f a L
eipocer rap ruetcurtsnoc nud eticilpmi leppA
4.6.3 Un destructeur peut tre virtuel

: elp mexe tec ze yoV .)! ertua nu e mmoc ruetcurt -snoc nu eutitsnoc iuq( eipocer rap ruetcurtsnoc nud eticilpmi leppal seil serilucitrap
453

class A { public : ~A() { ..... } ..... } ; class B : public A { public : ~B() { ......} // la presence de virtual ici ne changerait rien } ; main() { A* a ; B* b ; b = new B() ; a = b ; delete a ; // a pointe sur un objet de type B mais on nappelle que ~A } Constructeur de recopie de A #include <iostream> using namespace std ; class A { public : A (const A &) { cout << "Constructeur de recopie de A\n" ; } A () {} } ; class B : public A { public : B (const B & b) : A (b) { cout << "CR copy B\n" ; } B() {} } ; void g (A a) {} // reoit une copie void f (A *ada) { g(*ada) ; } main () { B *adb = new B ; A *ada = adb ; f(ada) ; // ada pointe sur un objet de type B }

4 - Les proprits des fonctions virtuelles

: etnavius elgr al retcepser snoegaruocne suov suon ,elarng erinam enuD . B e p y t u d r u e t c ur t s e d e l n e i b c n o d ar e l l e p p a n o , i c I .) e v ir d as essalc enud stner f fid tneios smon sruel euq neib te ,leppar sap tsen lautriv lc-tom el is e m m( sleutriv neib tnores sevird sessalc sed sruetcurtsed sel ,snoitidnoc sec snaD
class A { public : ~A() { ..... } ..... } ; class B : public A { public : ~B() { ......} // la presence de virtual ici est facultative } ; main() { A* a ; B* b ; b = new B() ; a = b ; delete a ; // a pointe sur un objet de type B et on appelle bien ~B }

; )ediv tios liuq ec ettiuq( leutriv ruetcurtsnoc nu A snad recalp tios ; g t or p u o vir p er d n er e l e d er o c n e u o , A s na d r u e t c u r t s e d e d r e c a l p s a p e n e d s r o l a t i f f u s l i : A e p y t e d st ej b o d n oi ss er p p us a l eri dr e t ni ti os : tl u ci f f i d ettec reillap ed tnettemrep sehcramd xueD .sesuertsasd ert tnevuep secneuqsnoc sel euq rialc tse lI .B ep yt ed tejbo nu rus emm dnauq erpo leuqel ,A ed ruetcurtsed ud leppal uq ariudnoc en a rap tniop B ep yt ed tejbol rus eteled ed leppal ,erdnetta ys tuep no e mmoC
454
Les fonctions virtuelles et le polymorphisme CHAPITRE 21

4.6.4 Cas particulier de loprateur daffectation

#include <iostream> using namespace std ; class A { public : virtual A & operator = (const A &) { cout << "affectation fictive A\n" ; } } ;

: l ei ci f itr a elp me xe t ec er t - n o m e l e m m o c , e msi h pr o m yl o p e d n o it a u t is e n u s n a d s a p c n o d t s e n n O . A e d n o it a t c e f f a d ruetarpol ed noitini fder enu sap eutitsnoc en A ed evird ,B essalc enud noitatcef fal ed noitini fd al o eruse m al snad ,erilucitrap tse noitcno f ettec euq riov neib tua f li ,tnadnepeC .leutriv ralcd ert ,erb me m noitcno f etuot em moc ,tuep noitatce ffad ruetarpol ,eiroht nE

- soit un destructeur public et virtuel. - soit un destructeur priv ou protg ; - soit aucun destructeur ; Dans une classe de base (destine tre drive), prvoir :

.ecalped rap eleppa tse elleuqsiup oeg_emrof snad enissed rinifd tnemulosba tuaf suov liuq neib zetoN .1

.s uss e d- i c s u q o v s e m l b or p s e l e v u or t er n o ,sap tia f el en elle iS .enissed rini fder oeg_emrof ed tnadnecsed essalc enu egilbon neiR ! s nes e d er u g an alec ,eluocd nen ruerre enucua is e m m ; neir tnasia f en enissed ed leppa nu ariudnoc tejbo let nu ruop ecalped ed leppa L .etiartsba essalc enud tiassigas li ,ruetpecnoc ud tirp -sel snad euq srola ,oeg_emrof essalc ed tejbo nu reralcd ed ruetasilitu nu tidretnin neiR : srola tnessiarappa senucal xued ,sio fetuoT . e di v n o it i ni f d e n u r i o v r p e d e cr u o ss er a l sr u oj u o t z e v a s u o v , + + C e d z es si a n -noc suov euq ec cevA ? oeg_emrof snad rinruo f iul noitini fd elleuq siaM .stnadnecsed ses snad eini fder ert arved te oeg_emrof essalc al snad elleutriv eralcd ares enissed noitcnof a L .)enissed elpmexe rap emmon( erugi f al ed egahci ffad noitcno f enu leppa srola aref ic-ellec euq elbaborp tse lI .erugi f enu recalpd enitsed ecalped noitcno f enu rerugif eriaf y jd zeitiahuos suov euq zesoppuS .)...elcrec ,rrac( seuqirtmog semro f setner ffid ed narc nu rus nissed el rerg enitsed ,oeg_emrof etiartsba essalc enu elp mexe rap zeniga mI . n o it i ni f d e n u c ua r e n n o d er oc n e ze v u o p e n s u o v t n o d s e ll e u tri v s n o it c n o f s e n i atre c er i u d -ortni y ert-tuep zerved suov siaM .sessalc sellet ed rini fd sruojuot zevuop suov ,++C nE . setiartsba sessalc sed eria ffa a nouq tid no ,.O.O.P nE .egatirh rap sessalc sertuad ecnassian rennod tnemelpmis sia m ,stejbo sed reicnatsni sap non senitsed sessalc sed rini fd tiavuop nouq erid ed noisaccol ue jd snova suoN
1

noitatceffal reuqilppas sap tuep en emsihpromylop eL


affectation fictive B affectation fictive A

5 Les fonctions virtuelles pures pour la cration de classes abstraites


class B : public A { public : virtual B & operator = (const B &) { cout << "affectation fictive B\n" ; } } ; main () { B *adb1 = new B ; B *adb2 = new B; *adb1 = *adb2 ; A *ada1 = new A ; A *ada2 = new A ; ada1 = adb1 ; ada2 = adb2 ; *ada1 = *ada2 ; // appelle affectation de A - virtual ne sert a rien car // on ne redfinit pas meme fonction }

5 - Les fonctions virtuelles pures pour la cration de classes abstraites

455

! ++C neuq tcerid sulp te euqigol sulp tnemetsefinam tse iuq eC .4 .ruerre enu tianetbo no ,serueirtna snoisrev sel snad ; evird essalc ettec ed erup elleutriv noitcnof enu etser elle ,ev -ird essalc enu snad einifder sap tsen esab ed essalc enud erup elleutriv noitcnof enu is ,0.3 noisrev al siupeD .3 .noitcnof ertua enud tigas li nonis ,stnemugra semm sel ceva sruojuoT .2 .noitinifd te noitaralcd reugnitsid sulp tuep en no ,icI .1

.sevird sessalc sel snad seini fder ert tnemeriotagilbo tneviod iuq sedohtm sel )tcartsba lc-tom e mm ec ceva sruojuot( srola esicrp y nO . tcartsba lc -tom el tne mellerutan tuot tnasilitu ne ,etiartsba essalc enu tnemeticilpxe rini fd tuep nO
4

avaJ n E

.seini fder ert tnemeriotagilbo t n a v e d s n oi t c n o f s el r es i c r p r u o p n o it n e v n o c e d n o c es e n u u ll a f t i ar u a li ; n o it as il it u l eridretni ne uq ivres tiaruan alec ,etiartsba em moc essalc enu reralcd ed tnet - n oc ti at s + + C i S .e ti arts b a ess al c e d e ll ec e ssa p d er u p e ll e utr i v n oi tc n o f e d n o it o n a L

e uqrameR

. en issed ed noitinifd al tiartte mo no selleuqsel snad oeg_emrof ed sevird sessalc ed noitini fd al ,oeg_emrof ep yt ed stejbod noitaralcd al : tidretni erup elleutriv enissed udner riovad tia f el ,oeg_emrof essalc erton ed sac el snaD .sediv snoitinifd ed iolpmel rap sv -eluos semlborp xued sel elgr serup selleutriv snoitcno f ed iolpmel ,ze yov el suov e mmoC .etiartsba issua elle tse evird essalc al ,sac reinred ec snad ; erup elleutriv uaevuon eralcd uo evird essalc enu snad eini f -der ert tnemeriotagilbo tiod esab ed essalc enu snad erup elleutriv eralcd noitcno f enU .ep yt nos ed stejbo sed reralcd ed elbissop sulp tsen li te et iar ts ba e m m oc e r d is n o c ts e er u p el le u tri v n o it c n o f e n u s n i o m u a t n atr o p m o c essa lc e n U : s e t n a v i us s el g r sel etpoda ++C siaM .erocne sap tarappan noitnevnoc ettec ed trtnil ,uaevin ec ,setreC
3 2 1

: i s n i a t n ara lc d al n e er u p e ll e utr i v n oi tc n o f enu oeg_emrof essalc al ed enissed noitcno f erton ed eriaf up snoirua suon ,elp mexe raP .ediv t ne me l ues s ul p n o n te ,) 0( t se n o it i ni f d al t n o d se ll e utr i v s n o it cn o f se d t n os e C . ser u p s e ll e utr i v s n oi t c n o f s e l : s et i ar ts b a s e ss a l c e d n o it i ni f d a l t n a ti l i c a f l i t u o n u es o p or p + + C
el lun

456

Les fonctions virtuelles et le polymorphisme CHAPITRE 21

virtual void dessine (...) = 0 ;

.)tejbo nu ,ici ,tia f ne( eicossa noitamro fnil rus ruetniop nu ; t n a v i u s t n e m l l r us r u e t ni o p n u : nucahc stiudr selp mis stneml sed rerg ed cnod aretnetnoc es emm-elle etsil essalc a L

3 t ejbO

2 tejbO

1 te j b O

t u be d

: a m h cs ec sr ol a s n ore u q il p pa s u o N . s nr e c n o c s t e j b o x u a s e u qi f i c ps s li at d s e l s n a d r er t n e s n as e m m- e ll e e tsi l al e d n oi ts eg e d s ti l an n o it cn o f se l s e tu o t ) ets il e m m o n ( e s s a l c e n u s n a d r e l o s i s u o n - s n o r e h c r e h c issuA .stner ffid sep yt ed ert tnessiup snoitamro fni setner ffid sel euq etiahuos nol ici siaM t u be d 3 s n o it a mr o f n I 2 s n oi ta mr o f n I 1 s n o it a mr o f n I

: a m hcs e c d n o ps err o c a l e C . ets i l a l e d t n e m l r ei m er p el e n g is d r u e t ni o p n u , er t u o n E . t n a vi us tnemll rus ruetniop nu etrop moc tne ml euqahc ,enahc etsil enu snad ,euq snoleppaR .etsil al ed sruocrap ed e msinacm ; e ts il a l e d s t n e m l s el s u ot e d sr u el a v s e d e g a h c i f f a ; tneml levuon nud tuoja : setnavius stilannoitcno f sed tnasopsid te s t n er f fi d s e p y t e d st ej b o d e n a h c e tsi l e n u r er g e d t n a tt e mr e p ess a l c e n u r e r c s n o ll a s u o N

6 Exemple dutilisation de fonctions virtuelles : liste htrogne


6 - Exemple dutilisation de fonctions virtuelles : liste htrogne

457

. t n ar u o c t n e m l l e d r u el a v al ; )tnaruoc tnemll rap tniop tejbol erid--tsec( tnaruoc tejbol ed esserdal ; tnaruoc tnemll ed esserdal : er t n e r is i o h c t ue p n o , u ae vi n ec .t n ar u o c t ej b o l t na nr ec n oc n o it a mr o f n i e n u r u ot er n e ri nr u o f t n e v i o d se u q o v ser b m e m s n o it c n o f x ue d s el ,sr ue ll i a r a P . t n a r u o c s n ore m m o n e l s u o n ; e t s i l ess al c erton ed ennod erbmem ares lI . tnaruoc tne ml nu rus ruetniop nu tnetissecn ic-selleC .t n e m l n u d re c n a va ; s r u o c r a p el r e s i l a it i ni : r u op seriatneml snoitcno f sed sno yovrp suon ,etsil al ed sruocrap el ervu ne ertte m ruoP

: etsil essalc al ed ehcuab erimerp enu oD .)etiartsba essalc ettec ed tnetirh selleuq tua f li rac( segi f jd sap tnos en noitseuq ne sessalc sel is euq elbavecnoc tsen alec ,udnetne neiB .senrecnoc sessalc xua ecnassian rennod tne melpmis enitsed )erup elleutriv uo ediv ehciffa noitcno f enu tnemelleutnev ,mumini m ua etiudr( etiartsba essalc enud noitarc al rap e u n etb o ert sr uo j u ot t u ep ses sa lc e d e l li ma f e tt ec ,t ia f nE . f it cir tser uep e uq le uq relb mes tuep aleC .esab ed essalc e mm enud sevird setuot tneios setnadnopserroc ses -salc sel euq evresr suos stner ffid sep yt ed stejbod etsil enu rerg arruop no ,evitini fd nE .setnadnecsed ses ed enucahc snad eini fder te )erem ici mmon( tejbod ep yt reimerp nu snad eini fd ares ehciffa noitcno f a L .selleutriv snoitcno f sed siaib el rap euqi man yd erutagil al ed ervu ne esim al euqilp mi aleC .nrecnoc tejbol euqi ficps ,ehciffa edohtm enu tnaleppa ne aref es etsil al ed stne ml sed egahci ffaL .)noitaci filpmis ed icuos rap ,etsil ed tubd ne noitresnil snorisiohc suon( ess er d al ari nr u o f i u l n o t n o d t e j b o n u et si l a l s n a d r er s n i e n its e d er b m e m n oi t c n o f e n u ; )amhcs erton snad ,tubed( tneml reimerp el rus ruetniop : ennod erbmem nu : s ni o m u a r e d s s o p a v ess al c al e u q c n o d t i o v n O
458
Les fonctions virtuelles et le polymorphisme CHAPITRE 21

struct element { element * suivant ; mere * contenu ; } ; class liste { element * debut ; public : liste () ; ~liste () ; void ajoute (mere *) ; void affiche () ; ..... } ;

// constructeur // destructeur // ajoute un lment en dbut de liste // pointeur sur premier lment // structure dun lment de liste // pointeur sur llment suivant // pointeur sur un objet quelconque

6 - Exemple dutilisation de fonctions virtuelles : liste htrogne

459

.eirporppa ehciffa noitcno f enud enucahc setod te erem etiartsba essalc al ed sevird ,)ertual ed enul revird ed nioseb sap tnon selleuqsel( exelpmoc te tniop sessalc xued tini fd iuq iassed e mmarg -orp titep nu tniojda snova iul suoN .seuluov sessalc setner ffid sed etlp moc etsil al icioV

: s er b m e m s n o it c n o f s e l l e v u o n s i or t s n os i u d or t ni s u o n , e v i ti n i f d n E .) ni f a l t s e n o l i s r i o v a s e d t n a v a e t s il e d r u et n i o p e l r u s r i g a t n e m er i ot a gi l b o tiardua f li rac euqitarp snio m tiares ec sia m ; tnaruoc tejbol ed esserda e mmoc lun ruetniop nu rinruo f up issua snoirua suon ,rueugir etuot ne( etnietta tse etsil ed ni f al is riovas ed tnat - t e mr e p eri at n e m l p p u s n oi t c n o f e n u c n o d s n ori o v r p s u o N . et si l e d n i f al r e t c et d e d n e y o m nu ruetasilitul rinruo f tnemelpmis tua f lI .ellerutan sulp al elb mes noitulos e mixued a L
void * premier () ; void * prochain () ; int fini () ; #include <iostream> using namespace std ; // **************** classe mere ******************************************** class mere { public : virtual void affiche () = 0 ; // fonction virtuelle pure } ; // ********************* classe liste ************************************** struct element // structure dun lment de liste { element * suivant ; // pointeur sur llment suivant mere * contenu ; // pointeur sur un objet quelconque } ; class liste { element * debut ; // pointeur sur premier lment element * courant ; // pointeur sur lment courant public : liste () // constructeur { debut = 0 ; courant = debut ; } ~liste () ; // destructeur void ajoute (mere *) ; // ajoute un lment void premier () // positionne sur premier lment { courant = debut ; } mere * prochain () // fournit ladresse de llment courant (0 si fin) // et positionne sur prochain lment (rien si fin) { mere * adsuiv = 0 ; if (courant != 0){ adsuiv = courant -> contenu ; courant = courant -> suivant ; } return adsuiv ; } void affiche_liste () ; // affiche tous les lments de la liste int fini () { return (courant == 0) ; } } ;

460

Les fonctions virtuelles et le polymorphisme CHAPITRE 21

liste::~liste () { element * suiv ; courant = debut ; while (courant != 0 ) { suiv = courant->suivant ; delete courant ; courant = suiv ; } } void liste::ajoute (mere * chose) { element * adel = new element ; adel->suivant = debut ; adel->contenu = chose ; debut = adel ; } void liste::affiche_liste () { mere * ptr ; premier() ; while ( ! fini() ) { ptr = (mere *) prochain() ; ptr->affiche () ; } } // **************** classe point ******************************************* class point : public mere { int x, y ; public : point (int abs=0, int ord=0) { x=abs ; y=ord ; } void affiche () { cout << "Point de coordonnees : " << x << " " << y << "\n" ; } } ; // **************** classe complexe **************************************** class complexe : public mere { double reel, imag ; public : complexe (double r=0, double i=0) { reel=r ; imag=i ; } void affiche () { cout << "Complexe : " << reel << " + " << imag << "i\n" ; } } ; // **************** programme dessai ************************************** main() { liste l1 ; point a(2,3), b(5,9) ; complexe x(4.5,2.7), y(2.35,4.86) ; l1.ajoute (&a) ; l1.ajoute (&x) ; l1.affiche_liste () ; cout << "--------\n" ; l1.ajoute (&y) ; l1.ajoute (&b) ; l1.affiche_liste () ; } Complexe Point de -------Point de Complexe : 4.5 + 2.7i coordonnees : 2 3 coordonnees : 5 9 : 2.35 + 4.86i

: eifitnedi euq tnassini fder en ,tniop ed evird ,loctniop essalc enu


} ; virtual void deplace (...) ; .....

: selleutriv snoitcno f xued tnatropmoc tniop essalc enu : ri o vas ,tnedcrp el euq larng sulp uep nu elpmexe nu rerdisnoc snolla suon ,eria f ec ruoP .s t n a ts i x e sr u et al i p m o c stnerf fid sel rap etpoda tne mmaruoc ehcra md al ici erircd ed snosoporp suov suon ,egag - na l el r ap es op m i t ne me ti ci lp xe sap ti os e n n o it at n e m lp m i et te c euq n ei B . t na lp m i t ne m -evitce ffe tse li tnod erina m al ed ecnassiannoc al rap tnessap ,elbatirv etrop as cnod te ,emsinac m ud eni f sulp noisnehrp moc a L .ettecer elpmis enu emmoc ertarappa suov tuep e u q i n h c e t e t t e c , t n at s n i l r u o p , t n a d n e p e C .s e nr e c n o c s n o i t c n o f s e l r u o p e u q i m a n y d er u t a g il al er v u ne er tt e m e d ti at te mre p s e ll e u tri v s n o i tc n o f s e d e u q i n h ce t al e u q u v s n o va s u o N .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

.)drat sulp eria f el snordnerppa suon e mmoc( noitpecxe enu revel ed erocne uo noitucxel erp morretnid tnetnetnoc es snoitcno f sec euq ec sruelliad ettiuq ,eria f el tiardua f li ,ler em margorp nu snaD .eipocer ed ruetcurtsnoc el te noitat -ce ffad ruetarpol etsil essalc al snad inifder sap snovan suon ,ticilpmis ed icuos raP

7 Le mcanisme didentification dynamique des objets

e uqrameR

engorth etsil enud noitasilitu te noitinifd ,noitaralcD


Complexe : 4.5 + 2.7i Point de coordonnees : 2 3

} ; { { class pointcol : public point class point ..... ..... void identifie () ; ..... virtual void identifie () ;

7 - Le mcanisme didentification dynamique des objets

461

6
8
loctniop ed e lbat srev
5 3

tniop ed e lbat srev

: s n or d n ei t b o s u o n : )sleutibah sruetcurtsnoc sed snosopsid suon euq tnasoppus ne( snoralcd suon is ,elpmexe raP .essalc as eicossa elbat al ed esserdal tnanetnoc ,ruetniop ep yt ed eriatne mlppus tne mecalpme nu ,sennod serb mem ses eriassecn eriom m tnemecalpmel ertuo ,ruetalipmoc el rap reub -irtta tiov es elleutriv noitcno f enu sniom ua tnatrop moc essalc enud tejbo tuot ,trap ertuaD .eini fder t sap an ecalped noitcno f al o erusem al snad ,tniop ed elbat al ruop euq emm al tse loctniop ed elbat al ed esserda ednoces al iciuq zetoN loctniop ed elbaT
ec a lped:: lo ct n iop & e i f it ned i:: loct n iop &

: loctniop ed noitalip moc al ed srol tniop ed elbaT


e ca lped::t n iop & e i f it ned i::t n iop &

: tniop ed noitalip moc al ed srol : setnavius selbat xued sel snordneitbo suon ,tic elpmexel cevA .setnadnopser -r o c s e l l e utr i v s n oi t c n o f s e d e n u c a h c e d s ess er d a s e l t n a n e t n o c el b a t e n u e i c oss a i ul r u et al i p - moc el ,elleutriv noitcnof enu sniom ua etropmoc essalc enuuqsrol ,elarng erina m enuD
462
Les fonctions virtuelles et le polymorphisme CHAPITRE 21

point p (3, 5) ; pointcol pc (8, 6, 2) ;

.)noitacifitnedI epyT emiT nuR( .I.T.T.R mmon tnevuos tse emsinacm ec ,sialgna nE .2 .snoitarpo sed tnemeluord nob el ruop leitnessel l tsec te ecalp emm al sruojuot tnorepucco setnadnecsa sruel ceva tnegatrap selleuq sellec siam ,selleutriv snoitcnof sellevuon ed tnesiudortni selle is sesserdad sulp rinetnoc tnorruop sessalc seniatrec ed selbat sel ,tnemelleutnev .1

e cner f r en u rap u o ruetn i op n u rap ng is d t ej bo

nud epyt e lbat i rv

.s e p y t x u e d rerapmoc ed tnettemrep iuq = ! te == serianib sruetarpo xued ed esopsid essalc al ,sulp eD .mon emm el sia maj tnoruan stnerf fid sep yt xued euq rs tse no sia m ,noitatnemlp mil ed erdnepd cnod tuep li ; emron al rap sopmi sap tsen mon eC .ep yt ud mon el tnatnesrper C el yts ed ed enahc enu tinruof elleuqal ,)(eman erbme m noitcno f al tneitnoc essalc etteC .ofni_epyt ini fdrp ep yt ed tejbo nu tatlusr ne tnassinruo f diepyt m mon ednarpo nu ruetarpo nu etsixe li ,eriaf ec ruoP . el ertannoc ed ,noitucxel ed srol ,elbissop tse li ,tne msicrp sulP .ertipahc ec ed gnol ua tuot seuqov snova suon euq e msihprom - ylop ed snoitautis sel snad esilitu ert ruop etiudortni t tuotrus a tilibissop ettec ,tia f nE .e ssa lc ep yt nud stejbo sed tiareuqilppas euqramer emm a L .tner ffid ep yt nud tnos x te n euq erocne uo sunnoc ert tnevuep x ed iulec uo n ed ep yt el euq riovas ed tnassertni erug ares en li
int n ; float x ;
2 1

: c e v a , i s ni A .noitalipmoc al ed srol ini fd tse ep yt let nu is trtnid erug etnesrp en alec ,udnetne neiB . t e j b o n u d uo noisserpxe enud ,elbairav enud ep yt el ,em margorp ud noitucxel ed srol ,)rerapmoc te rei fitnedi( ertannoc ed tnattemrep e msinacm nu ++C snad tiudortni a ISNA emron a L

.elbat ennob al ed xiohc el utce f fe ares euq noitucxel ed srol tsec ,ehcnaver nE .2 noitisop ne elpmexe rap , ec -alp ed ed esser d a l t n ore tr op m oc se lba t se l se tu o t : n o it al ip m oc al i n i f d t n e me t ia frap ts e gnar ec euq neib zetoN .nnod gnar nu elbat ettec snad tnarugi f esserdal tnemehcnarb ; )e ti ci lp m i tn e m u gra ne t ejb ol e d esserdal sruojuot tioer elle , ruetniop rap uo tne metcerid eleppa tse noitcno f enu tnod erinam al tios euq elleuq( etnadnopserroc elbat al ed esserdal ed tejbol snad tnemevlrp : etnavius noa f al ed ruetalip moc el rap tiudart tse elleutriv noitcno f enud leppa euqahC .euqi man yd erutagil al ervu ne erttem ruop et -iolpxe tse iuq noita mrofni ettec tne mevitce ffe tseC .tejbol ed essalc al reifitnedid tnattem -rep noitamro fnil etnesrper ,tejbo euqahc snad tiudortni ,ruetniop ec euq erid isnia tuep nO
463

8 Identification de type lexcution


8 - Identification de type lexcution

t i a r e t n e t n o c e s d i e p y t r u e t ar p o l , e l l e u t r i v e d o h t m e d e c n e s b a l n E . e m s i h pr o m y l o p e l r er us s a u q t i a f n e t n e vr es e n s e l l e ; s e d i v s e u v r p t t n o e h c i f f a s e d o h t m s e l , i c I 2 . ic i em moc * loctniop ,* tniop ,tniop sruojuot ares ep yt ed mon el euq russa sap cnod tsen no ; ruetarpo tec rinruo f tiod euq tcaxe mon el sap esop min emron al euq snoleppaR 1 .tniop tejbol ed etcaxe erutan al rap ni mretd neib tse )pda*( tniop tejbol ed ep yt el ,ehcnaver nE .* tniop neib etser pda ruetniop ud ep yt el ,diepyt ruop ,euq neib areton nO diep yt ruetarpol ed noitasilitud elpmexE
type type type type de de de de adp *adp adp *adp : : : : point * point point * pointcol

se uqrameR

.e msi h pr o m yl o p e d et x et n oc n u s na d e u q -ilppal nouqsrol diepyt etnesrp euq trtnil ertno m li ; selleutriv snoitcno f sed emsinac m el rertsulli ruop 2 ehpargarap ua silitu e mmargorp ud ripsni elpmexe reimerp nu icioV

464

8.1 Utilisation du champ name de type_info

Les fonctions virtuelles et le polymorphisme CHAPITRE 21

class pointcol : public point { public : void affiche () { } // ici vide } ; main() { point p ; pointcol pc ; point * adp ; adp = &p ; cout << "type de adp : " << cout << "type de *adp : " << adp = &pc ; cout << "type de adp : " << cout << "type de *adp : " << }

#include <iostream> #include <typeinfo> // pour typeid using namespace std ; class point { public : virtual void affiche () { } // ici vide - utile pour le polymorphisme } ;

typeid (adp).name() << "\n" ; typeid (*adp).name() << "\n" ; typeid (adp).name() << "\n" ; typeid (*adp).name() << "\n" ;

)1( == ruetarpol ceva seuqimanyd sepyt ed nosiarapmoc ed elpmexE


En A : les objets pointes par adp1 et adp2 sont de meme type En B : les objets pointes par adp1 et adp2 sont de type different

: = = r u e t ar p ol e d n o it -asilitul tnartno m elpmexe nu ,2 ehpargarap ua silitu em margorp ud ripsni sruojuot ,icioV

. e p y t e d e u q i m a n y d n o i t a c i f i t n e d i l r ir u o c e r e d n i os e b t n o r u a ) s r u e u g o b d s e d e u q s e l l e t ( s e u q i f i c p s s rt s n o i t a c i l p p a s e u q l e u q s e l u e S . s e t n a s i f f u s t n e m e l ar n g t n e r v a s s t i l i b i s s o p s e C . e p y t e c t n e m e t i c - i l p x e er t a n n o c e d e l b i s s o p t n a t u a r u o p t i o s l i u q s n as , e p y t n o s t p a d a t n e m e tr o p m o c n u t e j b o n u d r i n e t b o d t e mr e p s e l l e u tr i v s n o i t c n o f s e l r a p u n e t b o e u q i m a n y d e g a p y t e L 3 . t n i o p e p y t e d t e j b o n u r e i c n a t s n i d e l b i s s o p t s u l p t i a r u a n l i r a c , t n i o p s n a d er u p e l l e u tr i v n o i t c n o f e n u s i l i t u s a p s n o v a n s u o n e u q z e t o N .ruetni op ud )euqitats( ep yt el rap i ni fd iulec tniop tejbo nud ep yt e m moc rinruo f ed


465

8.2 Utilisation des oprateurs de comparaison de type_info

main() { point p1, p2 ; pointcol pc ; point * adp1, * adp2 ; adp1 = &p1 ; adp2 = &p2 ; cout << "En A : les objets pointes par adp1 et adp2 sont de " ; if (typeid(*adp1) == typeid (*adp2)) cout << "meme type\n" ; else cout << "type different\n" ; adp1 = &p1 ; adp2 = &pc ; cout << "En B : les objets pointes par adp1 et adp2 sont de " ; if (typeid(*adp1) == typeid (*adp2)) cout << "meme type\n" ; else cout << "type different\n" ; } class pointcol : public point { public : void affiche () { } // ici vide } ; #include <iostream> #include <typeinfo> // pour typeid using namespace std ; class point { public : virtual void affiche () { } // ici vide - utile pour le polymorphisme } ;

8 - Identification de type lexcution

.* loctniop ep yt ed ruetniop nu ne ruelav as ritrevnoc retiahuos tiarruop no ,)tniop ed vird( loctniop ep yt ed tejbo nu rus etniop pda euq tias nol is ,elp mexe raP .noitalip moc al inifd iulec etser emsihpro m ylop ec snad ssilitu sruetniop sed tid tne merporp ep yt el sia m ,tejbo tec ed tcaxe ep yt el ertannoc tuep no ,ep yt nos ed noitcno f ne tniop tejbol rus riga tias no : etsisbus enucal enu ,tnadnepeC .s c n er f r u o s t ni o p s t ej b o s e d e p y t el r e i f i t n e di d t n a tt e mr e p n e s el l e u tri v s n o it c n o f s e l r a p tr e f f o e m s i h pr o m yl o p el t n e t l p - m o c n o i t u c x el s e p yt s e d n o it a c i fi t n e d i d s ti li b iss o p s e l t n e m m o c ri o v e d s n o n e v s u o N

)2( == ruetarpol ceva seuqimanyd sepyt ed nosiarapmoc ed elpmexE


Appel A : reference a des objets de meme type Appel B : reference a des objets de type different

.noitcno f enud tne mugra ne suer stejbo xued ed ep yt ed t i t n e di l e d ) n oi t u c x el e d t n e m o m u a( t n e m e u q i m a n y d r er uss as e d n e y o m n u d is ni a es o p -sid nouq tiov nO .secner fr sed == ruetarpol euqilppa nol o elp mexe reinred nu icioV

466

9 Les cast dynamiques


8.3 Exemple avec des rfrences
Les fonctions virtuelles et le polymorphisme CHAPITRE 21
#include <iostream> #include <typeinfo> // pour typeid using namespace std ; class point { public : virtual void affiche () { } // ici vide } ; class pointcol : public point { public : void affiche () { } // ici vide } ; void fct (point & a, point & b) { if (typeid(a) == typeid(b)) cout << "reference a des objets de meme type \n" ; else cout << "reference a des objets de type different \n" ; } main() { point p ; pointcol pc1, pc2 ; cout << "Appel A : " ; fct (p, pc1) ; cout << "Appel B : " ; fct (pc1, pc2) ; }

: s ert ua sed senu sel sevird sessalc siort ed eihcrarih enu rinevretni tnasia f elpmexe nu icioV .ecner fr ed noisrevnoc enud tigas lis tsac_dab noitpecxe enu ehcnelcd li ; ruetniop ed noisrevnoc enud tigas lis 0 ruetniop el tinruof li : s a p ti t u o b a n r u e t a r p o l e u q s r o L .)e l le ut -ri v n o it c n o f e n u s n i o m ua r et si xe t i o d li u q eri d-- tse c ,e msi h pr o m yl o p e d et x et n oc n u snad siam( tnadnecsed ep yt nud uo euqitnedi ep yt nud ,dna med evirrad ep yt ua troppar r a p , t s e t ni o p t n e m e ll e r t ej b o l i s ti t u o b a t s a c _ c i m a n y d r u e t a r p o l , e l a r n g e r i n a m e n u D .tiareuohc noisrev -noc al ,tniop ep yt ed tejbo nu rus tiatniop pda is ,elpmexe raP .non uo elbasilar tse noisrev -noc al is aruas nouq noitucxel ed tnemo m uauq tsen ec siaM .tniop ed vird e m m-iul tse loctniop te vird uo tniop ep yt nud tse pda rap tniop tejbol rac elbatpecca )ert-tuep( ts e n oisr e v n o c et t e c e u q ts e e t i a f ar e s i u q n o i t a ci f ir v el u es a l , n o it al i p m o c n e , u d n e t n e n e i B : erirc arruop no ,)loctniop ep yt ed tejbo nu rus tnemeller etniop pda euq rs tse no( etnedcrp eshtop yhl ceva ,isniA .seuqi man yd tsac stid sruetarpod siaib el rap tilibissop ettec tiudortni a ++C ed emron a L
467
pointcol * adpc = dynamic_cast <pointcol *> (adp) ;

#include <iostream> using namespace std ; class A { public : virtual void affiche () // vide ici - utile pour le polymorphisme { } } ; class B : public A { public : void affiche () { } } ; class C : public B { public : void affiche () { } } ; main() { A a ; B b ; C c ; A * ada, * ada1 ; B * adb, * adb1 ; C * adc ; ada = &a ; // ada de type A* pointe sur un A ; // sa conversion dynamique en B* ne marche pas adb = dynamic_cast <B *> (ada) ; cout << "dc <B*>(ada) " << adb << "\n" ;

9 - Les cast dynamiques

468

Les fonctions virtuelles et le polymorphisme CHAPITRE 21

ada = &b ;

// ada de type A* pointe sur un B ; // sa conversion dynamique en B* marche adb = dynamic_cast <B *> (ada) ; cout << "dc <B*> ada " << adb << "\n" ; // sa conversion dynamique en A* marche ada1 = dynamic_cast <A*> (ada) ; cout << "dc <A*> ada " << ada1 << "\n" ; // mais sa conversion dynamique en C* ne marche pas adc = dynamic_cast <C *> (ada) ; cout << "dc <C*> ada " << adc << "\n" ; adb = &b ; // adb de type B* pointe sur un B // sa conversion dynamique en A* marche ada1 = dynamic_cast <A *> (adb) ; cout << "dc <A*> adb " << ada1 << "\n" ; // sa conversion dynamique en B* marche adb1 = dynamic_cast <B *> (adb) ; cout << "dc <A*> adb1 " << adb1 << "\n" ; // mais sa conversion dynamique en C* ne marche pas adc = dynamic_cast <C *> (adb) ; cout << "dc <C*> adb1 " << adc << "\n" ; } dc dc dc dc dc dc dc <B*>(ada) 0x00000000 <B*> ada 0x54820ffc <A*> ada 0x54820ffc <C*> ada 0x00000000 <A*> adb 0x54820ffc <A*> adb1 0x54820ffc <C*> adb1 0x00000000

tsac_ci man yd ruetarpol ed noitasilitud elpmexE

-roc dradnats ertnel ,tnemelarnG . dradnats ertnel emmon nol euq ec tcennoc tse nic ini fdrp tol f el ,emm eD . dradnats eitros al e mmon nol euq ec tcennoc tse tuoc ini fdrp tolf el ,noitnevnoc raP .reihci f nu uo euqirhpirp nu tcennoc ert tuep tolf nU . egata mro f l e u t n e v n o s e u q i s n i a , n o it a mr o f n i l e d tr e fs n ar t el r er uss a t n e vr e s > > u o < < sr u et ar p o s e L .ertned tol f noitamro fnil ed tnassinruo f ; e itr o s e d t ol f n o it a mr o f ni l e d t n a v e c er : la na c n u e m m oc r d is n oc er t t uep t o l f n u , el ar n g er i n a m e nuD . n o i t a mr o f ni enu eril etiahuos no elleuqal snad eulavl al te )nic ici( nrecnoc ertned tol f ua tnemevit -cepser tnadnopserroc sednarpo xued tinruo f elle leuqua ,>> ruetarpol leppa tia f ic-elleC : e uq s el - l e t s n o i t c urt s n i s e d t n a si li t u n e dr a d n a t s e r t n el r u s eri l s n e m a t s n o v a s u o n , e m m e D .)n ici( ruelav al erirc etiahuos no tnod noisserpxel te )tuoc ici( nrecnoc eitros ed tol f ua tne mevitcepser tnadnopserroc sednarpo xued tinruo f elle leuqua ,<< ruetarpol leppa tia f erinred etteC : e u q s el l e t s n o it c urts n i s e d s n o isi l it u s u o n , er i a f e c r u o P . dr a d -nats eitros al rus erirc snema t tnevuos snova suon ,sertipahc stnedcrp sed sruoc uA
cout << n ; cin >> x ;

Les flots

22

.maertsi ed ueil uo maertsiw elpmexe rap , w ed dcrp ,rahc epyt el ruop euq mon emm el tnetrop setnadnopserroc sessalc seL .rahcw epyt el ruop sesilaicps snoisrev sed tnemelag etsixe lI .2 .golc te rrec
: s er tua xu ed s ru el liad e t si xe n e liuq sn orr e v suoN .1

- r o p i u q r a h c e p yt e l r u o p s n or t a p s e c e d s e si l a i c ps s n o isr e v s e d ets i x e l i s i a M .s n ort a p sed ert marap em moc tarappa iuq ep yt ,nnod ep yt nud sruelav ed setius sed tnas -sinruo f uo tnavecer erid--tsec ,ssilarng stol f sed relupinam ed tnattemrep sessalc ed snortap sed rus edno f tse ellE .)++C ed 3 noisrev al uqsuj( tnavarapua tiatsixe iuq ellec e d n o i t as il ar n g e n u ts e e mr o n a l r a p e i ni f d s e itr os-s e r t n e d e u q h t oi l bi b el l e v u o n a L
2

seriatnemlpmoc snoitamrofnI

.reihci f nu tcennoc tol f nu cnod ,tolf leuq etropmin noitcirtser snas areuqilppas stol f sed s o p or p er ti p a h c e c e d t u b d e l s d t i d ar es i u q e c t u o t e u q z e h c a s , e l ar n g er i n a m e n u D .sac ec snad setre f fo tcerid sccad stilibissop te ,reihci f nu tol f nud noixennoc ; e itr os neuq ertne ne neib issua ,snoitamro fni sed egata mro f ed stilibissop sed elliatd edut ; r ue ta si li t ul rap sini fd )sessalc( sep yt sed ruop >> te << sruetarpo sed noitini fdrus ed stilibissop ; tol f nud ruerred tutats ud noitseg ; ) ... d a er , t n u o c g , e n i lt e g , t e g( s er b m e m s n o i t c n o f s el -apicnirp ,stpecca esab ed sep yt : maertsi essalc al ed stilibissop sed elarng noitatnesrp ; noita mro fnil ed egata mro f ed selp mexe ,)etirw ,tup( serbme m snoitcno f selap -icnirp ,stpecca esab ed sep yt : maertso essalc al ed stilibissop sed elarng noitatnesrp : et n a v i us n o isser g or p al s n or et p o da s u o N . I S N A e mr o n al r ap s e uv rp tnos selleuq sellet ++C rap setre ffo seitros-sertned stilibissop sed elbmesnel rus tniop el eria f av ertipahc eC .tuoc te nic sini fdrp stol f xua tnatimil suon ne ,maertso te maertsi sessalc sed stilibissop sed senu-seuqleuq retiolpxed stnetnoc semmos suon suon ,iciuqsuJ .maertsoi ett-ne reihci f ud noitaroprocnil etissecn iolpme rue L .esab ed sep yt stner ffid sel ruop >> te << sruetarpo sel tini fdrus sessalc xued sec ed enucahC .ertned tol f nu ruop maertsi ; eitros ed tol f nu ruop maertso : riovas ,eini fdrp essalc enud tejbo nu tse tolf nuuq erid tuep nO . xi o h c n os e d r e i h ci f n u r e t c e n n o c arr u o p liuq stol f sertuad e m m-iul rini fd tuep ruetasilitul , sini fdrp stol f sec ed srohed nE .reihci f nu srev dradnats eitros al uo dradnats ertnel regirider ed tnettemrep suov snoit -atnemlpmi sed trapulp al sia m ,narcl dradnats eitros al te reivalc ua tua fd rap dnopser
1

470

Les flots CHAPITRE 22

.etirw noit -cnof al aresilitu nol euqsrol ,elpmexe rap ,ariudorp es iuq ec tsec : egatamrof ed riova y sap en arruop li ,sac sniat -rec snad ,trap ertuaD .egatamrof ec utceffe tse tnod erinam al rus rinevretnid elbissop tse liuq snorrev suoN .2 .unev tnemom el sennoitnem tnores sellE .seruenim tnememrtxe tnos secnerffid seL .1

: s n ad e m m oc ,etius ed sio f srueisulp tnemelicaf reuqilppal ed temrep aleC .euluov noita mrofnil tirc a li uq srp a , nre c n oc to l f u a e c ner f r a l t at l usr e m m o c t inr u o f < < r u et arp o t ec , sru el l ia raP . noitcejni sio frap ertnocner no ,tnem maton : udnapr tne mellesrevinu s ap ts en e mre t e c e uq si o fe t u ot ze hc as ; r ue tarp o t ec e d elr e l re i fi la uq r u op er u tir c tom el snoreiolpme suoN .)4 te 3 ,2 ,1 : sertcarac sel ,ici( sunetbo isnia ser ffihc sed nucahc tnadnopserroc sertcarac sel tuoc tol f ua re yovne te la micd emts ys el snad n ed )erianib( ruelav al ritrevnoc etsisnoc << ruetarpol ed liavart el ,4321 ruelav al tneitnoc n iS
cout << n ;

: noitcurtsnil ,elpmexe rap ,snordisnoC .eirporppa noaf ed tnata mro f al ne nrecnoc tolf ua noisserpxel ed ruelav al erttemsnart etsisnoc elr noS .e u q n oc le u q esa b e d e p yt n u d n o isser p xe e n u ; )siht eticilpmi tne mugra( leppa tna yal essalc al : s e d n ar p o x u e d t i o er lI
2

: e mr o f al suos ,esab ed sep yt stner ffid sel ruop ini fdrus tse << ruetarpol ,maertso essalc al snaD

. ruetalupina m ed etnatrop mi noiton al eriudortnid art -temrep suon iuq ec ,noita mrofnil ed egatamro f ed selp mexe seuqleuq etiusne snoreni maxe suoN .etir w te tup serbmem snoitcno f xued sed elr el snorrev suon ,ini fdrus tse << ruetar -pol sleuqsel ruop esab ed sep yt sel leppar te << ruetarpol ed elr el sicrp riova srpA

.stluci ffid ed sap noa f etuot ed tiaretnesrp en sep yt sertuad noitasilarng a L .ici snoreidut suon euq sellec tnos ec te sesilitu sulp sel niol srt ed tnos eC . erinam em m al ed tnetropmoc es iuq te e mron al tnavad sessalc sel euq mon e m m el tnet
1

1.1 Loprateur <<

1 Prsentation gnrale de la classe ostream

cout << "valeur : " << na << "\n" ; ostream & operator << (expression)

1 - Prsentation gnrale de la classe ostream

471

472

Les flots CHAPITRE 22

1.2 Les flots prdfinis


.eriaid mretni nopmat n u t n asi l it u n e s i a m ,r u err e d dr a d n at s ei tr os a l i ss u a t c e n n o c e itr os e d t o l f : g o l c ,eriaid mretni nopmat snas , ruerred dradnats eitros al tcennoc eitros ed tol f : rrec : maertso essalc ed sini fdrp stol f sertua xued etsixe li ,tuoc ed sulp nE
1

1.3 La fonction put


: isniA .tnemugra ne uer ertcarac el tnadnopser -roc tol f ua te msnart iuq tup e mmon erbme m noitcno f enu ,maertso essalc al snad ,etsixe lI
cout.put(c) ; cout << c ;

.rahc e p y t e l r u o p r u e t ar p o l e d n oi t i n i f dr us e d e c n es b a l r ei ll a p r u o p ) ! e mr o n al s er u eir t n a neib( ++C ed snoisrev serimerp sel snad elbasnepsidni tuotrus tiat tup noitcno f al ,tia f nE

: ruetarpo tec rap stpecca sep yt sel tnanrecnoc fitalutipacr nu icioV


Tous les types de base sont accepts par loprateur << : - soit par surdfinition effective de loprateur : types char (avec les variantes signed ou unsigned), int (avec sa variante unsigned), long (avec sa variante unsigned), float, double et long double ; - soit par le jeu des conversions implicites : types bool, short. Les types pointeurs sont accepts : - char * : on obtient la chane situe ladresse correspondante ; le type string sera accept, avec le mme comportement ; - pointeur sur un type quelconque autre que char : on obtient la valeur du pointeur correspondant. Si lon souhaite afficher la valeur dun pointeur de type char * (et non plus la chane quil rfrence), il suffit de le convertir explicitement en void *. Les tableaux sont accepts, mais ils sont alors convertis dans le pointeur correspondant ; on nobtient donc gnralement une adresse et non les valeurs des lments du tableau, sauf pour les tableaux de caractres traits comme une chane de style C (attention au problme du zro de fin !). Les types classes seront accepts si lon y a dfini convenablement loprateur <<.

: tiare f el e mmoc ,c snad unetnoc ertcarac el tuoc tol f ua te msnart

. esire ffub eitros ed siofrap elrap nO .2 . esireffub non eitros ed , sialgnarf ne ,siofrap elrap nO .reffub sialgna nE .1

<< ruetarpol rap stpecca sepyt seL


2

-etniam sd snotnesrp suov suon ,tnadnepeC .maertsi essalc al ed sellec euq isnia ,maertso ess a l c al e d e g a t a mr o f e d s ti li b iss o p s e d e l b m es n e l 5 e h p ar g ar a p u a s n or e i d ut s u o N

.e t na d n o pserr oc n o i ta m -ro fnil tirc a y nouq srpa ,nrecnoc tol f el ruoter ne tinruo f etir w noitcnof al ,tup em moC .) eri o m m ne tnerugi f selleuq sellet sertsigerne tnos ep yt ruel tios euq leuq snoita mro fni sel leuqel snad erid--tsec( erianib e mro f suos reihci f nu rerc ed noa f elues al ares ec ,ehc -naver ne ; narc nud sac el snad trtnid erug an alec ,larng nE .noitaci fidom erdniom al essibus elleuq snas ,) erianib tnevuos tid no( eturb emro f enu suos noitamro fni e n u ert t e ms n ar t ar et i a h u os n ol e u qsr o l el b a s n e ps i d n i ar er v a s e t i r w n o it c n o f et t e c ,t i a f n E .)tol f el rus etirc tne mevitce ffe noita mro fnil ed tirabag el rus riga tuep n o < < r u et ar p ol ce v a , s n orr e v e l s u o n e m m o c , e u q sr ol a( e g at a mr o f n uc u a e si la r e n n o it -cno f ettec ,trap ertuaD .eitros ed tol f ua ,sertua sel em moc ,simsnart ares li ,euvrp rueugnol al snad tarappa ertcarac let nu is ; )lun ertcarac( enahc ed ni f ed ertcarac ed rinevretni sap tia f en etir w euqsiup emm el sap tsen tnemetropmoc nos ,tia f nE .<< ruetarpol ed edial enahc enud noissimsnart al ceva iolpme elbuod eria f relbmes ,ici ,tuep noitcno f etteC .j te n ,o ,b ser -tcarac sel erid--tsec ,t esserdal ed ritrap s fitucsnoc sertcarac 4 tuoc tol f el rus eiovne
cout.write (t, 4) ;

: c e v a , el p m e x e r a P . e n n o d r u e u g n o l e d en a h c e n u r uo p et ir w r es il i t u t u e p n o ,t e t c o n u s n a d g n ar sr u oj u o t ts e er t c ar a c n u e m m o C .rdisnoc eitros ed tolf ua stetcod etius enu erttemsnart ed te mrep etir w erbme m noitcno f al ,maertso essalc al snaD
1.4.1 Cas des caractres

: )rahc ep yt ed tnat 3c te 2c ,1c( elp mexe rap erircd temrep aleC .tnad -nopserroc ertcarac el tirc a y nouq srpa ,nrecnoc tol f el tse tup ed ruoter ed ruelav a L
473

1.5 Quelques possibilits de formatage avec << 1.4 La fonction write


: t ne la v iuq tse i uq ec
cout.put(c1).put(c2).put(c3) ;

1.4.2 Autres cas

: n o i t c u rt s n i l

char t[] = "bonjour" ; cout.put(c1) ; cout.put(c2) ; cout.put(c3) ;

1 - Prsentation gnrale de la classe ostream

t u o c r u s s e ti r c s r u e l a v s e d n o i t a r m u n e d e s a b a l r u s n o i t c A
par defaut : en hexadecimal : en decimal : en octal : et ensuite : par defaut avec noboolalpha avec boolalpha et ensuite 12000 2ee0 12000 27340 27340 : 1 : 1 : true : true : : : : : " << n " << hex << n " << dec << n " << oct << n " << n << << << << << "\n" "\n" "\n" "\n" "\n" ; ; ; ; ; << << << << "\n" "\n" "\n" "\n" ; ; ; ;

: loob ep yt ed ko elbairav enud ruelav al serinam setner f fid ed ; n eritne elbairav em m al ed ruelav al sesab setner f fid snad : snovirc suon leuqel snad e mmargorp ed elpmexe nu icioV .eurt ,eslaf emro f al suos tios ,)1 uo 0( reitne nud emro f al suos tios )loob ep yt ed( enneloob noisserpxe enu re mirpxed risiohc tuep no ,e mron al siuped ,ertuo nE . la tc o : 8 ; l a m ic da xe h : 6 1 ; ) t u a f d r a p r u e l a v a l e d ti g as l i( l a mi c d : 0 1 : s et n a vi us ses ab s e d en u l snad re mirpxel ed risiohc tuep no ,eitros ed tol f nu rus eritne ruelav enu tirc nol euqsro L .)non uo euqirtmarap( ruetalupinam ed noiton al eriudortnid artte mrep suon iuq ec ,stnaruoc sulp sel eitros ne egatamro f ed selpmexe sel tnan
474
Les flots CHAPITRE 22

1.5.1 Action sur la base de numration

} #include <iostream> using namespace std ; main() { int n = 12000 ; cout << "par defaut cout << "en hexadecimal cout << "en decimal cout << "en octal cout << "et ensuite bool cout cout cout cout ok << << << << = 1 ; // ou ok = true "par defaut : " << ok "avec noboolalpha : " << noboolalpha << ok "avec boolalpha : " << boolalpha << ok "et ensuite : " << ok

.>h.maertsoi< erocne esilitu nol is >h.pinamoi< .1

. > p i n a m o i < et t- n e re i hc i f u d n oi tar o pr oc ni l t ne m u l os ba e tis se c n i ol p m e r ue l ; s e u qir t m ara p sr u et al u p i na m sertuad puocuaeb etsixe liuq snorrev suoN . euqirt marap ruetalupinam ed srola elrap nO .tiahuos tirabag el tnatnesrper ertmarap nu etropmoc li ,)ced uo tco ,xeh( stned - c r p s e l e u q e x e l p m o c s u l p u e p n U . ) w t e s ( r u e t a l u pi n a m n u l e p p a s n os i a f s u o n , er o c n e i cI
1

tuoc rus etirc noitamrofnil ed tirabag el rus noitcA


0 1 2 3 4 5 6 7 8 9 10 11 : : : : : : : : : : : : 12345: 12345: 12345: 12345: 12345: 12345: 12345: 12345: 12345: 12345: 12345: 12345:

: et i r c t s e n o i t a m r o f ni l el l e u q al n o l e s )tirabag( ruegral al rus riga tnemmoc ertnom iuq em margorp ed elp mexe tec snordisnoC .1 uo 0 euqirmun emro f al resil -itud ehcnaver ne ednamed ahplaloobon ruetalupina m e L .eslaf uo eurt erid--tsec ,euqitb -ahpla e mro f al suos senneloob sruelav sel rehcif fad ednamed ahplaloob ruetalupina m e L .)...stnattol f ,sertcarac ,sreitne( tolf ua sesimsnart s n o it a mr o f n i s e l t n ei os e u q s el l e u q a l e c t e ,)r u et al u p i n a m n u r a p( s a p e i fi d o m al e n n o u q t n at em m al etser )nnod eitros ed tol f nu ruop( esab al ed ruelav al euq neib zetoN .noitar mun ed esab al ed ruelav al rei fido m etsisnoc noitca ettec ,icI .) noitalupinam ( noitca eniatrec enu rpo tno sliuq srpa ,tol f e m m el ruoter ne tnassinruo f ,tol f ep yt ed ednarpo lues nu ,sini fdrp sruetarpod tigas lI .sruetalupinam sed tnemmon es tco ,ced ,xeh selob m ys se L
475
1.5.2 Action sur le gabarit de linformation crite

#include <iostream> #include <iomanip> using namespace std ; main() { int n = 12345 ; int i ; for (i=0 ; i<12 ; i++) cout << setw(2) << i << " : "<< setw(i) << n << ":\n" ; }

1 - Prsentation gnrale de la classe ostream

. t u a f d r a p s n o it n e v n o c s el t n a v i us e h ci f f a t n a t -ser n ed ruelav al ; etiusne ehci ffa )": "( etnatsnoc enahc al uq euqilppas en )i( wtes ,sio f ettec ,te ffe nE .shcif fa statlusr sel snad : ertcarac reimerp ud noitisop al neib zetoN
1 :12345: 2 :12345: 3 :12345: 4 :12345: 5 :12345: 6 :12345: 7 :12345: 8 :12345: 9 :12345: 10 :12345: 11 :12345:

snoitamro fni sel ruop wtes leppa uaevuon sap tia f en nol iS .erirc noitamrofni eniahc -orp al ed tirabag el tnemeuqinu tini fd ruetalupinam ec euq zehcas ,wtes enrecnoc iuq ec nE
476
Les flots CHAPITRE 22

: rap tnedcrp em margorp ud egahci ffad noitcurtsnil tnaalpmer ne , fitacidni ertit .)euqnort sap cnod ares en elle( selleutibah snoitnevnoc sel noles et irc ar es er i nr ed et t ec , e tn a vi us r u el av al e d er u tir cl r u op e t nas i f f us ni ts e wt es ei nr u o f ruelav al is ,trap ertuaD .)... "ruojnob " enahc al ruop sertcarac 7 ,5432- ruelav al ruop ser -tcarac 5 ; 42 ruelav al ruop sertcarac 2( erirc sel ruop eriassecn la minim tnemecalp mel t n as i li t u n e ri o v as ,s el l e u ti b a h s n oi t n e v n o c s e l t n a vi u s s et ir c t n or es i c-s el l e c ,s e t n a v i u s

1.5.3 Action sur la prcision de linformation crite

main() { float x = 2000./3. ; double pi = 3.141926536 ; cout << "affichage de 2000/3 et de pi dans diffrentes prcisions :\n" ; cout << "par defaut :" << x << ": :" << pi << ":\n" ; for (int i=1 ; i<8 ; i++) cout << "precision " << i << " :" << setprecision (i) << x << ": :" << pi << ":\n" ; }

: st at l us r s e c ti ar d n ei t b o n o
cout << setw(2) << i << setw(i) << " :" << n << ":\n" ;

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

: em margorp ec ze yoV

: n oi si crp al e d x i oh c el ceva lpuoc ,)essitnam al ed tniop el tnava er ffihc nu ceva elleitnenopxe noitaton( cifitneics te )etnattol f noitaton( dexif sruetalupina m sed noitasilitul ertno m iuq elpmexe tec ze yoV .) ! or z n o isi c r p a l r e t i v e m m d n a u q t u a f l i( x u a f t n e m e l at o t t a tl us r e d si a m aj t i o v e n n o ,++C nE .noitaton al ed xiohc el euq sruelliad isnia ,ecneuqsnoc ne ei fido m tse elle ,nrec - n o c er b m o n u d er i t n e r u el a v al s n i o m u a r e h c i f f a r u o p e t n as i f f us s a p t s e n e d n a m e d n ois -icrp al is ,euq areton nO .noitamro fni ednoces al ed egahci ffal ertno m el e mmoc )eticilpxe noitaci fidom uqsuj( tnena mrep tse ruetalupinam ec ed te ffel ,sio f etteC .suluov s fitac -ingis ser ffihc ed erbmon el rini fd ed te mrep )noisicerp( wtes euqirtmarap ruetalupinam e L .s f it ac i fi n g is ser f fi h c 6 esi l it u ; )e ssi t na m al e d t ni op el tnava er f fihc nu ceva elleitnenopxe uo etnattol f( eirporppa sulp al noitaton al tisiohc : < < r u et ar p ol , t n a tt o l f ep yt ed snoitamro fni sel ruop ,ehci ffa engil erimerp al snad tiov el no em moc ,tua fd raP tuoc rus etirc noitamrofnil ed noisicrp al rus noitcA
par defaut precision 1 precision 2 precision 3 precision 4 precision 5 precision 6 precision 7 :666.667: :3.14193: :7e+02: :3: :6.7e+02: :3.1: :667: :3.14: :666.7: :3.142: :666.67: :3.1419: :666.667: :3.14193: :666.6667: :3.141927:

1.5.4 Choix entre notation flottante ou exponentielle

#include <iostream> #include <iomanip> using namespace std ; main() { float x = 2e5/3 ; double pi = 3.141926536 ; cout << fixed << "choix notation flottante \n" ; for (int i=1 ; i<8 ; i++) cout << "precision " << i << setprecision (i) << " :" << << cout << scientific << "choix notation exponentielle \n" ; for (int i=1 ; i<8 ; i++) cout << "precision " << i << setprecision (i) << " :" << << }

1 - Prsentation gnrale de la classe ostream

x << ": :" pi << ":\n" ; x << ": : " pi << ":\n" ;

477

: 6 ertipahc ud 3.2 ehpargarap ud noitarutca f ed em margorp ud statlusr sed noit -atnesrp al reroilma ruop sruetalupina m sed snu-seuqleuq resilitud snosoporp suov suoN . ) f t e s n oi t -cno f al ceva elpmexe rap ,egatamro f ed tatd tom ud dleiftaolf p mahc ud stib sel orz ert -te mer tiardua f li( 5 ehpargarap ua setircd stilbissop sertuad tnasilitu ne rinevrap y arruop nO .ruetalupina m nu ceva )noitaton al ed euqita motua xiohc( tuafd rap tnemetropmoc ua rin -ever ed elbissop sulp tsen li ,snoitaton sec ed enul eisiohc sio f enuuq areton nO .)eticilpxe noitaci fidom uqsuj( tnenamrep tse cifitneics uo dexif sruetaci fido m sed te ffel ,erocne L ...segahci ffa sed noisicrp al resirta m etiahuos nouq srol sd tua fd r a p e d o m e l r e s il i t u d r e ti v t r t ni c n o d ar u a n O . e si l it u n o i t a t o n al ti o s e u q el l e u q , l a m -icd tniop el srpa ser ffihc ed erb mon ua dnopserroc noisicrp al ,sio f ettec ,euq areton nO
) e l l e i t n e n o p x e u o e t n at t o l f ( n o i t a t o n a l e d x i o h C
choix notation flottante precision 1 :66666.7: : 3.1: precision 2 :66666.66: : 3.14: precision 3 :66666.664: : 3.142: precision 4 :66666.6641: : 3.1419: precision 5 :66666.66406: : 3.14193: precision 6 :66666.664062: : 3.141927: precision 7 :66666.6640625: : 3.1419265: choix notation exponentielle precision 1 :6.7e+04: :3.1e+00: precision 2 :6.67e+04: :3.14e+00: precision 3 :6.667e+04: :3.142e+00: precision 4 :6.6667e+04: :3.1419e+00: precision 5 :6.66667e+04: :3.14193e+00: precision 6 :6.666666e+04: :3.141927e+00: precision 7 :6.6666664e+04: :3.1419265e+00:

478

1.5.5 Un programme de facturation amlior

Les flots CHAPITRE 22

#include <iostream> #include <iomanip> 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 else if ( ttc < 2000 ) tauxr else if ( ttc < 5000 ) tauxr else tauxr

= = = =

; : " ;

0 ; 1. ; 3. ; 5. ;

.sruetniop sepyt sel ruop ,iroirp a ,sap siaM .1

. << ruetarpol rap rpo egatamrof ud esrevni noitarpo enu tnasilar ne uluov esab ed ep yt ud r u e l a v e n u r e mr o f r u o p s eri ass e c n s er t c ar a c s e l nr e c n o c t o l f u d er i ar t x e e tsi s n o c el r n o S .e u q n oc le u q esa b e d e p y t n u d e ul a vl e n u ,; siht eticilpmi tne mugra( leppa tna yal essalc al : s e d n ar p o x u e d t i o er lI : e mr o f a l su os , * r a h c sirpmoc y ,esab ed sep yt sel suot ruop ini fdrus tse >> ruetarpol ,maertsi essalc al snaD
1

. n o it a mr o f n il ed egata mro f ed elp mexe nu rus snoreni mret suoN .)...daer , tnuocg ,enilteg ,teg( maertsi ess a l c a l e d s er b m e m s n o it c n o f s e t n er f f i d s e d el r el s n or i ni f d s u o n si u P . > > r u et ar p ol ed elr el resicrp rap snorecne mmoc suon ,maertso essalc al ruop tia f snova suon em moC

sngila esriatnom segahciffa ceva esimer ceva noitarutca F


donnez le prix hors taxes : 2538.78 prix ttc = 3036.38 remise = 91.09 net payer = 2945.29

2.1 Loprateur >>

2 Prsentation gnrale de la classe istream

istream & operator >> (type_de_base & ) donnez le prix hors taxes : 400 prix ttc = 478.40 remise = 0.00 net payer = 478.40 }

remise = ttc * tauxr / 100. ; net = ttc - remise ; cout << fixed << setprecision (2) ; cout << setw(20) << "prix ttc = " << setw (12) << ttc << "\n" ; cout << setw(20) << "remise = " << setw (12) << remise << "\n" ; cout << setw(20) << "net payer = " << setw (12) << net << "\n" ;

2 - Prsentation gnrale de la classe istream

479

.mon uaelbat el ruop sertcarac 01 ed sulp etpmoc ne erdnerp sap en ed niatrec tse no
const int LGNOM = 10 ; char nom[LGNOM+1] ; cin >> setw(LGNOM) >> nom ; our b o n j cin >> c ; cin >> n >> p >> x ;

: c e v a , el p m e x e r a P .) al- el l e c tne meuqinu te( erutcel eniahcorp al ed srol etpmoc ne sirp sertcarac ed erb mon el eti mil iuq wtes euqirt marap ruetalupinam ua riruocer tuep nO .)...setnatrop mi srueugnol sed erdnietta t ne v ue p r ei va l c u a s e n gi l s el ,t n e me n n ori v ne s ni atr ec s n a d( es i a es o hc e n u sr u o j u ot s a p tsen iuq ec ,rinruo f ed euqsir ruetasilitul euq sertcarac ed mumixa m erb mon el rinifd ed elbapac ert tua f li ,eriomm ne tnemesarcd semlborp sed retiv tuev nol is ,trap ertuaD .s er t c ar a c 1 + n e d t n e m e c a l p m e n u r i o v r p t u a f l i , s e r t c a r a c n e d e n a h c e n u er i l r u o p , is n i A .)0\( enahc ed ni f ed lun ertcarac nu rap etlp moc tse eriomm ne egnar noitamro fnil ,)* rahc( C el yts ed enahc enud noitanitsed noita mro fni enu tol f nu rus til nouqsro L . e n i l t e g u o t e g ser b m e m s n oi tc n o f sed enul tnasilitu ne ,sruetimild xua redcca ruop selbarga sulp snoitulos sed etsixe liuq suossed-ic snorrev suoN .euqir mun ep yt ed sellec reilucitrap ne ,seul snoitamrofni sel setuot srola enrecnoc li o erusem al snad ,esia uep tse noitasilitu nos siam ,tniop ec rus rigad te m -rep )scnalb secapse sel retuas sap en( s wpikson mmon ruetaci fido m nu etsixe li ,eiroht nE .r te u ,o ,j ,n ,o ,b : sertcarac 7 sel euq etpmoc ne erdnerp en ariudnoc
2.1.2 Cas des chanes de style C

: etxet ec tnanetnoc tolf nu euqilppa : ) rahc ep yt e d s oppu s tnat c( noitcurtsnil ed noititpr al ,elp mexe raP .sertcarac euq tnat ne sul ert sap tnevuep e n sr ue ti mi l d s ec ) t ua f d r a p( e u q ti a f e m si n ac m e c e d se ta i d m m i se c ne u qs n o c se d e n U .) f \( egap ed tne megnahc te )n\( engil ed ni f ,)v\( elacitrev noitalubat ,)t\( elatnoziroh noitalubat ,ecapse : stnavius sertcarac sel scnalb secapse sed eirogtac ettec snad egnar nol euq snol -eppaR .)etsixe ne lis sertcarac sec retuas rap ecne mmoc erutcel etuot ,trap ertuad ,euq te sruetaraps ed tnevres sli ,trap enud euqsiup ,tnatropmi elr nu tneuoj )secaps etih w : sialgna ne( scnalb secapse sel ,tuafd rap ,euq )5 ertipahc ud 4.2 ehpargarap( uv snova suoN : snad em moc ,etius ed sio f srueisulp reuqilppal ed te mrep aleC .euluov n o it a mr o f n il t i ar t x e a n e l i u q s r p a , nr e c n o c t o l f u a e c n er f r a l t at l us r e m m o c t i nr u o f l I
480
Les flots CHAPITRE 22

2.1.1 Cas des caractres

: e tx et ec tnanetnoc tol f nu tnauqilppal ne ,isniA .sirp moc sruetimild ,ertcarac leuq etropmin eril tuep teg noitcno f al ,>> ruetarpol ed tuafd rap tne metrop moc ua tnemeriartnoC .uluov ertcarac el tiartxe a ne nouq srpa ,nrecnoc tol f ua ecner - fr al ruoter ne tinruo f noitcno f ettec ,tup em moc tuoT .tnemugra ne tinruo f iul nouq )rahc ep yt ed( elbairav al snad regnar el ed te ertned tol f nud ertcarac nu eriartxed temrep
istream & get (char &)

: n oi t cn o f a L

>> ruetarpol rap stpecca sepyt seL


Les autres types classes seront accepts si lon y a surdfini convenablement loprateur >>.

: ruetarpo tec rap stpecca sep yt sel tnanrecnoc fitalutipacr nu icioV .e m lborp e c elbarga noitulos enu tinruo f enilteg noitcnof al euq niol sulp uep nu snorrev suon ,erocne L : srola tiares eul enahc eri merp al ,te ffe nE : ste melliug ertne recalp al ed neir tres en li ,sac ec snad ,euq zetoN : euq ellet ,ecapse nu elpmexe rap tnanetnoc enahc enu sio f elues enu ne eril ed elb -issop sap tsen li ,srueti mild ed tnevres scnalb secapse sel ,tua fd rap ,em moc ,trap ertuaD
481
bonjour mademoiselle "bonjour mademoiselle" "bonjour

2.2 La fonction get

2.1.3 Les types accepts par >>

our b o n j

Tous les types de base sont accepts par loprateur >> : bool, char (et ses variantes signed et unsigned), short (et sa variante unsigned), int (et sa variante unsigned), long (et sa variante unsigned), float, double et long double.

Le type string (chanes de type classe) sera accept (il jouera un rle comparable aux chanes de style C, avec moins de risques). Les tableaux ne sont pas accepts, hormis les tableaux de caractres (on y lit une chane de style C, termine par un caractre nul). Parmi les types pointeurs, seul char * est accept : dans ce cas, on lit une chane de style C. 2 - Prsentation gnrale de la classe istream

.rahc non te tni epyt ed tios ruoter ed ruelav as euq eifitsuj iuq ec tseC .1

.s u l s er t - c ar a c s e d e ti us a l , e n a h c e d ni f e d l u n er t c ar a c n u et u o j a n o it c n o f et t e c ,s a c s e l s u o t s n a D .s u l t t n o s er t c ar a c 1 - e l li at ; eri o m m n e i p o c e r s a p t s e n e r t c a r a c e c , s a c e c s n a d : v u o r t t a m i l e d r u et i m i l d er t c ar a c el : et i a fs it as ts e s e t n a vi us s n oi ti d n o c x u e d s e d e n u u qsr o l t p m orr e t nis e ll E . h c e s s e r d a d tne mecalpmel snad ecalp sel te eleppa tna yal tol f el rus sertcarac sed til noitcno f etteC : emro f al suos etnesrp es enilteg noitcno f al ed ett-neL .) n o it se u q n e e n a h c al snad tnesrp non te( unnoc ertcarac nu rap enimret ,seuqnocleuq sertcarac ed etius e n u d t n e m e l ar n g s ul p u o ,s er t c ar a c e d s e n a h c s e d er ut c e l a l t n e ti li c a f s n o it c n o f x u e d s e C
istream & getline (char * ch, int taille, char delim = \n ) int get () int c ; ... while ( ( c = cin.get() ) != EOF ) cout.put (c) ; char c ; ... while ( cin.get(c) ) cout.put (c) ; // recopie le flot cin // sur le flot cout // arrt quand eof car alors (cin) = 0
1

: euq sellet snoitcurtsni sed erircd ,etius rap ,te )xua f uo iarv( euqigol ruelav enu e mmoc tol f nu rerdisnoc ed elbissop tse liuq ,tol f nud ruerred tutats ua rcasnoc 3 ehpargarap ua ,snorrev suoN

. t na d n o p -serroc tol f el rus ertnocner t a reihci f ed nif al euqsrol )1- larng ne( FOE elaicps ruelav enu rinruo f ed eruse m ne isnia tse ellE .reitne nud emrof al suos ruoter ed ruelav emmoc tinruo f el elle sia m ,ertned tol f nud ertcarac nu eriartxed issua elle temrep ic-elleC : e mr o f al e d ,) n o i ti ni f dr u s c n o d a y l i( t e g n oi t c n o f ert u a e n u e tsi x e l I . n \ t e r , u , o , n\ , n\ , j , e c a p s e , e c a ps e , e c a ps e , e c a ps e , n , n \ , o , e c a ps e , b : s er t c ar a c 6 1 e t p m o c n e er d n er p ar i u d n o c e ll e
482
Les flots CHAPITRE 22

2.3 Les fonctions getline et gcount


: s e t n e l a v i u q t n o s i c- s e l l e C
e uqrameR

. e m m a r g o r p t n e d c r p u d n o i t a t p a d a e n u s n or e s o p or p s u o n o 8 2 er t i p a h c u d 3 e h p ar g ar a p u a s n or e lr a p n e s u o n ; g n i r t s e p y t e d t e j b o n u s n a d s er - t c ar a c s e d e r i l e n i t s e d ,) s i o f e t t e c , e t n a d n e p d n i ( e n i l t e g n o i t c n o f e r t u a e n u e ts i x e l I 2 .dr a dn at s ert n el i u l sr ev g iri der tia nouq uep ruop ,etxet reihcif nu retsil rivres tia f tuot tuep tnedcrp emmargorp e L 1

se uqrameR

enilteg noitcnof al ed noitasilitud elpmexE


ligne de 0 caracteres ::

: s er tc ara c e d erb m o n el esicrp ne te reivalc ua sertne sengil sed ehciffa iuq e mmargorp nu ,elpmexed ertit ,icioV .enilteg rap eriomm ne egnar enahc al ed evitce ffe rueugnol al tinruof tnuocg ,tid tne mertua ; stpmoc tnos en enahc al ed ni f al calp iulec in ,rueti mild ertcarac el iN . enilteg ed leppa rein -red ud srol sul tnemevitcef fe sertcarac ed erbmon el tinruof elle , tnuocg noitcno f al tnauQ . et x e t e d s e n gi l e d erutcel al etpada neib )n\( tua fd rap ruelav enu edssop rueti mild ertcarac el euq zetoN
483

bonjour ligne de 7 caracteres :bonjour: 9 fois 5 font 45 ligne de 16 caracteres :9 fois 5 font 45: nimporte quoi <&"(-_))= ligne de 29 caracteres :nimporte quoi <&"(-_))=: #include <iostream> using namespace std ; main() { const int LG_LIG = 120 ; // longueur maxi dune ligne de texte char ch [LG_LIG+1] ; // pour lire une ligne int lg ; // longueur courante dune ligne do { cin.getline (ch, LG_LIG) ; lg = cin.gcount () ; cout << "ligne de " << lg-1 << " caracteres :" << ch << ":\n" ; } while (lg >1) ; }

2 - Prsentation gnrale de la classe istream

ertannoc ne tnem moc snordnerppa suon siuP .)4 ed erbmon ua( stib stner ffid sec ed noitac -i fingis al tse elleuq riov drobad tuot snolla suoN .tol f el rus snoitarpo sed tnemeluord siav -uam ud uo nob ud etpmoc erdner ed te mrep lI .tolf ud ruerred tutats el e mmon nol euq ec tnamro f ,reitne nud stib ed elb mesne nu icossa tse eitros ed uo ertned tolf euqahc

. sellennoitceridib seitros-sertne sed resilar ed te mrep ic-elleC .maertso ed te maertsi ed sio f al tnatirh ,maertsoi essalc enu issua etsixe li ,rueugir etuot nE

.)tol f el rus erutcel eniahcorp enud srol unetbo uaevuon cnod ares li( tol f ud eriartxel snas siam ,nrecnoc tol f el rus elbinopsid ertcarac niahcorp el tinruo f iuq )( keep ; nnod ertcarac nu nrecnoc tol f el snad re yovner ruop )c rahc( kcabtup : eriatilitu ertcarac serb me m snoitcno f xued tnemelag etsixe li ,maertsi essalc al snaD

.etir w noitcno f al ed euqirt m ys elr el areuoj daer noitcno f a L .reihci f el snad tnerugi f selleuq sellet snoita mro fni sel erio m m ne tnaipocer ne erid--tsec ,noit -amro fsnart enucua essibus en elleuq snas ,)erianib( eturb emrof suos reihcif nud noit - a mr o f n i e n u r e d c c a ar et i a h u os n o l e u qsr o l el b as n e ps i d n i ar er v as n o it c n o f e tt e c , t i a f n E .er io m m ne i n , to l f el ru s in ,tneivretnin enahc ed nif ed ertcarac nucua ,ertuo nE .reilucitrap ruetimild ertcarac in ruetaraps in etissecn en daer ,sio fetuoT .enilteg noitcno f al ceva tios ,>> ruetarpol ceva enahc enud erutcel al ceva tios iolp me elbuod eria f relb mes tuep noitcno f ette ,erocne L .t esserdal ed ritrap aregnar sel te sertcarac 5 nic rus aril
cin.read (t, 5) ;

: ceva ,elp mexe raP .ennod rueugnol ed sertcarac ed enahc enu ruop daer resilitu tuep no ,ertcarac nu rinetnoc sruojuot tuep tetco nu e mmoC .rdisnoc ertned tol f el rus stetcod etius enu eril ed te mrep daer noitcno f a L
2.4.1 Cas des caractres

484

3 Statut derreur dun flot


e uqrameR

2.5 Quelques autres fonctions 2.4 La fonction read


2.4.2 Autres cas

: n oi tc ur ts ni l

Les flots CHAPITRE 22

char t[10] ;

.vitca tse tibdab tib el is erid--tsec ,rtla tse tolf el is )1( iarv ruelav al tinruo f : )( dab . v it ca ts e tibfoe tib el is erid--tsec ,ertnocner t a reihci f ed ni f al is )1( iarv ruelav al tinruof : )( foe : )maertso ed te maertsi ed cnod ,soi ed( serb me m snoitcno f 5 etsixe li ,trap enuD .ruerred stib sec ed sniatrec ed ruelav al rei fido m ed tnettemrep iuq sellec ; r u err e d s ti b st n er f fi d s es e d r u e l a v al ,t i a f n e , er i d- -t s e c ,t o l f n u d r u err e d t u t a t s e l er t a n n o c e d t n et t e mr e p i u q s el l e c : s n o i t c n o f e d s e ir o g t a c x u e d et si x e lI
3.2.1 Accs aux bits derreur

.ruerred stib sec rus rigad tnattemrep snoit -cno f sed etsixe liuq riov snolla suon ; orz simer t sap an tnadnopserroc ruerred tib el ; )! ios ed av iuq ec( egirroc t sap an ruerred noitidnoc al : euq tnat rituoba tuep en noitarpo enucua ,ruerred tat nu snad tse tol f nuuqsro L .)!essissur elleuq niatrec erocne sap tsen li sia m( vitca tse tibdoog is euq rituoba arruop en eitros-ertned noitarpo eniahcorp al euq erid tuep no ,e mm eD .vitca tse tibfoe uo tibdoog stib sed nul euqsrol issur a eitros-ertned noitarpo enuuq erid tuep nO .vitca tsen stib ses ed nucua euqsrol ruerred tutats el riova tiod euq ruelav al dnopserroc iuq ,)0 tiaf ne tnalav( tibdoog etnatsnoc enu etsixe li ,sulp eD .vitca tse tibdab euqsrol em m ed sulp av nen li ; tol f el rus eudrep tnemeller t an noita mro fni enucua ,vitca tse tibliaf euqsro L .ertned stol f sel ruop euq etsixen tibliaf te tibdab ertne ecner ffid a L .elbarpucrri tat nu snad tse tol f el euqsrol vitca tse tib ec : tibdab ; rituoba tuep en eitros-ertned noitarpo eniahcorp al euqsrol vitca tse tib ec : tibliaf ; elbinopsid ertcarac nucua sulp an tnadnopserroc tolf el is tid tne mertua ,etnietta t a reihci f ed ni f al is vitca tse tib ec : tibfoe : ed tigas lI .)1 ( vitca tse lues iul te tnad -nopserroc tib el euqsrol noitseuq ne reitnel rap esirp ruelav al dnopserroc setnatsnoc sec ed enucahC .maertso te maertsi sessalc xued sel tnevird tnod ,soi essalc al snad seralcd setnatsnoc sed rap eini fd tse reitne nud nies ua ruerred stib stner ffid sed noitisop a L

.tolf nud noitasilitul rei filpmis ed te mrep ! te )( sruetar -po sed noitinifdrus al euq snorertno m suon ,ni fnE .rei fidom al ,tnahc sac el ,te ruelav al
485

3.2 Actions concernant les bits derreur 3.1 Les bits derreur
3 - Statut derreur dun flot

.erilucitrap noitacifingis ed sap cnod an elle te esicrp sap tsen etcaxe ruelav aS .2 .maertso te maertsi tnetirh tnod ,soi ed erbmem nud tigas liuq sulp snoresicrp en suon ,siamrosD .1

.xua f ruelav al a )( doog is erid--tsec ,eriartnoc sac el snad )xua f( ellun ruelav enu ennerp .iarv ruelav al a )( doog is erid--tsec ,vitca tsen ruerred stib sed nucua is ,)iarv( ellun non ruelav enu ennerp ) lf ( : tol f nu engisd lf is ,euq erinam ed ini fdrus tse )( ruetarpol ,tne msicrp sulP .! te )( sruetarpo sed soi essalc al snad ,noitini fdrus al sruocer a no ,eria f ec ruoP .)xuaf uo iarv( euqigol ruelav enu e mmoc tnardisnoc el ne tolf nu retset ed elbissop tse li ,2.2 ehpargarap ud euqra mer al snad uqov jd snoval suon e mmoC
2

.noitarpol ed tnemeluord ud udner etpmoc ed esiug ne ruerred stib sel revitca riovuop ed euqitarp ares li ,)sessalc( sep yt serporp sov ruop >> te << sruetarpo sel zerini fdrus suov euqsro L

: i sn i a tn a d c -orp ne ,etatsdr leppa eria f ed ti ffus li ,sertua sel rei fido m snas tib ec revitca etiahuos nol iS .orz stib sertua sel suot arttem te lf tolf ud ruerred tutats ud tibdab tib el arevitca : n oi t c ur ts ni l ,t ol f n u e n g is d l f i s , e l p m e x e r a P . s o i e s s a l c a l e d s ei n i f d r p s e t n a t s n o c s e l t n a s il it u n e t n e m u gr a t e c e d r u e l a v a l tini fd no ,larng nE .tnemugra ne einruo f ruelav al tnadnopserroc ruerred stib sel evitca ) 0 = i t ni ( r a e l c d i o v : ett-ned raelc erbmem noitcno f a L
3.2.2 Modification du statut derreur
fl.clear (ios::badbit) ;

.ruerred tutats ud ruelav al tnadnopserroc reitne nu ruoter ne tinruof )( etatsdr erb mem noitcno f al ,trap ertuaD . vi t c a ts e n r u err e d t ut at s u d s ti b s e d n u c u a is er i d- -ts e c ,iarv ruelav al an setnedcrp snoitcno f siort sed enucua is )1( iarv ruelav al tinruof : )( doog ,vitca tse tibliaf tib el is )1( iarv ruelav al tinruo f : )( liaf
1

486

3.3 Surdfinition des oprateurs () et !


e uqrameR
Les flots CHAPITRE 22
fl.clear (ios::badbit | fl.rdstate () ) ;

.t ol f n u d t at l e d n oi ts e g e d sl i t u o s e d n o it as il it u d el p m e x e nu e mmoc rdisnoc ert tuotrus arved elpmexe tec euq etros ed ,senucal ed erocne erf fuos liuq snorrev suoN .5 ertipahc ud 3.6.2 ehpargarap ud em margorp ud snes ec snad noitat -pada enu snosoporp suov suoN .serueirtlu serutcel sel reuqolb tianev edilavni ertcarac nu s e l l e u q s e l s n a d s n o i t a u t i s s e l r e r g s n o v u o p s u o n , n i c t o l f u d t a t l t n ai f i d o m n e t e t n a t s et n E

: recalpmer tuep : is ni A

.i ar v r u e l a v a l a )( d o o g is erid--tsec ,vitca tsen ruerred stib sed nucua is )iarv( ellun non ruelav enu ennerp ; x u a f r ue la v al a )(doog is erid--tsec ,vitca tse ruerred stib sed nu is )xua f( ellun ruelav enu ennerp lf ! : tol f nu engisd lf is euq erina m ed ini fdrus tse ! ruetarpol ,e mm eD
if (fl.good () ) ...

: recalpmer tuep
if (fl) ...

3.4 Exemples

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

#include <iostream> using namespace std ; main() { int n ; char c ; do { cout << "donnez un nombre entier : " ; if (cin >> n) cout << "voici son carre : " << n*n << "\n" ; else { (cin.clear()) ; cin >> c ; } } while (n) ; }

if (! flot.good () ) ...

if (! flot ) ...

nombre entier carre : 144 nombre entier nombre entier nombre entier nombre entier

: : : :

: 12

x25 voici son carre : 625 &&2 donnez un nombre entier : voici son carre : 4

: is ni A

3 - Statut derreur dun flot

487

488

Les flots CHAPITRE 22

donnez un nombre entier : 0 voici son carre : 0

: 5 ertipahc ud 2.6.2 ehparg - ara p u d e m mar g or p e d el bar a p m oc n o it at p a d a e n u ti ari u d n oc i o u q i ci o v , f i ta ci d ni ert i t ...rerisd essial ruetasilitul ceva eugolaid el sia m , e u q o l b d ts e n oi t a u tis a l , n oi t u c x e d el p m e x e l ert n o m e l e m m o C . er ut c e l al s n o n al er suon te raelc ed leppa rap tol f el snouqolbd suon ,)egacolb ud elbasnopser edilavni ert -carac ua tnadnopserroc( ertcarac nu tne melleici fitra snosil suon ,uqolb tse tol f el euqsro L
#include <iostream> using namespace std ; main() { int n = 12 ; char c = a ; char cc ; bool ok = false ; do { cout << "donnez un entier et un caractere :\n" ; if (cin >> n >> c) { cout << "merci pour " << n << " et " << c << "\n" ; ok = true ; } else { ok = false ; cin.clear() ; ; cin >> cc ; // pour lire au moins le caractere invalide } } while (! ok) ; } donnez un entier et un caractere : 12 y merci pour 12 et y donnez un entier et un caractere : &2 y donnez un entier et un caractere : merci pour 2 et y donnez un entier xx12 donnez un entier donnez un entier 12 x merci pour 12 et et un caractere : et un caractere : et un caractere : 1

edilavni ertcarac nu retuas ruop tolf nud tatl ed noitseG

edilavni ertcarac ed sac ne einifni elcuob enu retiv ruo P

.)tne mug -ra rei merp ne uer( nrecnoc tol f ua ecner fr al tnemeriotagilbo ares ruoter ed ruelav a L .2
istream & operator >> (ostream &, & type_classe) ostream & operator << (ostream &, expression_de_type_classe)

: uo

: e mr o f a l e d e p y t o t or p n u t n a y a t e e nr e c n o c e ss a l c a l e d s e i m a u o s e t n a d n e p d n i s n o i t c n o f e d c n o d ar i g a s l I .)++C ceva seinruof tnos iul iuq sessalc sec rei fido m sulp tuep en ruetasilitul rac ,maertso uo maertsi essalc al ed erbmem noitcno f enud emro f al suos rini fdrus sel ,esab ed sep yt sed sac el snad e mmoc ,sulp tuep en nouq zeton( enrecnoc essalc al ed erb me m noitcno f enud e mro f al suos rini f -drus sel ed ehcp me iuq ec ,tnemugra rei merp ne tol f nu riovecer tneviod sruetarpo seC .1 : stnavius stniop sed etp moc rinet ed ti ffus li ,eria f ec ruoP .ruetasilitul rap rc essalc ep yt leuq etropmin ruop sinifdrus ert tnevuep ,esab ed sep yt stner ffid sel ruop maertso te maertsi sessalc sed nies ua sini fdrus jd ,>> te << sruetarpo xued se L

.noitacilppad elpmexe nu retnesrp ned tnava ,noitini fdrus ettec resilar ruop erv -ius edohtm al renimaxe drobad snolla suoN .src e m m-iul a liuq essalc sep yt sed ruop ruetasilitul rap sinifder ert tnevuep >> te << sruetarpo sel ,tid jd snoval suon em moC

. eri o m m ne egata mro f nud siaib el rap ,noitasilitu nos ed reivalc ua engil enud erutcel al tnas -inorhcn ysd ne setnasia fasitas sulp snoitulos sed snoretnesrp suon ,82 ertipahc ud 2.7 ehp -argarap uA .egahci ffa te erutcel ertne emsinorhcn ys ed euqnam ed iulec sap siam ,edilavni ertcarac el rus egacolb ed emlborp el euq ici lgr snovan suon ,elarng erina m enuD . t ne m -medcrp euq elbarga sniom erocne tse noitautis al euq tnertnom noitucxed selpmexe se L
489

4.1 Mthode

4 Surdfinition de << et >> pour les types dfinis par lutilisateur


4 - Surdfinition de << et >> pour les types dfinis par lutilisateur

.tnemmedcrp euq euqramer emM .2 .ecnerfr rap uo ruelav rap eriaf es tuep noissimsnart al ,icI .1
#include <iostream> using namespace std ;

.s er -itne sruelav sed ertuad te trap ed ,seriatne mlppus scnalb secapse sed tne melleutnev ceva > r e it n e ,r ei t n e < : emro f al suos )erutirc neuq erutcel ne neib issua( sruojuot etnesrp es tniop ep yt ed ruelav enuuq snoresoppus suoN
class point { int x , y ; ..... } ;

: sertipahc stnedcrp sel snad rtnocner tnevuos snova suon euq tniop ep yt el ruop >> te << sruetarpo sel ini fdrus snova suon leuqel snad e mmargorp nu icioV

.t n av i us elp me xe l ert n o m e uq ec ts e C .t o l f u d ta t l r us e c ne uq sn o c ne ri g a d t e ,s ec n eg i xe se ni atr ec d nop r e ul n o it a mr o f ni l euq rerussas ed elitu tnevuos ares li ,)ertned tol f( >> ed noitini fdrus al ed sac el snaD

: a mhcs ec tnorvius >> ed snoitini fdrus sel setuot ,e m m eD

: a mhcs ec tnorvius << ed snoitini fdrus sel setuot euq erid tuep no ,elarng erinam enuD
490
Les flots CHAPITRE 22

4.2 Exemple
e uqrameR
istream & operator >> (istream & entree, type_classe & objet2) { // Lecture des informations correspondant aux diffrents membres de objet // en utilisant les possibilits classiques de >> pour les types de base // cest--dire des instructions de la forme : // entree >> ..... ; return entree ; } ostream & operator << (ostream & sortie, type_classe objet1) { // Envoi sur le flot sortie des membres de objet en utilisant // les possibilits classiques de << pour les types de base // cest--dire des instructions de la forme : // sortie << ..... ; return sortie ; }

4 - Surdfinition de << et >> pour les types dfinis par lutilisateur

491

class point { int x, y ; public : point (int abs=0, int ord=0) { x = abs ; y = ord ; } int abscisse () { return x ; } friend ostream & operator << (ostream &, point) ; friend istream & operator >> (istream &, point &) ; } ; ostream & operator << (ostream & sortie, point p) { sortie << "<" << p.x << "," << p.y << ">" ; return sortie ; } istream & operator >> (istream & entree, point & p)1 { char c = \0 ; float x, y ; int ok = 1 ; entree >> c ; if (c != <) ok = 0 ; else { entree >> x >> c ; if (c != ,) ok = 0 ; else { entree >> y >> c ; if (c != >) ok = 0 ; } } if (ok) { p.x = x ; p.y = y ; } // on naffecte p que si tout est OK else entree.clear (ios::badbit | entree.rdstate () ) ; return entree ; } main() { char ligne [121] ; point a(2,3), b ; cout << "point a : " << a << " point b : " << b << "\n" ; do { cout << "donnez un point : " ; if (cin >> a) cout << "merci pour le point : " << a << "\n" ; else { cout << "** information incorrecte \n" ; cin.clear () ; cin.getline (ligne, 120, \n) ; } } while ( a.abscisse () ) ; }

)p & tniop ,eertne & maertsi( >> rotarepo::dts & maertsi )p & tniop ,eertne & maertsi( >> rotarepo::dts & maertsi : noaf ettec ed sett-ne sel tnavirc ne ,dts rap >>rotarepo te <<rotarepo smon sel exi frp nouq ,trot ,tneriuqer snoitatnemlpmi seniatreC .1

.maertso te maertsi sessalc sel tnevird tnod soi essalc al snad euvrp tse noitamrofni ettec ,rueugir etuot nE .1

enu rini fd ed etiahuos el iuq iulec erttemrep ed tse egatnava ertua nU. tua fd rap tnemetrop - moc nud etnetnoc es liuq tnat ,egatamro f tcepsa tec tnemelatot rerongid ruetasilitul te m -rep elleuq tse ++C rap e yolp me edohtm al ed segatnava sed nU . egatamro f ed tutats nos ,nnod tnemo m nu ,tse leuq tnai ficps )sruetacidni( snoitamro fnid elbmesne nu ecnenamrep ne evresnoc ,maertso uo maertsi essalc ed tejbo euqahc erid--tsec ,tol f euqahC .egatamro f ec rerg ruop ++C rap eivius ehcramd al l i a t d n e r ei d u t i ci s n o ll a s u o N . ei tr o s e d t o l f n u r u o p e u q e r t n e d t o l f n u r u o p n e i b issua ,snoita mro fni sed egata mro f el rus noitcad stilibissop seuqleuq tnesrp snova suoN
1

.s e ti o l p x e ert u p r i o v a s a p en ed tneuqsir iuq snoita mro fni sel retuas ruop enilteg resilitud tnava tol f ud tatl orz ertte mer rap snonemmoc suon ,nic rus ruerred sac ne ,niam noitcno f al snad euq zetoN . e l u or d l a m ts es er ut c e l al e u q r i o v as s a p ti arr u o p e n r u et asi l it ul , > u o < s er t -carac sed nul sap evuort en nol euqsrol tibdab tib el revitcad nios sap snoinerp en suon iS . v u or t t sap an ni f ed > ertcarac el euq srola setnasop moc xued sel rei fidom ed erocne uo ,ertual r ei f i d o m s n as t n i o p u d s e t n as o p m o c s e d e n ul r ei f i d o m e d , et l p m o c ni n oi t a mr o f n i d s a c ne elpmexe rap ,etiv aleC .nrecnoc tniop el snad seul isnia sruelav sel snor fsnart suon euq l u or d n e i b ts e s t u o t e u qsr ol e u q ts e n e C .s e l a c ol s el b a ir a v s e d s n a d t n i o p n u se v it al er s n o it a mr o f ni s e l s e t u ot dr o b a d t u o t er il e d ni os sir p s n o v a s u o n , > > e d n oi ti n i f dr us a l s n a D t n i o p e s s al c a l r u o p < < r u e t a r p o l e d n o it i n i f d r u S
point a : <2,3> point b : <0,0> donnez un point : 2,9 ** information incorrecte donnez un point : <2, 9< ** information incorrecte donnez un point : <2,9> merci pour le point : <2,9> donnez un point : < 12 , 999> merci pour le point : <12,999> donnez un point : bof ** information incorrecte donnez un point : <0, 0> merci pour le point : <0,0> Press any key to continue

492

5 Gestion du formatage
Les flots CHAPITRE 22

. serianib snoitac -idni sec euq snoitamrofnid sepyt sertuad ,iul tnauq ,etropmoc tolf nud egatamrof ed tutats el ,suossed -ic snorrev el suon emmoc siaM .tolf nud ruerred tutats el tnanetnoc reitnel ruop euq emsinacm emm el l evuorter nO .1

.ec apse n u tse e ga ssi lp m er e d ertcarac ec ,tua fd rap ; tua fd rap tirabag el sap esilitun nol o sac el snad ,tirabag n u r et l p m o c r u o p y ol p m e er tc ara c el er i d-- tse c , e g ass il p m er e d er tc ara c e L .)l a m ic d tn i op el srpa s h ci f f a ser f fi h c ed erb m o n el sr ol a et -nesrper elle( selleitnenopxe uo setnattol f snoitaton sed enul uo )s fitaci fingis ser ffihc ed erb mon el srola etnesrper elle( tua fd rap noitaton al esilitu nol euq tnavius etner - f f i d n oi t a ci f i n g is e n u e d s s o p e ll E . e itr os e d t ol f n u d n o it a n i ts e d ) e l b u o d g n o l u o elbuod , taolf( tnattol f ep yt ed snoita mrofni sel euq enrecnoc en elle : noisicrp a L .) g n i r t s e p yt e d u o C e l yts e d( se n a hc sel uo sertcarac sel euq enrecnoc en elle ,ertned tol f nu ruop ,trap ertuaD .noitam -ro fni enud )erutirc uo erutcel( tre fsnart el srpa ,)dradnats tirabag : ei fingis iuq( orz ebmoter elleuq snoleppar ; wtes a einruo f ruelav al ed tigas li : tirabag e L : se t na v i us s et n aru o c sr u el av s el t na si crp s e uqir m u n sr ue la v se l ; x ua f /iarv e mro f al ed egatamro f ed snoitacidni sel setuot ,etros euqleuq ne ,evuort y nouq erid tuep no ; erilucitrap noitaci fingis enu icossa tse tib euqahc leuqel snad ,tatd tom nu : t n e m el l e i t n ess e etr o p m o c t o l f n u d e g at a mr o f e d t u t a ts e L
1

.) t a mr o f e d s e d o c e d n oi sse cc us e n u d , ser t u a ert ne , s o p m oc ta mrof nud emro f al suos( seirporppa egatamrof ed snoitacidni sel eitros-ertned noitarpo euqahc ruop rinruo f tiod no ,te ffe ne ,serinred sec snaD .fnacs uo ftnirp euq sellet C snoitcno f sel rap e yolp me ellec ed etner ffid srt tse redcorp ed noa f etteC
C nE

.trap ertuad reifidom el ,trap enud ertannoc el tuep no t n e m m o c r er t n o m e d t n a v a t o l f n u d e g a t a mr o f e d t u t ats el t n as o p m o c st n e m l st n er f f i d sel reidut rap snorecnemmoc suon ,tol f nud ruerred tutats el ruop tia f snoval suon em moC .e ti u s a l r ap re ic -uos nes riova sulp en ed te ennod noitacilppa enu irporppa tamro f nu setuot ruop siof
493

5.1 Le statut de formatage dun flot


5 - Gestion du formatage

- m o c n u t n a y o vr p n e t u gi b ma l e v l + + C ,is n ia sa p a v n e n li S . f it ca t i b n u d s u l p r i o v a y sap tuep en li ,)dleiftaolf ,dleifesab ,dleiftsujda( stib ed spmahc siort sed nucahc ed nies uA
egatamrof ed tutats ud tatd tom eL
rredts uo tuodts rus erutirc euqahc srpa snopmat sel ediv erutirc euqahc srpa snopmat sel ediv )ei tros ne( e xif tniop noi tat on )eitros ne( euqifitneics noitaton )eitros ne( + engis ud sdcrp sfitisop serbmon egahciffa )ei tros ne( seluc sujam ne axeh ser tca rac egahci ffa )eitros ne( lamicd tniop egahciffa )eitros ne( esab ed ruetacidni egahciffa elamicdaxeh noisrevnoc elat co nois revno c elamic d nois revno c esa b uo engis srp a ega ssilpme r )ei tros ne( etiord egarda c )ei tros ne( ehcuag egarda c )er tne n e( scnalb seca pse sed tua s oidts::soi fubtinu::soi dexif::soi cifitneics::soi sopwohs::soi esacreppu::soi tniopwohs::soi esabwohs::soi xeh::soi tco::soi ced::soi lanretni::soi thgir::soi tfel::soi swpiks::soi dleif tsujda :: soi dleifesab::soi dleif taolf :: soi

no itaci fingi S

tib ud moN

)e tsixe li s( pmahc ed moN

. t na d n o pserr oc t i b ed pmahc ud mon ud ,tnahc sac el ,sengapmocca ,setnatsnoc setner ffid sed etsil al icioV .)s p m a h c s er t u a s e d st i b s e d r u e l a v al e d r e p u c c o r p e s r i o v a s n as , p m a h c n u s n a d r ei f i d o m ti b e l r et i c t u e p n o( p m a h c n u d st i b s e d n u d n oi t -alupinam al ,serbmem snoitcno f seniatrec ed sac el snad ,tnetilica f sliuq snorrev suoN .to m e m m ec e d ni es ua s i ni f d t n os )s i ort e d er b m o n ua( st i b e d s p m a hc s ni atr ec ,s ul p e D .tatd to m nu tnemetcerid reuqirba f tios ; tatd tom ud nies ua tnadnopserroc tib el rei fitnedi tios : ri vr e s t u e p s et n ats n o c s e c e d e n u c a h c e d r u e l a v al , er o c n e i c I .) 1 ( vi t c a ts e l u e s iul te tnadnopserroc tib el euqsrol reitne tec rap esirp ruelav al dnopserroc setnatsnoc sec ed enucahC .soi essalc al snad eini fdrp etnatsnoc enu rap rper tse tib euqahc leuqel snad ,reitne nud mro f tse egata mro f ed tutats ud tatd tom el ,tol f nud ruerred tutats el e mmoC

494

5.2 Description du mot dtat du statut de formatage


Les flots CHAPITRE 22

tnadnop serro c tib el evit casd /evi tcA tnadnop serro c tib el evit casd /evi tcA tnadnopserroc tib el evitcA tnadnopserroc tib el evitcA tnadnop serro c tib el evit casd /evi tcA tnadnopserroc tib el evitcA tnadnopserrroc tib el evitcA tnadnopserroc tib el evitcA

ei tros ei tros ei tros ei tros eitro s/e rtne eitro s/e rtne eitro s/e rtne eitro s/e rtne

tniopwoh son/ tniopwohs e sabwoh son/e sabwohs de xif /cifi tneics lanretni/esab /tfel ahplaloobon/ahplaloob tco xeh ced

noitc A

noita si lit U

ruel talupina M

: sruetalupinam sec ed etsil al icioV .>> uo << sruetarpo sel etius ed sio f srueisulp reuqilppad issua xue tnette mrep sli ,reilucitrap nE .erttemsnart snoitamro fni sel euq erinam emm al ed retiart sel ed te mrep iuq ec ,noitca ruel srpa unetbo tolf el tatlusr e mmoc tnessinruo f slI .ertned tol f nu ruop : isnia uo ,eitros ed tol f nu ruop : isnia tnesilitus iuq sruetarpo sed cnod tnos eC .se ll e u di v i d n i s e dra ge v ua s e d tejbol eria f ,tnahc sac el ,cnod tneviod ic-sellec ; tne melabolg tia f es seuqir mun sruelav xua sccaL .)te mrep en ruetalupinam nucuauq ec( tnemerueirtlu reruatser el riovuop ruop "redragevuas " el ed tne mmaton tnortte mrep serb me m snoitcno f seniatrec euq snorrev suoN .tatd tom el rus tnemelabolg riga tuep no ,ertuo nE .)egassilpmer ed ertcarac ,nois -icrp ,tirabag( seuqir mun sruelav sel rus uo tatd tom el rus aretrop noitcal ,sac el tnaviuS .)r u et a l u p i na m e d e mr o f s u o s t n el a vi u q nucua tnatrop moc en serbme m snoitcno f sed etsixe liuq sio fetuot snorrev suon( seuqirtm -arap sruetalupina m xua troppar rap setnadnoder tnemelarng tnos serinred seC .maertso uo maertsi sessalc sed serbmem snoitcno f sed resilitu alec ruop issua tuep no siaM .egatam -r o f e d t ut at s e l r us r i g a d t n et t e mr e p sr u e t al u pi n a m s e c , z e t u o d n e s u o v s u o v e m m o C .) n o n uo euqirtmarap( ruetalupinam ed noiton al tiudortni tno 2 te 1 sehpargarap sed selpmexe se L
5.3.1 Les manipulateurs non paramtriques
flot << manipulateur flot >> manipulateur

.stnattol f sed egahci ffal ruop tua fd rap tnemetropmoc el evuoter nouq dleiftaolf p mahc ud stib xued sel orz tnattemer ne tsec euq zetoN .)cifitneics ,ced ,thgir( tua fd rap tne metrop
495

5.3 Action sur le statut de formatage


5 - Gestion du formatage

.tnemugra ruel rap si f -icps stib sel suot rus tnessiga sgalfsoites te sgalfsoiteser sruetalupina m sel euq neib zetoN
seuqirtmarap sruetalupinam seL
tiraba g el tinif D st nat tolf serb mon sed noisicr p al tinif D egassilpmer ed ertcarac el tinifD )sertua sel reifidom sna s( tne mugral rap sificp s stib sel suot evi tc A )s ertua sel reifido m snas ( tne mugral ra p s ngisd stib sel suo t o rz teme R noi srevno c ed esa b al tinif D ei trdo S/er tn E ei tro S ei tro S/er tn E ei tro S/er tn E ei tro S/er tn E ei tro S/er tn E ) tni( wte s )tni( noisice rpte s )tni( lliftes )gnol( sgal fsoite s )gnol( sgalfsoiteser )tni( esabtes

e lR

noi tasi li tU

ruetalupina M

: seuqirtmarap sruetalupinam sec ed etsil al icioV .pinamoi reihci f ud noisulcnil tnetissecn sliuq ecnerf fid ettec ceva ,seuqirt marap non sruetalupinam sel em moc tneiolp mes slI
ostream & manipulateur (argument)

: uo

: e mr o f al e d ts e e t t- n e l t n o d s n o i t c n o f s e d t n os s e u q irt m ar a p sruetalupinam sec ,tia f nE .seshtnerap ertne tne mugra nud emro f al suos inruo f tse ruel iuq ertmarap nu tnetrop moc sli ,sio f ettec ,siaM .noitaci fidom srpa tol f el ruoter ne tnassinruo f t e t o l f n u r us t n as si g a sr u et ar p o s e d er i d- -ts e c ,sr u e t a l u pi n a m s e d t n e m e l a g c n o d t n os e C
seuqirtmarap non sruetalupinam seL
nopmat el ediv )0\( C enahc ed nif ed ertcarac nu ersnI nopmat el ediv te engil ed tuas nu ersnI scnalb sertcarac sed tuas tib el evitca tnadnopserroc tib el evitcasd/evitcA tnadnopserroc tib el evitcasd/evitcA tnadnopserroc tib el evitcasd/evitcA eitros eitros eitros er tne eitros er tne eitros hsul f s dne l dne sw esacreppuon/esacreppu swpi kson /swpik s sopwoh son /sopwoh s

noi tcA

496

5.3.2 Les manipulateurs paramtriques

Les flots CHAPITRE 22

istream & manipulateur (argument)

noi tasi li tU

rue ltalupina M

.vitca tiat uluov tib el lues ,)>h.maertsoi< ceva uo( emron al tnavad ++C ed snoisrev sel cevA .1

. t n e m u gr a e u q i n u n o s r a p s n n oi t -ne m stib sel tnavitcasd ne ,ftes ed noisrev eri merp al ed esrevni elr el euoj noitcno f etteC )gnol( ftesnu diov

ftesnu
: i s n i a r e d c or p e d ar i f f u s s u o v l i ,t i o s elleuq elleuq ,noitaton enneicnal rinever ruoP .elamicdaxeh noitaton ne zessap suov : c ev a ,tol f nu tse tolf is ,elp mexe raP .serueirtlu snoitaruatser sed ruop sedragevuas sed te mrep aleC .nrecnoc stib ed pmahc ud ruelav enneicnal ruoter ne tinruo f ftes ed noisrev etteC .dleifesab::soi pmahc ud stib sertua sel tnavitcasd ne tco::soi tib el evitca
flot.setf (ios::oct, ios::basefield) base_a = flot.setf (ios::hex, ios::basefield) ; flot.setf (base_a, ios::basefield) ;

: tol f nu engisd tolf is ,elp mexe raP .tne mugra dnoces el rap ini fd stib ed pmahc ud nies ua tnemelues ,tnemugra reimerp el rap si ficps stib sel evitca leppa noS )gnol ,gnol( ftes gnol .s a c e c s n a d e u qi t - ar p s u l p e l v r es f t e s e d e m r o f e m i x u e d a l , s u o s s e d - i c r i o v e l s n o l l a s u o n e m m o C . vi t c a ert-tuep tiares xeh::soi uo ced::soi stib sertua sed nuuq srola ,tco::soi tib el tiarevitca no
1

: ceva ,tol f nu tse tolf euq tnasoppus ne ,isniA .stib sertua sel sap ei fidom en noitcno f ettec ,sgalfsoites ruetalupinam el emmoc ,euq neib zetoN .e g at a mr o f e d t a t d t o m u d ruelav enneicnal ruoter ne tneitbo nO .tnemugra nos rap si ficps stib sel evitca leppa noS )gnol( ftes gnol : s n oisr ev x ue d et si xe l I .e in i f dr us t ia f ne ts e el lE . e ga ta mro f e d t at d to m e l re i fi d o m ed te mr ep n oi tc n o f e tt eC

.htdi w te noisicerp ,llif ,ftesnu ,ftes : sertnocner erocne sap snovan suon euq serb me m snoitcno f qnic etsixe li ,maertso te maertsi sessalc sel snaD
5.3.3 Les fonctions membres

flot.setf (ios::oct)

ftes

5 - Gestion du formatage

497

.tirabag ud elleutca ruelav al ruoter ed ruelav em moc tinruo f noisrev etteC )(htdi w tni : s n oisr e v xued etsixe ne lI .einifdrus tne melag tse ellE .tirabag el rus rigad temrep noitcno f etteC
ht d i w

: isnia tnadcorp n e , t i o s e l l e u q e l l e u q , e n n e i c n a l ri n e v e r s i u p ) c e r p i c i ( n o i s i c r p e n i a t r e c e n u t n e m e r i a r -opmet resopmi elpmexe rap tuep no ,eitros ed tol f nu tse tolf iS .ruelav enneicnal ruoter ne tinruo f te ,tnemugra nos rap ei ficps ruelav al euqirmun noisicrp al ennod noisrev etteC )tni( noisicerp tni .euqirmun noisicrp al ed elleutca ruelav al ruoter ed ruelav em moc tinruo f noisrev etteC )( noisicerp tni : snoisrev xued etsixe ne lI .eini fdrus tne melag tse ellE .euqirmun noisicrp al rus rigad te mrep noitcno f etteC
no is ic erp

: isnia tnadcorp ne ,tios liuq leuq ,ertcar - ac ne ic n al re v u ort er s i u p ,e g ass il p m er e d er t cara c e m m oc * er t cara c e l t ne mer iar o p m et resopmi elpmexe rap tuep no ,eitros ed tol f nu tse tolf iS .ruelav enneicnal ruoter ne tinruo f te tnemugra nos rap ei ficps ruelav al egassilpmer ed ertcarac ua ennod noisrev etteC )rahc( llif rahc .egassilpmer ed ertcarac leutcal ruoter ed ruelav em moc tinruo f noisrev etteC )( llif rahc : snoisrev xued etsixe lI .eini fdrus tnemelag tse ellE .egassilp mer ed ertcarac el rus rigad temrep noitcno f etteC
ll i f

498

Les flots CHAPITRE 22

flot.precision (prec_a) ; int prec_a, prec ; .... fill (car_a) ; car_a = fill (*) ; char car_a ; ..... ....

prec_a = flot.precision (prec) ; // on impose la prcision dfinie par prec ..... // retour lancien caractre de remplissage // caractre de remplissage = *

// on revient lancienne prcision

.)4.6 ehpargarap ua euver ne setuot snoressap sel suon( seini fdrp setnatsnoc ed erb mon niatrec nu ,erocne l ,etropmoc soi essalc al : eritne etnatsnoc enu rap ini fd erutrevuod edom nu ; ) ser t cara c e d e n a h c e n u d e mr o f s u os( nre c n o c r ei h ci f u d m o n e l : stne mugra xued etissecn maertsfo essalc al ed ruetcurtsnoc e L .maertsoi reihci f ud sulp ne ,maertsf m mon ett-ne reihci f nu erulcnid etissecn essalc ellevuon ettec ed iolp meL .maertso ed tnavird essalc ,maertsfo ep yt ed tejbo nu rerc ed ti ffus li ,reihci f nu eitros ed tol f nu reicossa ruoP

.reici fnb srola tuep no tnod tcerid sccad stilibissop sel renimaxe te rinevrap y tnem moc rertno m suov av ehpargarap eC .reihcif nu icossa ert tiarruop tol f ec tne mmoc erid suov snas siam ,)5 te 3 sehpargarap( euqnocleuq tol f nu tnauqilppas snoitamro fni sed nnod snova suov suon te )tuoc te nic( sini fdrp stol f sed lrap snova suon ,iciuqsuJ

.neicnal euq stalusr se mm sel tinruo f em margorp uaevuon el ; senrecnoc snoitcurtsni xua stimil semmos suon suon ,icI .5.5.1 ehpargarap ua soporp jd esimer ceva noitarutcaf ed em margorp ud egahci ffad snoitcurtsni sel erircd noa f ertua enu snosoporp suov suoN
5.3.4 Exemple
// on revient lancien gabarit

: isnia tnadcorp ne tios liuq leuq ,neicnal rinever siup )bag ici( tirabag niatrec nu tnemeriaropmet resop mi elp mexe rap tuep no ,eitros ed tol f nu tse tolf iS .ruelav enneic -nal ruoter ne tinruo f te tne mugra nos rap ei ficps ruelav al tirabag ua ennod noisrev etteC )tni(htdi w tni
499

6.1 Connexion dun flot de sortie un fichier

6 Connexion dun flot un fichier


cout << setiosflags (ios::fixed) << setprecision (2) ; // notation flottante, precision 2 cout << setw(20) << "prix ttc = " << setw (12) << ttc << "\n" ; cout << setw(20) << "remise = " << setw (12) << remise << "\n" ; cout << setw(20) << "net a payer = " << setw (12) << net << "\n" ; int gab_a, gab ; ..... gab_a = flot.width (gab) ; ..... flot.width (gab_a) ; // on impose un gabarit dfini par gab

6 - Connexion dun flot un fichier

sreitned reihcif nud elleitneuqs noitarC


#include <cstdlib> // pour exit #include <iostream> #include <fstream> #include <iomanip> using namespace std ; const int LGMAX = 20 ; main() { char nomfich [LGMAX+1] ; int n ; cout << "nom du fichier a creer : " ; cin >> setw (LGMAX) >> nomfich ; ofstream sortie (nomfich, ios::out|ios::binary) ; // ou ios::out if (!sortie) { cout << "creation impossible \n" ; exit (1) ; } do { cout << "donnez un entier : " ; cin >> n ; if (n) sortie.write ((char *)&n, sizeof(int) ) ; } while (n && (sortie)) ; sortie.close () ; }

: dradnats ertnel rus tinruo f iul liuq sreitne serb mon ed etius enu ,ruetasilitul rap inruo f mon ed reihci f nu snad ,erianib emro f suos ,ertsigerne iuq telp moc em margorp nu icioV
: e i t r o s e d r u e l a v al t n a ni m a x e n e t n a d n o ps err o c t o l f ud ruerred tutats el ertannoc snorruop suon ,emm eD .serianib serutirc sed resilar ruop
if (sortie) ....

: er o c n e u o ,s e t a mr o f s e itr os s e d r esi l a r r u o p : e uq se ll et s n oi t -curtsni sed re yolpme snorruop suon ,eitros ed etnedcrp noitaralcd al srpa ,elpmexe raP .)maertsfo evird tnod( maertso essalc al ed stilicaf sel setuot leppa tnasia f ne tol f leuq etrop min ruop e mmoc eria f es tuep icossa tse iul iuq reihcif el snad erutircl ,maertsfo essalc ed tejbo nu tiurtsnoc sio f enU . er ut irc ne trevuo t arua liuq srpa ,tad.curt m mon reihci f ua icossa cnod ares eitros tejboL : )s ert u a sed setxet sreihci f sel tneugnitsid iuq stnemennorivne sel snad euq elitu tsen yranib::soi ertmarap el( maertsfo ep yt ud )eitros( tejbo nud noitaralcd ed elp mexe nu icioV
500
Les flots CHAPITRE 22
ofstream sortie ("truc.dat", ios::out|ios::binary) ; // ou seulement ios::out sortie << .... << .... << .... ;

sortie.write (.....) ;

: t n ed c r p e m m arg or p el rap rc euqnocleuq reihci f nud unetnoc el retsil ed temrep iuq telpmoc e mmargorp nu icioV .serianib serutcel sed resilar ruop : erocne uo ,setamro f serutcel sed resilar ruop : e u q s el l e t s n o it -curtsni sed re yolp me snoirruop suon ,eertne ed etnedcrp noitaralcd al srpa ,elp mexe raP .)maertsfi evird tnod( maertsi essalc al ed stilica f sel setuot leppa tnasiaf ne ertned tol f leuq etrop min ruop e mmoc eriaf es arruop icossa tse iul iuq reihci f el snad erutcel al ,maertsfi essalc ed tejbo nu tiurtsnoc sio f enU .erutcel ne trevuo t arua liuq srpa ,tad.curt mon ed reihcif ua icossa ares eertne tejbol : ) s er t u a s e d s e t x et sr e i h c i f s el t n e u g n it si d i u q s t n e m e n n or i v n e s e l s n a d euq elitu tsen yranib::soi ertmarap el ,erocne l( etnavius noitcurtsnil ceva ,elp mexe raP .erutrevuod edo m te reihcif ed mon erid--tsec ,tnem medcrp euq stne mugra se m m sel etrop moc ruet -curtsnoc e L .h.maertsoi reihci f ud sulp ne h.maertsf ett-ne reihci f el erulcni sruojuot tua f lI .maertsi ed tnavird essalc ,maertsfi ep yt ed tejbo nu sio f ettec erc nO .eitros ed tol f nu ruop silitu iulec eugolana emsinacm nu eiolpme no ,reihci f nu ertned tol f nu reicossa ruoP
ifstream entree ("truc.dat", ios::in|ios::binary) ; // ou seulement ios::in entree >> ... >> ... >> ... ; entree.read (.....) ;

.reihci f n u ts e e p y t e c e d t e j b o n u u q er i d sr u e l l i a d t i ar r u o p n O . t n a d n o ps er r o c r e i h c i f e l t n a i f i c -ps ne ,maertsfo ed tejbo nu sio f elues enu ne eralc d n ol euqsi up ,neir tse ne n li ,rO .reihci f nu tnemerueirtlu eicossa nol euq tol f nu drobad tuot eralcd nol euq tios ; r ei h ci f n u tr a p er t u a d , t ol f n u tr a p e n u d : s t e j b o d s e p y t x u e d e tsi x e li u q ti os : erd n et n e re ssi al t iar -ruop reihci f nu tol f nud ) noitaicossa uo( noixennoc emret el ,rueugir etuot nE

.l e us u t ol f n u r u o p s n o ire f el suon e mmoc eitros ed ruerred tutats el snonimaxe suon ,sruellia raP .ruetasilitul rap inruof r e i h c i f e d m o n u d r u e u g n o l a l r e t i m il r u o p w t e s r u et al u p i n a m u d s i vres s e m m os s u o n s u o N
501

6.2 Connexion dun flot dentre un fichier

#include <iostream> #include <fstream> #include <iomanip> using namespace std ;

e uqrameR

6 - Connexion dun flot un fichier

: stnemugra xued etropmoc s n o it c n o f x u e d s e c s e d e n u c a h c , t n e m s i c r p s u l P .) er ut ir c l r u o p r u et n i o p n u t e er u t c el a l ruop ruetniop nu etsixe liuq etros ed ,neis el edssop sessalc xued sec ed enucahc ,noitnetta( ruetniop ua ruelav eniatrec enu rennod ed te mrep )maertsfo ruop( pkees te )maertsfi ruop( gkees em mon erbmem noitcno f enu ,maertsfo te maertsfi sessalc xued sed enucahc snaD .ruelav as ed noitani mretd al uo ruet -niop ec rus noitcad stilibissop xua tia f ne cnod tnemusr es tcerid sccad stilibissop se L .t n e m m e d cr p ti a f s n o va s u o n e u q ec t sec ; l ei t ne u q s scca euqissalc nu esilar no ,ruetniop ec rus tnemeticilpxe sap tigan nol euqsrol ,isniA .sr fsnart stetcod erbmon ud tnemrcni tse ruetniop ec ,erutircd uo erutcel ed noitarpo euqahc srpA .erirc uo eril )ertcarac( n ia h cor p u d g n ar el t na si cr p er b m o n n u erid--tsec ,reihci f ec snad ruetniop nu rus tne melpmis tuot tnassiga ne reihci f ec tcerid scca nu resilar ed elbissop tse li ,reihci f nu tcennoc t a tol f nuuq sd ,++C nE
t etc o

. er u t - ir c n e t e e r u t c e l n e tr e v u o r i o v a l s r p a , t a d . c u r t m o n e d r e i h c i f u a h c i f t e j b o l e i c o s s a : elpmexe raP .maert -sfo uo maertsfi sep yt sel ruop e mmoc eluord es maertsf ep yt ed tejbo nud noitaralcd a L .suossed-ic snoni maxe suon euq tcerid sccal ed sac el snad euqitarp tro f rervas tuep aleC .reihci f emm nu ceva serutirc sed te serutcel sed siof al reutce ffed tnatte m -rep ,maertsfo te maertsfi sessalc xued sed evird ,maertsf essalc enu tne melag etsixe lI
fstream fich ("truc.dat", ios::in|ios::out|ios::binary) ;

sreitned reihcif nud elleitneuqs erutceL


const int LGMAX = 20 ; main() { char nomfich [LGMAX+1] ; int n ; cout << "nom du fichier a lister : " ; cin >> setw (LGMAX) >> nomfich ; ifstream entree (nomfich, ios::in|ios::binary) ; // ou ios::in if (!entree) { cout << "ouverture impossible \n" ; exit (-1) ; } while ( entree.read ( (char*)&n, sizeof(int) ) ) cout << n << "\n" ; entree.close () ; }

502

6.3 Les possibilits daccs direct


e uqrameR
Les flots CHAPITRE 22

: )ser i t ne sr u el a v e d e n ia zi d e n u etr o p m oc liuq snosoppus suon ,ici( 1.6 ehpargarap ud em margorp el rerc tiavuop euq xuec ed ep yt ud reihcif nud reitne leuq etropmin redccad tnattemrep emmargorp ed elp mexe nu icioV .)maertsfo ruop( pllet ed te )maertsfi ruop( gllet ed tigas lI .ruetniop ud etnaruoc noitisop al ertannoc ed tnattemrep noitcno f enu maertsfo te maertsfi sessalc sed enucahc snad etsixe li ,sruellia raP .)geb::soi ruelav al a tne mug -ra tec ,tuafd rap( reihci f ud ni f al troppar rap mirpxe tse tnemecalpd el : dne::soi ; elleutca noitisop al troppar rap mirpxe tse tnemecalpd el : ruc::soi ; reihcif ud tubd ua troppar rap mirpxe tse tne mecalpd el : geb::soi : soi snad seinifdrp sruelav siort imrap eisiohc eritne etnatsnoc enu ; tnemugra dnoces el rap esicrp enigiro enu troppar rap ,ruetniop ud tnemecalpd nu tnatnesrper reitne nu
503

#include <iostream> #include <fstream> #include <iomanip> using namespace std ; const int LGMAX_NOM_FICH = 20 ; main() { char nomfich [LGMAX_NOM_FICH + 1] ; int n, num ; cout << "nom du fichier a consulter : " ; cin >> setw (LGMAX_NOM_FICH) >> nomfich ; ifstream entree (nomfich, ios::in|ios::binary) ; // ou ios::in if (!entree) { cout << "Ouverture impossible\n" ; exit (-1) ; } do { cout << "Numero de lentier recherche : " ; cin >> num ; if (num) { entree.seekg (sizeof(int) * (num-1) , ios::beg ) ; entree.read ( (char *) &n, sizeof(int) ) ; if (entree) cout << "-- Valeur : " << n << "\n" ; else { cout << "-- Erreur\n" ; entree.clear () ; } } } while (num) ; entree.close () ; }

6 - Connexion dun flot un fichier

! erianib tse reihcif tuot etpmoc ud tuob uauq srolA .1

sertua s ed et x et

ed s re ihc i f se l tneugn its id

sec rus euq tia f el rap evito m tnemelapicnirp tia f ne tse noitcnitsid etteC .etxet ud e mmoc unetnoc nos rerdisnoc non uo etiahuos nol is rei ficps tuep no ,reihci f ud erutrevuol ed srol ,tnemsicrp sulp ; ) serianib sreihci f sio frap tnelleppa sliuq( )reilucitrap ne CP( stnemennorivne sniatrec euq snoleppaR

e uqrameR

reihcif nud erutrevuod sedom stnerffid seL


)suossed-ic euqramer riov( talsnart non erocne uo erianib edom ne trevuo tse reihcif eL .sertua sed setxet sreihcif sel tneugnitsid iuq snoitatnemlpmi sel snad tnemelues silitU
ppa :: soi

yranib::soi c nurt :: soi ppa :: soi tuo :: soi ni::soi

in

et a: :soi

snas vi tca ts e

tuo: :soi

) is eriotagilbo( udrep tse unetnoc nos ,etsixe reihcif el iS

)reihcif ed nif ne erutirc( sennod ed tuoja ne erutrevuO ) maer tsf o e ssalc al ruo p erio tagilbo( erutir c ne er utre vuO )maertsfi essalc al ruop eriotagilbo( erutcel ne erutrevuO

noi tcA

t iB

.| ruetarpol leppa eria f ed ti ffus li ,stib srueisulp revitca ruoP .soi essalc al snad seralcd s e t n a ts n o c s e d r a p ei n i f d ts e t i b e u q a h c t n a d n o ps err o c r u el a v a L . er i l u c itr a p n o it a c i fi n gi s e n u d n o pserr oc ti b e u qa hc le u qe l s na d , ta t d t o m n u ra p i n i f d t se er utr e v u o d e d o m e L .)maertsf ed issua cnod te( maertsfo te maertsfi sessalc sel rap setre ffo stilibissop sed elb mesnel ici reni maxe snolla suoN .reihci f nud erutrevuod sedom ed selpmexe seuqleuq rtnocner snova suoN

504

6.4 Les diffrents modes douverture dun fichier


sreitned reihcif nu tcerid sccA
: 0 : -3 : 7 : 15 essai.dat : 4 nom du fichier a consulter : Numero de lentier recherche -- Valeur : 6 Numero de lentier recherche -- Erreur Numero de lentier recherche -- Valeur : 9 Numero de lentier recherche -- Erreur Numero de lentier recherche

Les flots CHAPITRE 22

.etxet reihcif ed nif enu emmoc trpretni tse )62 lamicd edoc ed( Z/LRTC ertcarac el ,CP stnemennorivne sec snad euq zetoN .1

.82 ertipahc ud 7 ehpargarap ua setnesrp tnores sessalc seC .gnirts ep yt ed stejbo sed snad noita mro fnil revresnoc ruop )maertsgnirtsi te maertsgnirtso( setiudortni t tno ses - s a l c s e r t u a d , ) g n i r t s ( e n a h c e p yt i ar v n u d n o it c u d ort n il s i u p e D . e nr e c n o c n o it a mr o f n il revresnoc ruop )* rahc( C el yts ed senahc sed tnesilitu maertsrtsi te maertsrtso ,tia f nE .maertsrtsi ep yt nud t ol f n u r e s il it u d a l e c r u o p ti f f u s l I . e u q ir h pir p n u d er t l e d u e il u a eri o m m a l e d s ti art x e tnos sertcarac se L .erio m m ne liavart ec ruetce ffed te mrep ++C ,erocne L .reihci f nu tios ,)reivalc el ,larng ne( ruetasilitul ceva noitacinu mmoc ed euqirhpirp nu tios srola tiat nr e c n o c e r t n e d t o l f e L .s er i a n i b sr u el a v s e d n e s er t c ar a c e d s et i us s e d r e mr o f s n art e d ,s i o f ettec ,tigas lI .) egatamro f issua emmon nouq( etnedcrp al ed esrevni noitarpo enu tnasilar ne ertned tol f nud sertcarac sed eriartxed tiatte mrep >> ruetarpol ,emm eD .maertsrtso ep yt nud tol f nu resilitud alec ruop ti ffus lI .)euqirhpirp nu simsnart ertd ueil ua ,erinam eniatrec enud svresnoc tnos sertcarac sel( erio mm ne tnemetcerid egata mro f ed liavart ec reutcef fed temrep ++C siaM .reihci f nu tios ,)narcl ,larng ne( ruetasilitul ceva noitacinum moc ed euqirhpirp nu tios tiat nrecnoc eit -ros ed tol f el ,iciuqsuJ .sertcarac ed setius sed ne selbairav ed )serianib( sruelav sed re mrof -snart ed tiassigas li ; egatamro f tnevuos e mmon nouq noitarpo enu tnasilar ne ,eitros ed t o l f n u r us s er tc ara c s e d re y o v ne d ti at te mre p < < r u et ar p ol t n e m m o c u v s n o va s uo N

. C e g a g n a l u d "b w " u o "b r " e r u t r e v u o d s e d o m x u a d n o p s e r r o c y r a n i b : : s o i t i b u d n o i t a v i t c a l e u q ar e t o n n O . v i t c a s a p t s e n t i b e c , t u a f d r a p ; e r i a n i b r e i h c i f n u d s a c e l s n a d er u t r e v u o d e d o m e l s n a d yranib::soi tib el t navitca ne ,reihci f u d er utrevuol ed tne mo m ua tia f es noitc nitsid e t t e C . e m m a r g or p u d n i e s u a n o i t c n i ts i d e n u r e r p o r i o v u o p n e i b c n o d t u a f l I . s er i a n i b sr e i h c i f s i ar v e d r u s s e s i l a r er t s a p t n e v i o d e n s n o i t u t i t s b u s s e l l e t e d , u d n e t n e n e i B .sertcarac ed elpuoc ec ed erutircl rap n\ ed erutircd edna med euqahc recalpmer ,er ut - c e l e n u d s a c el s n a d , n \ r a p s e r t c a r a c e d e l p u o c e c e d e c n e r r u c c o e u q a h c r e c a l p m e r : tnatsisnoc reilucitrap tne metiart nu rerpo tua f li ,n\ ed neib essigas liuq te engil e d ni f e d er t car ac l u es n u u q ri o v e n es si u p + + C e m m ar g or p n u u q r u o p ,s n oi ti d n oc sec snaD . )n\ engil ed ni f ed ivius ,r\ toirahc ruoter( sertcarac xued ed noisseccus al rap eunetbo erilucitrap noitatnesrper enu edssop )n\( engil ed ni f ed ertcarac el semts ys
1

7 Les anciennes possibilits de formatage en mmoire


7 - Les anciennes possibilits de formatage en mmoire

505

.rinetbol ruop rts leppa eria f uae v - u o n ar d u a f l i t e r e u l o v u a e v u o n e d a rr u o p e ss er d a n o s , u d n e t n e n e i b ; s n o i t a mr o f n i s e d er i u d or t n i y u a e v u o n t u e p n o , e u q i m a n y d t n e i v e d er l i , l e g t j d a b a t is : trtni nu neib etnesrp )eslaf(ezeerf.bat ,ehcnaver nE .esserdal rinetbo ne r uop rts releppa e m m dnauq tua f su ov li sia m ,uaelbat el egi f )eurt( ezeerf.bat leppaL .)noitca loob( ezeerf erb me m n oitc no f enu etsixe liuq s nolangis ,tivitsuah xed ic uos raP .s u l u o v s er t c ar a c s e l s u o t t e j b o l s n a d rsni arua nol euqsrol euq rts releppan ed nios neib cnod ardnerp nO .evitini fd esserda enu ,ruoter ne ,rinruo f ned tnava ,)! sertcarac ed noitresnil ed li f ua reulov emm tuep esserda nos euq te tne meuqiman yd uolla tse liuq sap zeilbuon( sertcarac ed uaelbat el tnemevitinifd elg noitcno f ettec ed leppal euq erid tuep nO .tejbo tec snad sert -carac xuaevuon ed rersnid elbissop sulp tsen li ,tejbo nu ruop eleppa t a rts euqsro L 1 .)...rei fido m sel issua siam ,retlusnoc sel( ess erd a e tt ec s u ti s s er tc ara c s el r us ari alp s u ov l i e m m oc ri ga zerr uop s u ov , l e d ri trap : rap eunetbo ert arruop utitsnoc isnia sertcarac ed uaelbat ud esserdaL
tab.write (.....) ; char * adt = tab.str () ;

se uqrameR

: er oc n e u o : uo

: euq sellet snoitcurtsni sed rap bat tejbol snad sertcarac sed rersni zevuop suov : n o it ara lc d al c ev a ,e lp me x e r aP .)* rahc ep yt ed ruetniop nu rap rper( sertcarac ed uaelbat leuq etropmin em moc lupina m ert srola arruop ic-iuleC .noit -seuq ne uaelbat ud esserdal rinetbod te mrep rts emmon erilucitrap erbme m noitcnof enU . e ll i at e d n oi t at i m il e d e m l b or p ed sap cnod esop en te tnemeuqi man yd rc tse uaelbat ec ; maertsrtso essalc al ed erb me m uaelbat nu snad tnemsicrp sulp ,emm-iul tejbol snad svresnoc tnemelpmis sia m ,reihci f nu uo euqirhpirp nu simsnart sap tnos en sertcarac sec euq tse ecner ffid elues a L .eitros ed tol f nuuq ertit emm ua ,sertcarac sed riovecer tuep maertsrtso essalc ed tejbo nU
ostrstream tab

.++C ed erueirtlu noisrev enu snad ertarapsid ed selbitpecsus tnos selleuq ei fingis iuq ec ,erutaef dedacerped sessalc tnos selleuq zetoN .stnatsixe se mmargorp sed retiolpxed ertte mrep suov ed ni fa ,stilibissop senneicna sel e m m dnauq snoretnesrp suov suon ,icI
506
Les flots CHAPITRE 22

7.1 La classe ostrstream

tab.put (.....) ; tab << ..... << ..... << ..... ;

: ) 5 ert i p a h c u d 2. 6. 2 e h p ar g ar a p u a u q o v s n o v a s u o n e u q n o it a ut is( dr a d n ats ertnel rus serutcel ed sac el snad ertcarac siavuam nud eppar f al rap srdnegne sem -lborp sel erduosr tnem moc tnartnom maertsrtsi essalc al ed noitasilitud elpmexe nu icioV .stner ffid stamro f sed tnavius tnasil al ne )uaelbat nu snad tne melbalarp eul( noita mro fni e m m enu sio f srueisulp retiolpxed ,elpmexe rap ,ertte mrep tiarruop aleC : rap uaelbat ed tubd ne ruetniop el recalper zerruop suov ,tnedcrp bat tejbol ceva ,elpmexe raP .gkees noitcno f al ed leppal rap reihci f nu snad zeire f el suov e mmoc ,uaelbat ec snad tnaruoc ruetniop nu rus riga zerruop suov ,tse sulp iuQ
tab.read (.....) ; tab.seekg (0, ios::beg) ; tab.get (.....) ; tab >> ..... >> ..... >> ..... ; char t[100] ; istrstream tab ( t, sizeof(t) ) ; delete adt ;

: er oc ne uo : uo

: euq sellet snoitcurtsni sed rap t uaelbat ud sertcarac sed eriartxe zerruop suov : s n oi t ar al c d s e l c e v a , el p m e x e r a P .ertned tol f leuq etropmin ed tiare f el no em moc ,tejbo tec ed sertcarac sed eriartxed elbissop srola tse lI .etp moc ne erdnerp sertcarac ed erb mon el ; sertcarac ed uaelbat nud esserdal : tnemugra ne tinruo f no leuqua ,ruetcurtsnoc ed leppa nu rap rc tse maertsrtsi essalc ed tejbo nU

: r a p r b i l er t ar r u o p , t d a s n a d e u n e t b o t a e s s e r d a l t n o d , t n e d c r p b a t t e j b o l e d u a e l b a t u d e r i o m m t n e m e c a l p m e l , e l p m e x e r a P . e t e l e d r u e t ar p o l l e p p a t n a s i a f n e er i d- - t s e c ,) w e n r a p( t n e m e u q i m a n y d u o l l a s e r t c a r a c e d u a e l b a t l e u q e tr o p m i n r u o p e m m o c t n a d - c o r p n e , ar e t i a h u o s e l l i u q s r o l er i a f e l e d r u e m m ar g or p u a ar e s e C .) ar e s e l t e j b o l e d etser el ,rs neib( etrop ed sroh ard nei ved tejbol euqsrol tiurtd sap cno d ares en li te r u e m m ar g or p u d t i l i b as n o p s er a l s u o s t n a n e t n i a m ts e n o i ts e u q n e u a e l b a t e l e u q e r d is - n o c n o , e l e p p a t a r t s i s , e h c n a v er n E . t n a d n o ps er r o c s er t c ar a c e d u a e l b a t e l t n e m e l - a g sr o l a t i u r t d i u q r u e t c u r t s e d n u d l e p p a r a p t n e m e l a mr o n t i ur t d t s e l i , e l e p p a t sap an rts noitcn o f al euq srola ,etrop ed sroh tnei ve d maertsrtso essalc ed tejbo nu iS 2
507

7.2 La classe istrstream


7 - Les anciennes possibilits de formatage en mmoire

.nic rus etcerid erutcel ed sac ne ssap tiares es iuq ec tne meriartnoc ,)eria f ne tiod nouq egasul troppar rap( edilavni ertcarac nu tinruo f ruetasilitul euqsrol sulp esop es en e m l b or p n u c u a , z e t ats n o c el s u o v e m m o C .) er t c ar a c n u d s i u p r ei t n e n u d e t a mr o f er ut c e l ici( erutcel ed snoitarpo son snouqilppa suon leuqel rus maertsrtsi ep yt ed tejbo nu ,enahc ettec ceva ,etiusne snosiurtsnoc suoN .)enilteg noitcno f al ed edial ( sertcarac ed enahc enud emro f al suos ,engil enu etuot ruop eudnetta noita mro fnil drobad tuot snosil y suoN
dradnats ertnel rus tirucs etuot ne eril ruo P
b et un caractere : et un caractere : et un caractere : // longueur maxi dune ligne clavier donnez un entier bof donnez un entier a 125 donnez un entier 12 bonjour merci pour 12 et

508

Les flots CHAPITRE 22

main() { int n, erreur ; char c ; char ligne [LGMAX] ; // pour lire une ligne au clavier do { cout << "donnez un entier et un caractere :\n" ; cin.getline (ligne, LGMAX) ; istrstream tampon (ligne, cin.gcount () ) ; if (tampon >> n >> c) erreur = 0 ; else erreur = 1 ; } while (erreur) ; cout << "merci pour " << n << " et " << c << "\n" ; } const int LGMAX = 122 ; #include <iostream> #include <strstream> using namespace std ;

re mirppus tiariudnoc alec ,++C neuq tiov no ; erussa srola tiatn seuqita motua selb -airav sed noitseg enucua : etnatropmi enucal enud srola tiarf fuos e msinacm ec ,sio fetuoT . s l e p p a s e d e i h cr ar i h a l e d t n e m m a d n e p d ni , ert u a e n u sr e v n o it c n o f e n u d u e i l r i o v a d selbitpecsus erid--tsec , xuacol non stid stne mehcnarb sed reuqovorp ed tnette mrep iuq pmjgnol te pmjtes snoitcno f sel retiolpxe tiatsisnoc ehcmramd ertua enU .sleppa sed eihc -rarih al srevart noissi msnarter etneuqr f enuuq isnia ,e mmargorp ud stniop xuerbmon ed ne ,ruoter ed sruelav sed euqita mts ys ne maxel te ffe ne euqilp mi elle ; esueiditsa f srt sniom sap etser nen elle ,tnemetiart nos ed eilamona enud noitcetd al reraps ed ,tnahc sac el ,t e mr e p e d o ht m el l e t e n u i S . s n o it c n o f s et n er f fi d s e d r u ot er e d r u e l a v e m m o c r u err e d e d o c nu rinruo f : dradnats euqhtoilbib al snad esilitu eihposolihp al ed reripsnis tiatsisnoc eudnapr sulp a L .++C ne selbacilppa tnemeuqiroht tnetser iuq te ,C egagnal ne se yolpme sehcra md sel rus tna yuppas ne emlborp let nu erduosr sruojuot tuep no ,setreC .semmargorp xuerb mon ed rap stiolpxe ert snitsed selbasilitur stnasopmoc sed eppolevd nol euqsrol erias -secn sulp erocne tneived noitaicossid etteC .edoc ed eitrap emm al snad eria f es tnessiup tnemetiart nos te tnedicnil ed noitcetd al euq erar tse li ,stnatrop mi tnemevitaler se mmarg -orp sed snaD .noitucxe nos ed etiusruop al erttemorpmoc ed tneuqsir iuq sellennoitpecxe snoitidnoc sed rertnocner tuep em margorp nu ,tniop ua tse liuqsrol e m m siaM .)13 ertipahc uauq setnesrp tnos en selle ,++C ne sesilitu uep( C egagnal ud setirh ellennoitidnoc noitalipmoc ed stilibissop sel tnasilitu ne slituo sed regro f es ed elb -issop sruojuot etser li ,sac el sap tsen let ,iS .stnamro frep srt egagobd ed slituo sed tnesop -orp tnemeppolevd ed stnemennorivne sed trapulp al ,e mmargorp nud tniop ua esi m al ruoP

La gestion des exceptions

23

ecnal

evel

. uo issua tid nO .2 .ruetid emm el zehc ,ruetua emm ud retlusnoc arruop no ,sliatd ed sulp ruop ; G exennA ne tnemetcniccus setnesrp tnos snoitcnof sec ,fitamro fni ertit .1
C egagnaL

.irporppa eriannoitseg nu tnavirc ne noitpecxe ellet enu retpecretni tne mmoc snorrev suon siuP .sac ec snad noitpecxe enu ehcnelcd elleuq ruop essalc erton r et l p m o c s n o l l a s u o n ,i c I .s e nr o b s e d sr o h e d n e s ut is s e c i d n i d n oi t asi li t ul er t n o c g t or p sap srola tiatn ic-iuleC .][ ruetarpol ed noitinifdrus al ed einum erid--tsec ,51 ertipahc ud 5 ehpargarap ua etnesrp tcev essalc al erdnerper snolla suon ,telpmoc elpmexe tec snaD

.)eini fdrp noitcno f enud leppa uo ruoter ed ruelav ed tset( erina m ertua enud retiart sel ed euv ne ,erio m m e d e u q n a m e d s n o it p e c x e s e l r e b i h n i t n e m m o c t n ar t n o m n e , eri o m m a l e d n oi ts e g a l e d re il u ci tra p s ac el r us s n or d ne i v er s u o n , e g ass a p u A .s n oi t pe c xe s er p or p s es e d n o it ar c a l snad retiolpxe sel riova y tuep liuq trtnil euq isnia ,sdradnats snoitcno f sel rap sesilitu te dradnats euqhtoilbib al rap seinruo f snoitpecxed sessalc setner ffid sel snoreni maxe suon siuP .detcepxenu noitcno f al ed elr el srola tse leuq te ,retiart sel snas recnal ed elbit - p e cs us ts e el l e u q s n o it p e c x e s e l r ei f i c ps t u e p n oi t c n o f e n u t n e m m o c et i us n e s n orr e v s u o N .vuort tsen eriannoitseg nucua o sac el snad ,etanimret noitcno f al ed elr el euq isnia ,noitpurretnid eriannoitseg ud xiohc el reutce ffe ruop silitu e mhtiroglal liatd ne snoreid - u t s u o N . n o it p ec xe e n u d er u t pa c al sr p a n oi t uc xel er v i usr u o p e d s n o a f se t ner f fi d se l tnos selleuq etiusne snorrev suoN .selp mexe seuqleuq rus noitpecxe enud erutpac ed te tne m -ecnal ed snoiton sel snoriudortni suon ,noiton ellevuon ettec ed tilanigirol ed unet etpmoC .worht ennoitnem noisserpxel ed erutan al ed noitcno f ne tia f es eriannoitseg nob ud xiohc el te ,ep yt nu rap esirtcarac tse noitpecxe euqahc ,tne msicrp sulP .noitpecxel ed erutan al rap nimretd tse mon el tnod ,noitpecxed eriannoitseg mmon snoitcurtsnid elb mesne nu tnemehcnarb srola a y lI .nnod ep yt nud noisserpxe enu tnatropmoc ,worht noitcurt -s n i e n u r a p e h c n e l c d e c n e u q s e d er u t p ur e n u ts e n o it p e c x e e n u , e l ar n g er i n a m e n u D .s e u qi t a m ot u a s t e j b o s e d e l b a n e v n o c n oi ts e g e n u t n ar uss a n e t u o t ,sl e p p a s e d ei h cr ar i h al e d t n a ssi h c n ar f f as n e ,t n e m et i ar t n os e d ) n oi t p e c x e( ei l a m -ona enud noitcetd al tne melatot relpuocd ed etirm el a lI .snoitpecxe sed noitseg mmon ,seila mona sec ed tnemetiart ed tnassiup srt e msinacm nud esopsid ++C ,emron al siupeD . sruetniop sed tnanetnoc stejbo sel ruop tnemmaton ,enartne lec euq seuqihportsatac secneuqsnoc sel ceva ,ruetcurtsed nos releppa snas ,)elip al rus( tejbo nud tnemecalp mel
1

510

1 Premier exemple dexception


La gestion des exceptions CHAPITRE 23

: snoitidnoc xued retcepser ed eriassecn tse li ,eriaf ec ruoP .reuq -ovorp tuep iolp me nos euq etimil_tcev ep yt ed snoitpecxe selleutnev sel tne melbanevnoc rer g r i o v u o p r u o p re d c or p t ne m m oc t n a n et n ia m s n o y o v , t c e v essa lc er t o n e d t n as o psi D

etimil_tcev noitpecxe enu tnauqovorp essalc enud noitinifD


/* dclaration de la classe vect */ class vect { int nelem ; int * adr ; public : vect (int) ; ~vect () ; int & operator [] (int) ; } ; /* dclaration et dfinition dune classe vect_limite (vide pour linstant) */ class vect_limite { } ; /* dfinition de la classe vect */ vect::vect (int n) { adr = new int [nelem = n] ; } vect::~vect () { delete adr ; } int & vect::operator [] (int i) { if (i<0 || i>nelem) { vect_limite l ; throw (l) ; // dclenche une exception de type vect_limite } return adr [i] ; }

: tcev essalc al ed etlp moc noitini fd al icioV ; : noitcurtsnil rap worht noitcurtsnil snoicossa suon euq tejbo ,etimil_tcev ep yt ed ,l tejbo nu rerc ed te mrep suon ecnetsixe noS .)erbmem nucua snas( etimil_tcev em mon essalc enu tcev essalc erton ed noitaralcd al ceva tne melleici fitra cnod snosiudortni suoN .ici snore f suon euq ec tseC .enrecnoc noitpecxel retnesrper ruop tne meuqinu ini fd ,essalc ep yt nu resilitud el b ar f r p ts e l i ,s er t u a s e d s e n u s e l s n o it p e c x e s e l r e u g ni ts i d n e i b r u o p ,l ar n g n E . n o it -pecxel rei fitnedi tres )non uo essalc( ep yt el tnod euqnocleuq noisserpxe enu etissecn ic -elleC .worht noitcurtsnil ed edial ,noitpecxe enu snohcnelcd suon ,tcerrocni tse ic-iulec euqsrol ; ecidnil ed noitacifirv enu cnod snosiudortni suon ,][ ed noitini fdrus al ed nies uA
l w or h t

1.2 Utilisation dun gestionnaire dexception 1.1 Comment lancer une exception : linstruction throw
1 - Premier exemple dexception

511

: ) d nar g p ort e ci d n i nu ceva ,tcev ep yt ed tejbo nu ][ ruetarpol tnauqilpa ne etimil_tcev noitpecxe enu tne m - eri at n ol o v s n o h c ne lc d s u o n le u qe l s n a d iass e d e m m ar g or p t it e p n u d e n g a p m oc ca t se e ll E .s e nr e c n o c s ess a l c s e t n er f fi d s e d n o i ti n i f d al e d et l p m o c et si l al i c i o v , f it a c i d ni er ti t

.em - margorp ud noitucxel erp morretnid te egassem nu rehci f fad ici snotnetnoc suon suoN
catch (vect_limite l) /* nom dargument superflu ici */ { cout << "exception limite \n" ; exit (-1) ; }

: e ti m il_ tc ev ep yt ed snoitpecxe sel retpecretni nitsed ,eriannoitseg euqinu erton ert tiarruop euq ec iciov ,sac erton snaD .)...eriannoitseg noitcno f enud mon el tiat hctac is em moc( hctac lc-to m el rap tiudortni ett-ne nud edcrp tse noitini fd euqahC .)ti f fus lues nu ,ici( seriassecn snoitpecxed seriannoitseg stner f fid sed noitini fd al ed colb ec ervius eria f
try { // instructions }

: i s n i a e t n es r p es c o l b l e t n u ; n o it p e c x e e n u r et c e t d r i o v u o p et i a h u os no selleuqsel snad snoitcurtsni sel setuot , yrt colb tid ,reilucitrap colb nu snad erulcni
512
La gestion des exceptions CHAPITRE 23

1.3 Rcapitulatif

/* dfinition de la classe vect */ vect::vect (int n) { adr = new int [nelem = n] ; } vect::~vect () { delete adr ; } /* dclaration et dfinition dune classe vect_limite (vide pour linstant) */ class vect_limite { } ; /* dclaration de la classe vect */ class vect { int nelem ; int * adr ; public : vect (int) ; ~vect () ; int & operator [] (int) ; } ; #include <iostream> #include <cstdlib> using namespace std ; /* pour exit */

e l e u q r e u qr a m er s n o v u o p s u o n j d t e s er o d s i a M . nr e c n o c y r t c o l b u d e t i u s a l t i a r v i u sr u o p e s n o i t u c x e l , er i ar t n o c s a c e l s n a d , e u q 1 . 3 e h p a r g ar a p u a s n o rr e v s u o N . n o i t p e c x e d er i a n n o i ts e g u d r u e i r t n i l t i x e n o i t c ur t s n i e n u u v r p s n o v a s u o n , i c I .t nem - e t i ar t n o s e d n o i t p e c x e e n u d n o i t c e t d a l r er a p s e d t s e + + C r a p s o p or p e m s i n a c m u d x u a i dr o m ir p s t u b s e d n u l o er u s e m a l s n a d , e u q i t ar p n e is n i a t n e m er ar ar e s n e l I . e m m- e l l e t c e v e ss a l c a l s n a d n o i t p e c x e d er i a n n o i t s e g n u r i o v r p u p s n o ir u a s u o N . .. t u a f d r a p n o i t u l o s e n u r i o v r p e d r e t n e t er o c n e u o r e h c i f f a n e i r e n ar e r f r p e r t u a l e t , er p m orr e t n i s e d t n a v a e g a s s e m n u r e h c i f f a r i o l u o v t u e p r u e t a s i l i t u l e t , t n e d c r p e l p m e x e l s n a D . e s s a l c e m m e n u d er t u a e n u n o i t a s i l i t u e n u d t n e r f fi d n o i t p e c x e d er i a n n o i ts e g n u r i o v r p e d e l b is s o p t i a f t u o t t s e l i ,) e u q i t a r p n e s a c e l t n e v u o s ts e i u q e c( n o i t a s i l i t u n o s e d e r a p s ts e e ss a l c e n u d n oitini fd al o tne mo m ud ritrap ,isni A .rehcnelcd al ed selbitpecs us snoitcno f sed t n e m m a d n e p d n i i n i f d t s e n o i t p e c x e e n u d er i a n n o i ts e g e l , e l ar n g er i n a m e n u D .)leici fitra ici tnat l tnemugral( erilucitrap noitamro fnid sap tioer en eriannoitseg el ; eri a n n o it se g n o b u d x i o h c e d e ms i n ac m e l ec ne d -iv ne tne miarv sap tem en liuq etros ed ,noitpecxed ep yt lues nuuq etropmoc en li : t n e m m a t o n ; e l p m is tr o f tse ,snoitpecxe sed noitseg ed emsinac m el retnesrp suov nitsed ,elpmexe reimerp eC

se uqrameR

no itp ec xed noi ts eg ed e lpme xe re ime r P


exception limite int & vect::operator [] (int i) { if (i<0 || i>nelem) { vect_limite l ; throw (l) ; } return adr [i] ; } /* test interception exception vect_limite */ main () { try { vect v(10) ; v[11] = 5 ; /* indice trop grand */ } catch (vect_limite l) /* nom dargument superflu ici */ { cout << "exception limite \n" ; exit (-1) ; } }

1 - Premier exemple dexception

513

.eriomm ed euqnam ed sac ne noitpurretni ettec recnal issua tiarruop no ,ler sac nu snaD .2 .noitucxed esirper ed emsinacm nud esopsid ADA ,ehcnaver nE .avaJ ne emm ed ari ne lI .1

: ) is ni a t n e m er ar ar i n e l i , e u qi t ar p n e ; e cr u os e m m e l snad tnerugi f sessalc sed noitasilitul te noitinifd al ,erocne ,ici( telpmoc elpmexe nu icioV .eriannoitseg ua erttemsnart noitamro fnil riovecer nitsed reitne ep yt ed cilbup p mahc nu ,noitaerc_tcev te etimil_tcev sessalc sellevuon son snad ,cnod snoriovrp suoN .xiohc erton ed noitamro fni etuot reuqinum moc rivres suon tuep hctac rap rpucr te worht uqidni tejbol euq tne melpmis tnaton ne ,tnedcrp e msinacm el reuqilppad ti ffus lI . er i a n n oi ts e g ua erbmon ec erttemsnart ed tiovrp no ,erocne l ; )lun uo fitagn( tcerrocni stnemld er b m o n n u r u et c ur ts n oc u a t e ms n art n ol e u qsr ol e h c n el c d n o i t a e r c _ t c e v n oi t pe c x e e n u ; noitpecxel hcnelcd a iuq ecidnil ed ruelav al eriannoitseg ua erttemsnart ed tiovrp no ,sio f ettec ,sia m tne mmedcrp emmoc etimil_tcev ep yt ed noitpecxe enu : snoitpecxed setros xued recnal ed tnattemrep iul ne ,etnedcrp tcev essalc al erdnerper s n o ll a s u o N .s er i a n n oi ts e g x u a s n oi t a mr o f n i d n o iss i m s n art a y l i o t e s et n er f f i d s n oi t -pecxe xued evuort no leuqel snad etsilar sulp uep nu elp mexe nu tnanetniam snonimaxE
2

. n o i t u c x e l e d t r r a n u u q o v or p t n e m e l p m i s sr o l a t i ar u a e t p m o c n e e s ir p n o n t e ][ ruetarpol rap ehcnelcd etimil noitpecxel ,yrt colb ed uvrp sap snoi van s uon iS 5 . n o i t p e c x e l v e l t n a y a n o i t c ur t s n i l e d r i tr a p n o i t - u c x e l er d n e r p er e d s a p t e m r e p e n + + C r a p s o p or p s n o i t p e c x e s e d n o i t s e g e d e l d o m
1

514

2 Second exemple

La gestion des exceptions CHAPITRE 23

/* dclaration de la classe vect */ class vect { int nelem ; int * adr ; public : vect (int) ; ~vect () ; int & operator [] (int) ; } ; #include <iostream> #include <cstdlib> // ancien <stdlib.h> using namespace std ; pour exit

2 - Second exemple

515

/* dclaration - dfinition des deux classes exception */ class vect_limite { public : int hors ; // valeur indice hors limites (public) vect_limite (int i) // constructeur { hors = i ; } } ; class vect_creation { public : int nb ; // nombre elements demandes (public) vect_creation (int i) // constructeur { nb = i ; } } ; /* dfinition de la classe vect */ vect::vect (int n) { if (n <= 0) { vect_creation c(n) ; // anomalie throw c ; } adr = new int [nelem = n] ; // construction normale } vect::~vect () { delete adr ; } int & vect::operator [] (int i) { if (i<0 || i>nelem) { vect_limite l(i) ; // anomalie throw l ; } return adr [i] ; // fonctionnement normal } /* test exception */ main () { try { vect v(-3) ; // provoque lexception vect_creation v[11] = 5 ; // provoquerait lexception vect_limite } catch (vect_limite l) { cout << "exception indice " << l.hors << " hors limites \n" ; exit (-1) ; } catch (vect_creation c) { cout << "exception creation vect nb elem = " << c.nb << "\n" ; exit (-1) ; } }

exception creation vect nb elem = -3

snoitpecxe xued ed noitseg ed elpmexE

emm el zehc ,ruetua emm ud

C egagnaL

.ruetid retlusnoc arruop no ,snoitcnof sec ed elr el rus noitamrofnid sulp ruoP .1

. e d n o c es a l n o it p e c x e e n u e h c n e l c d el l e ,s i o f er i m er p al t n e m el a mr o n eluord es f ed noitucxel ; f noitcno f enu sesirper xued snoleppa y suoN .tne mmedcrp euq noitaerc_tcev te etimil_tcev , tcev sessalc se mm sel esilitu iuq elpmexe tec zevresbO . er i a n n oi ts e g r e i nr e d el t n a v i us n oi t c ur ts ni er i m -erp al essap nouq erid tneiver aleC .nrecnoc yrt colb ud etius al tnemelp mis tuot essap no ,nrecnoc eriannoitseg ud snoitcurtni sed noitucxel srpa ,sac ec snaD .)troba ,tixe( noit -ucxel ed trrad noitcurtsnid retropmoc sap en neib srt tuep noitpecxed eriannoitseg e L

.r e l u o c d n e t n e v u e p iuq )snoitcno f ed cnod( scolb ed seitros setner f fid sel etpmoc ne sesirp tnos tnod erina m al ; noitpecxed eriannoitseg ud noitucxel srpa em margorp ud noitucxel erviusruop ed tilibissop al : s tc e ps a x ue d t na u g ni ts i d ne , t n a n -etnia m reni maxe snolla suon euq stilibissop sertuad esirotua ++C rap tre ffo emsinac m el siaM .) troba dradnats noitcno f al resilitu tne melag up snoirua suon( tixe ed leppa nu rap noitucxel tiapmorretni noitpecxed eriannoitseg el ,stnedcrp selp mexe sel suot snaD
1

.s n o i t -pecxe sec rehc nelcd t uep )noitaerc_tcev te etimil_tcev( sessalc xued sed noitini fd al e d t n a s o p s i d ) ! t c e v e s s a l c a l e d er b m e m t n e m er i a s s e c n s a p( n o i t c n o f e l l e u q e tr o p m i n , u d n e t n e n e i b s i a M . t i o r d n e l u es n u n e u q h c n e l c d ts e n n o i t p e c x e d e p y t e u q a h c , i c I 2 .etimil_tcev essalc al snad stnadnopserroc serb - m e m s el er i u d or t ni d ti ari f f u s lI . s e u v r p s e ti mi l s e l i s s u a s i a m , e c i d ni l e d r u e l a v a l t n e m -elues non etimil_tcev snad erttemsnart trtni riova tiarruop no ,ler elp mexe nu snaD 1

: e gas se m u d eg a hc i f fa l nartne tiarua noitcurtsni erinred ettec ,etcerroc t tiava v ed noitarc al iS .5 = ]11[v uqovorp tiaruauq ellec ecnediv ne erttem ed ecnahc enucua snovan suon ,yrt colb ud etiros al uqovorp tna ya ))3-(v tcev rap ehcnelcd( noitpecxe erimerp al ,udnetne neiB
516
La gestion des exceptions CHAPITRE 23

3.1 Poursuite de lexcution du programme

3 Le mcanisme de gestion des exceptions


se uqrameR
exception indice 11 hors limites

3 - Le mcanisme de gestion des exceptions

517

// dclaration et dfinition des classes vect, vect_limite, vect_creation // comme dans le paragraphe 2 // ..... main() { void f(int) ; cout << "avant appel de f(3) \n" ; f(3) ; cout << "avant appel de f(8) \n" ; f(8) ; cout << "apres appel de f(8) \n" ; } void f(int n) { try { cout << "debut bloc try\n" ; vect v(5) ; v[n] = 0 ; // OK pour n=3 ; dclenche une exception pour n=8 cout << "fin bloc try\n" ; } catch (vect_limite l) { cout << "exception indice " << l.hors << " hors limites \n" ; } catch (vect_creation c) { cout << "exception creation\n" ; } // aprs le bloc try cout << "dans f apres bloc try - valeur de n = " << n << "\n" ; } avant appel de f(3) debut bloc try fin bloc try dans f apres bloc try - valeur de n = 3 avant appel de f(8) debut bloc try exception indice 8 hors limites dans f apres bloc try - valeur de n = 8 apres appel de f(8)

.noitcno f etidal ed ruoter a y li ,trrad sap tnauqovorp en noitpecxed eriannoit -seg nud noitucxe srpauq etros ed ,noitcnof enu etuot ervuoc yrt colb nu ,tnem meuqrF .elbairav ettec ed etrop al snad erocne tse nouqsiup ,n ed ruelav al rehciffa y tuep nouq neib areton nO .seriannoitseg sed etius al tnarugi f tuoc noitcurt -snil etucxe no ,etimil_tcev noitpecxed eriannoitseg ud noitucxel srpauq etatsnoc nO

noitpecxed eriannoitseg nu srevart essap nouqsroL

yrt scolb sed snad tiusruop es ehcrehcer al tnem moc snorrev suon siuP .xiohc ec reutce ffe r u o p + + C ra p s e si li t u se l gr se d el b m es ne l res ic r p t na n et n ia m s n o ll a s u o N . fi ti u t ni t n e m e v - it al er t ia t eri a n n o its e g u d xi o h c el ,i ci u qs uj s rt n oc n er s n o v a s u o n e u q s el p m e xe s el s n a D

. B e xe n n A n e li at d ne nimaxe ares tniop eC .noitpecxe enud tne metiart el srpa noitucxel erviusruop etiahuos nouq srol sd sesirp ert tnorved snoituacrp seniatreC .seuqiman yd stejbo xua reuqilppas sap arruop en noitcurtsed ed emsinac m ec ,erdnetta ys tuep no e mmoC

. e t r o p ed sroh tnaneved te tiurtsnoc jd euqitamotua tejbo tuot ed ruetcurtsed ud leppal e n art n e l I . e itr os al e u q o v or p n o t n o d s c o l b s e d s e u qi t a m ot u a s el b a ir a v s e l r e m ir p p u s e d s a p et n et n o c es e n n o it p e c x e e n u d t n e m e ti art u a i c o ss a e ms i n a c m e l , el ar n g er i n a m e n u D . l e p p a t a r u a 2 v e d r u e t c ur ts e d e l , s a c x u e d s e l s n a d ,s u l p e D .tnadnopserroc eriannoitseg el rap tne metiart nos srpa ,etimil_tcev noitpecxe enu euqovorp f is emm ed erocne ari ne li siaM .sulp ares el en 2v euq sidnat ,unnoc ares 1v ,serinred sec snad ; yrt colb el tnavius snoitcurtsni sel tne meller - u t a n t u o t ar e t u c x e n o , n o it p e c x e d r e h c n e l c d s n as e t u c x es f is , u d ne t n e ne i B .t n e m m e d -crp e mmoc rueirtnil ertua nu ,yrt colb ud srohed ne ruetcev nu snorc y suon ,sio f etteC
void f(int n) { vect v1(5) ; try { vect v2(5) ; v2[n] = 0 ; } catch (vect_limite l) { cout << "exception indice " << l.hors << " hors limites \n" ; } // aprs le bloc try ..... // ici v1 est connu, v2 ne lest pas et il a t convenablement dtruit }

: t n e d c r p elp mexel ed f noitcno f al i fido m tne melpmis snova suon leuqel snad elp mexe ertua nu icioV .noitpecxe enu etius uo tnemellerutan unevrap tios y nouq ,yrt colb ud etius al snad eunnoc tiat n ed ruelav al : tialuocd ne iuq etxetnoc ed tne megnahc el tiatcepser noitpecxe enud noitcetd al rap uqovorp tne mehcnarb el euq jd tiartnom tnedcrp elpmexeL

518

4 Choix du gestionnaire
e uqrameR

3.2 Prise en compte des sorties de blocs


La gestion des exceptions CHAPITRE 23

.ruelav rap noissimsnart enud sac el snad tnesiudortni sruetalipmoc sniatrec euq eriatnemlppus eipoc al retiv ruop ecnerfr rap noissimsnart ettec sruojuot resilitud tnesinocrp sruetua sniatreC .1
class vect_erreur {.....} ; class vect_creation : public vect_erreur {.....} ; class vect_limite : public vect_erreur {.....} ; void f() { ..... throw vect_creation () ; // exception 1 ..... throw vect_limite () ; // exception 2 } catch catch catch catch (T t) (T & t) (const T t) (const T & t)

: ruerre_tcev essalc e mm enud sevird tnos etimil_tcev te noitaerc_tcev snoitpecxe sel leuqel snad elpmexe tec snordisnoC . tnemeni f sniom uo sulp ret -iart tuep nouq snoitpecxe srueisulp repuorger ruop esueicrp tse tilibissop etteC . worht snad nnoitnem ep yt ud esab ed essalc enu tnadnopserroc eriannoitseg nud ehcrehceR .2

: t n e n n ei v n oc s t n a v i u s s er i a n n oi ts e g s el , T e p y t e d t s e w o r h t s n a d e n n o i t n e m n oi ss er p x e l is ,tid tnemertuA .)ruelav rap noissi msnart sruojuot a y li( ici sap tneivretnin tsnoc fitaci fil -auq e L .worht snad nnoitnem tcaxe epyt ua tnadnopserroc eriannoitseg nud ehcrehceR .1 .sepat srueisulp ne edcorp no ,eini fdrus noitcno f enud ehcrehcer al ruop e mmoC .worht noitcurtsnil snad ennoitnem noisserpxel ed ep yt ua irporppa eriannoitseg nu ,sicossa hctac scolb stner ffid sel snad ,ehcrehcer no ,yrt colb nu esi msnart tse noitpecxe enuuqro L

: eriannoitseg el snad ertnel tnava etiurtd tiarevuort es iuq euqitamotua elbairav enu rus etniop liuq aretiv no ,ruetniop nu ne aretsisnoc noitamro fni ettec euqsrol ,ehcnaver nE . uq -ov jd etxetnoc ed tnemegnahc ud unet etp moc ,tissecn enud l tigas lI .ecner fr rap noissi msnart enu silitu a nol is em m ,eipoc enu sruojuot tioer ne eriannoitseg el ,worht e n n oi t n e m n oi ss er p x e l r i o v as , er i a n n oi ts e g u a esi ms n ar t n o it a mr o f ni l e nr e c n o c i u q e c n E
1

.eriannoitseg ua esimsnart tne mevitce ffe tse noita mro fnil tnod )erilucitrap( erina m al tnanrecnoc snoisicrp seuqleuq retroppa snolla suon ,tnavarapuA . n no d y rt c o l b n u r u o p v u or t ts e n el b a n e v n o c eri a n n o it s e g n u c u a e u qsr ol s t n a b ol g n e
519

4.2 Rgles de choix dun gestionnaire dexception 4.1 Le gestionnaire reoit toujours une copie
c = new A (...) ; throw (c) ; // erreur probable

4 - Choix du gestionnaire

.worht noitcurtsnil tneitnoc iuq iulec euq colb emm el snad erugif yrt colb el euq erar tse li rac ,noitautis ettec snad sruojuot euqserp tse no ,tiaf nE .1

: )tne mmedcrp euq sessalc se mm sel sruojuot tnasilitu( elpmexe tec snordisnoC .etius ed isnia te , etnaleppa noitcnof enu icossa yrt colb leutnev nu snad ehcrehcer al tius -ruop no ,icossa tsen yrt colb nucua is uo eriannoitseg ed sap evuort en nol iS .2.4 ehparg -arap ua sesopxe selgr sel tnauqilppa ne ,noitcno f ettec icossa yrt colb leutnevl snad eriannoitseg nu drobad tuot ehcrehc no ,noitcno f enu rap evel tse noitpecxe enu dnauQ
1

.1 eriannoitseg el rap setpecretni non snoitpecxe sel set - u ot ar et p e cr et n i 2 eri a n n o it s e g e l e u qs i u p , t u c x e ert d e c n a h c e n u c u a a n 3 eri a n n o i ts e g e l
// gestionnaire 3

: ceva ,isniA .seriannoitseg sertuad ecnetsixel ed repuccorp es snas ,etucxel no ,dnopserroc eriannoitseg nuuq sD .). ..( n o is n e ps us e d s t ni o p s e d r a p hctac snad tnesrper euqnocleuq epyt nu tnadnopserroc eriannoitseg nud ehcrehceR .4 ; )ruetniop nu emm-iul tse ep yt ec euqsrol( worht snad nnoitne m ep yt ud evird essalc enu rus ruetniop nu tnadnopserroc eriannoitseg nud ehcrehceR .3
main() { try { ..... f() ; ..... } catch (vect_cration v) { /* on intercepte ici exception_1 */ } catch (vect_limite v) { /* on intercepte ici exception_2 */ }

: n o a f er i merp et t ec e d r eh c ne lc -d ed elbitpecsus tse elleuq snoitpecxe sel rerg tuep no ,f tnasilitu emmargorp nu snaD
520
La gestion des exceptions CHAPITRE 23

4.3 Le cheminement des exceptions


: isnia rerg sel issua tuep no siaM
catch (truc) { // } catch (...) { // } catch (chose) { // } main() { try { ..... f() ; ..... } catch (vect_erreur e) { /* on intercepte ici exception_1 et exception_2 */ } // gestionnaire 1 // gestionnaire 2 (type quelconque)

. e p y t e d e c n a d n o ps er r o c er u e l l i e m e n u t n ar u s s a e r i a n n o i t s e g n u t n e i t n o c l i s e m m , t n a b o l g n e c o l b l e u t n e v n u s n a d u e i l a n e h cr e h c e r e n u c u a , c o l b n u s n a d v u or t t a e l b a n e v n o c e r i a n n o i t s e g n u u q s d e u q n e i b z e n e t e R 2 . s e t n a l e p p a s n o i t c n o f x u a r e t n o m er e d t n a v a ,s t n a b ol g n e s c o l b s l e u t n e v sel etpmoc ne tnanerp ne tnemellerutan tuot esilarng es eriannoitseg nud ehcrehcer ed emhtiroglal ,sac ec snaD .yrt scolb sed reuqirbmid elbissop tnemeuqiroht tse lI 1

se uqrameR

.noitpecxed revel sap tuep en elle te ruoter ed reutce ffe sap tiod en elle ; em margorp ud noit -ucxel ni f ette m noitcno f ettec euq eriassecn tnadnepec tse lI .)reldnah_ wen_tes ceva set -ia f suov euq ec elbarapmoc noa f ed( etanimret_tes esserdal zessinruo f suov tnod xiohc ertov ed noitcno f enu eleppa tios etanimret ed ecalp al uq redna med sruojuot zevuop suoV . n oi t u c x e l ni f t n e m e l p m is t n a tt e m s e t c e t d n o n s n o i t -pecxe selleutnev sel ,em margorp nu rap sehcnelcd ertd selbitpecsus snoitpecxe seniat -rec euq retiart en ed erttemrep es isnia tuep no ,tef fe nE .noitpecxed noitseg ed emsinac m ua esselpuos ed puocuaeb ennod tiralucitrap etteC . troba noitcno f al elleppa erinred ettec ,tuafd raP .etanimret noitcno f al elleppa no ,vuort tsen noitpecxed eriannoitseg nucua iS

/* test exception */ main () { try { void f1 () ; f1 () ; } catch (vect_limite l) { cout << "dans main : exception indice \n" ; exit (-1) ; } } void f1 () { try { vect v(10) ; v[12] = 0 ; // affiche : dans vect v1 (-1) ; // affiche : dans // ( condition que // nait pas dj } catch (vect_creation v) { cout << "dans f1 : exception creation \n" ; } }

main : exception indice f1 : exception creation linstruction prcdente provoqu une exception)

4 - Choix du gestionnaire

521

.elliesnoc erug tsen noitpecxe enu resirtcarac ruop esab ed epyt nud noitasilitul ,euqitarp nE .elocd elpmexe nud tigas lI .1

: n oi tc ur ts ni l rap tiani mret es eriannoitseg el is e mmoc essap es tuoT .eriannoitseg ud ni f al tnietta nol is tnabolgne uaevin ua esimsnarter tnemeuqitamotua tse etnadnopserroc noitpecxel ,ruet -curtsed nu uo ruetcurtsnoc nu snad tnarugif noitpecxed eriannoitseg nud sac el snaD 1

noitpecxe enud tnemehcnelcder ed elpmexE


exception int dans f exception int dans main

: niam snad etiart ertd tnava ,f snad etiart drobad tuot tse )tni ep yt ed ici( noitpecxe enu leuqel snad elpmexe nu iciov nE .euqi ficps eriatnemlpmoc tnemetiart nu rap noitpecxe e n u d dr a d n a ts t n e m et i ar t n u r e t l p m o c e d el p m e x e r a p t e mr e p t i li b iss o p et t e C . t n a b o l g n e uaevin ua noitpecxel temsnarter )noisserpxe snas( worht noitcurtsnil ,eriannoitseg nu snaD
1

522

4.4 Redclenchement dune exception

La gestion des exceptions CHAPITRE 23

#include <iostream> #include <stdlib.h> // pour exit using namespace std ; main() { try { void f() ; f() ; } catch (int) { cout << "exception int dans main\n" ; exit(-1) ; } } void f() { try { int n=2 ; throw n ; // dclenche une exception de type int } catch (int) { cout << "exception int dans f\n" ; throw ; } }

throw ;

// gnre automatiquement la fin dun gestionnaire // dexception figurant dans un constructeur ou un destructeur

se uqrameR

ne ; ruoter ed reutcef fe sap tuep en noitcnof ettec ,erocne L .detcepxenu_tes rap tnauqidnil ne ,detcepxenu ed tnemecalpmer ne noitcno f erporp ertov rinruo f tnemelag zevuop suoV .)6 ehpargarap ua seidut tnores sdradnats snoitpecxe sel( noitpecxe_dab dradnats noitpecxe enu rehcnelc -d ed detcepxenu erttemrep ruop uvrp tnemelleitnesse tse egral zessa erdac eC .enrec -noc noitcno f al ed eca fretnid noitaci ficps al snad euvrp noitpecxe enu rehcnelcder tios ; )noitucxel ni f tem iuq ec ,troba elleppa tua fd rap ,iuq( etanimret noitcno f al releppa tios : tuep noitcno f ettec ,tnemsicrp sulP .e mron al rap ini fd tnemeritne sap tsen detcepxenu ed tua fd rap tne metropmoc el ,tnemesueruehlaM
void f() { try { ..... } catch (A a) { throw ; } catch (B b) { throw ; } catch (...) { unexpected() ; } } void f() throw (A, B) { ..... } /* lexception A est retransmise */ /* lexception B est retransmise */ /* les autres appelent unexpected */ /* f est cense ne dclencher que */ /* des exceptions de type A et B */

: t ne la v iuq tse

: e u q eri d t u e p n O .detcepxenu e mmon erilucitrap noitcno f enud leppal enartne )eleppa noitcnof enud uo( noitcno f al ed rueirtnil ehcnelcd te euvrp non noitpecxe etuot ,sac ec snaD .senrecnoc snoitpecxe sed etsil al ed ,seshtnerap ertne ,ivius ,worht lc tom ud edial tia f el ellE .)worht rap rehcnelcder ed te retiart ed uo( ret - i art s e l s n as r e h c n e l c d e d el b it p e cs us ts e e l l e u q s n oi t p e c x e s el r ei f i c ps t u e p n oi t c n o f e n U

: er i a n n o i t s e g e l s n a d , i s n i A . e p y t e m m e d n o i t p e c x e e l l e v u o n e n u d e t i c i l p x e t n e m e h c n e l c d e l r a p r e c a l p m er a l sr u o j u o t t u e p n o , er i ar t n o c s a c e l s n a D . s n o i t p e c x e d e l l i m a f e n u r e t i ar t e d e u q s ir erian noitse g e mm nu uqsrol elitu t uotrus er vas worht rap n oitpecxe enud ecnaler a L 2
523

5 Spcification dinterface : la fonction unexpected


: r e s i l i t u t u ep n o
catch (A a) throw ; throw a ; // relance une exception de type A, quel que soit le type // de celle rellement intercepte (A ou driv) // relance une exception du type de celle rellement intercepte // intercepte les exceptions de type A ou driv

5 - Spcification dinterface : la fonction unexpected

.elliesnoc erug tsen noitpecxe enu resirtcarac ruop esab ed epyt nud noitasilitul ,euqitarp nE .elocd elpmexe nud tigas li ,erocne icI .1
void f(int n) throw (int) { try { cout << "n = " << n << "\n" ; switch (n) { case 0 : double d ;throw d ; break ; case 1 : int n ; throw n ; break ; case 2 : float f ; throw f ; break ; } } catch (double) { cout << "exception double dans f\n" ; } cout << "suite du bloc try dans f et retour appelant\n" ; }

.s n o it p e c x e si or t s e d e n u c - a h c t n e m e vi s s e c c u s r e h c n e l c d f r e n e m a n o a f e d , e m m a r g o r p e l s e s i r p e r s i o r t s n o t u c -xe suoN .tni ep yt ed snoitpecxe sed euq ehcnelcd en elle ,rueirtxel ed euv ,euq erdnetne essial iuq ec , )tni(worht eralcd t a f ,sruellia raP .sertua sel sap siam ,f enretni erian -noitseg nud tnesopsid serimerp se L . taolf uo tni ,elbuod sep yt sed nul ed noitpecxe enu ,tnemugra nos ed ruelav al tnavius ,ehcnelcd f noitcno f enu leuqel snad elpmexe nu icioV .ruot nos noit - p e c x e e n u r e c n a l t u e p e l l e , e t a n i m r e t t n a u ti ts b us es n oi t c n o f al t n e m er i ar t n o c , e h c n a v er
1

524

La gestion des exceptions CHAPITRE 23

main() { void f(int) throw (int) ; int n ; cout << "entier (0 a 2) : " ; cin >> n ; try { f(n) ; } catch (int) { cout << "exception int dans main\n" ; } cout << "suite du bloc try du main\n" ; } #include <iostream> using namespace std ;

.s e l e p p a s n o i t c n o f s e l s e t u o t r a p s e v e l er t d s e l b i t p e c s u s s n o i t p e c x e s e l s e t u o t e d u t i tr e c c e v a t a n n o c n o u q e s o p p us n o i t c n o f e n u r a p s e v e l er t d s e l b i t p e c s u s s n o i t p e c x e s e l r er m u n , t e f f e n E . s n o i t u a c - r p c e v a u q e s i l i t u e rt t i o d e n s n o i t p e c x e d n o i t a c i f i c p s a l , e l ar n g er i n a m e n u D 3 . e n u c u a er i o v , s e n i a tr e c e u q r e i f i c p s n e n t u e p e l l e , e h c n a v er n e ; es a b e d e ss a l c al s n a d s e u v r p s e l - l e c e u q s n o i t p e c x e s er t u a d r e n n o i t n e m s a p t u e p e n e i n i f d er n o i t c n o f a l e d e c a f r e t n i d n o i t a c i f i c ps a l , e v i r d e ss a l c e n u s n a d e r b m e m n o i t c n o f e d n o i t i n i f d er e d s a c n E 2 : n o it p e c x e e n u c u a esir o t u a n e d i v n oi t a c i f i c ps e n u , e h c n a v er n E .selbissop snoitpecxe sel setuot reificps tneiver eca fretnid noitacificps ed ecnesbaL 1
void fct throw () // aucune exception permise - toute exception non traite // dans la fonction appelle unexpected

se uqrameR

.troba ed leppa nu evitini fd ne snorituoba suon ,noitatnemlpmil rap uvrp tnemetropmoc el tios euq leuq ,colla_dab dradnats noitpecxel retiart ruop uvrp tsen neir e mmoC .detcep -xenu noitcno f al ed leppa a y li ,em margorp ud noitucxe emisiort al snad ,euq areton nO
ecafretnid noitacificps ed elpmexE
entier (0 a 2) : 2 n = 2 // ...... ici : appel de abort (fin anormale) entier (0 a 2) : 1 n = 1 exception int dans main suite du bloc try du main entier (0 a 2) : 0 n = 0 exception double dans f suite du bloc try dans f et retour appelant suite du bloc try du main

5 - Spcification dinterface : la fonction unexpected

525

.testib ruenetnoc ud gnolu_ot noitcno f al rap ehcnelcd : rorre_ wolfrevo ; testib ruenetnoc ud ruetcurtsnoc el rap ehcnelcd : tnemugra_dilavni ; testib ruenetnoc ud ][ ruetarpol rap euq isnia ,sruenetnoc sessalc setner f fid sed serbmem ,ta snoitcno f sel rap ehcnelcd tse noitpecxe ettec ; ecidnid ruerre : egnar_fo_tuo ; detcepxenu noitcno f al rap snoitatnemlpmi seniatrec snad ehcnelcd ert tuep noitpecxe ettec ; noitpecxed noitaci ficps ed ruerre : noitpecxe_dab ; diepyt noitcno f al ed cehc : diepyt_dab ; tsac_cimanyd ruetarpol ed cehc : tsac_dab ; w e n r a p eri o m m n o i t a c o l l a d c e h c : c ol l a _ d a b : noitacifingis ruel icioV .dradnats euqhtoilbib al ed ruetarpo nu uo noitcno f enu rap sehcnelcd ertd selbitpecsus tnos dradnats snoitpecxe sed tpeS

diepyt_dab noitpecxe_dab tsac_dab colla_dab rorre_ wolfrednu rorre_wolfrevo rorre_egnar rorre_emitnur egnar_fo_tuo rorre_htgnel tnemugra_dilavni rorre_niamod rorre_cigol n oi t p e c x e : )>tpecxedts< ett-ne reihcif el snad erugi f noitaralcd ruel( etnavius eihcrarih al tnavius sesinagro tnos te noitpecxe e mmon esab ed essalc enud tnevird sessalc sec setuoT . dr a d n at s e u q h t oi l bi b a l e d sr u e t ar p o s e d u o s n oi t c n o f s e d rap sehcnelcd ert tnevuep seniatreC .e mmargorp nu rap sehcnelcd ertd selbitpecsus seuqi ficps snoitpecxe sed tnassinruo f sessalc seuqleuq etrop moc dradnats euqhtoilbib a L

526

6.2 Les exceptions dclenches par la bibliothque standard 6.1 Gnralits

6 Les exceptions standard


La gestion des exceptions CHAPITRE 23

t n e m m as i f f us s u l p ti a y n l i u q e c u qs uj e c t e , e n n o d n e e i nr u o f ts e e ll i a t al t n o d sr e it n e d xuaelbat sed ruop stne mecalpme sed euolla iuq em margorp nu iciov ,elpmexed ertit .)gnisu rap smon ed ecapse tec ralcd neib a nouq srol sd ul frepus tse ::dts( ) worhton::dts( wen uo ) worhton( wen ruetarpol ,wen ed ueil ua ,tnasilitu ne tnemetropmoc ec revuorter tuep no ,emron al cevA .cehcd sac ne l u n r u e t ni o p n u ) C e g a g n a l u d c ol l a m n o it c n o f al e m m oc( t i ass i nr u o f w e n , e mr o n a l t na v a d s n o isr e v s e l s n a D . c e h c d s a c n e c o l l a _ d a b n oi t pe c x e e n u e h c ne lc d w e n e u q t i a s n O
6.4.1 Loprateur new (nothrow)

: stner ffid s fitacilpxe segasse m xued ceva ,rorre_egnar ep yt ed noitpecxe xued rehcnelcd ruop stirporp sec tnasilitu emmargorp ed elpmexe nu icioV .tahw rap erpucr ert etiusne arruop ruelav al tnod enahc ep yt ed tnemugra nu tnavecer ruetcurtsnoc nud tnesopsid sessalc sec setuot ; )n o it a tn e m lp mi l e d t n ad n epe c d nep d e u ne tbo e n a h c a l( su sse d- ic se t ic se ssa lc se l setuot snad tsel elle te sevird sessalc sel snad eini fder ert tiod ,noitpecxe snad elleutriv ,noitcno f etteC .noitpecxel ed erutan al tnauqilpxe enahc enu rus ruetniop nu ruoter ed ruel -a v e m m o c ri nr u o f e s ne c t a h w er b m e m n o it c no f e nu d es o psi d n oi t p e c x e e s a b e d ess al c a l : seriassecn tnos secnassiannoc seuqleuq ,sessalc sec resilitu ruoP . eri o m m n oi ta c ol la e n u ce va troppar snas eilamona enu relangis ruop colla_dab noitpecxe enu rehcnelcd ed elbannos -iar erug tiares en li ,elp mexe rap ; em margorp nos ecnerhoc eniatrec enu rerussad elb -ar frp tnadnepec tse lI .sevird sessalc ed e mro f suos tios ,selleuq sellet tios ,ruetasilitul rap sehcnelcd snoitpecxe sel ruop selbasilitu tnos setnedcrp sessalc sel setuot ,iroirp A

6.4 Cas particulier de la gestion dynamique de mmoire 6.3 Les exceptions utilisables dans un programme
#include <iostream> #include <stdexcept> #include <cstdlib> using namespace std ; main() { try { ..... throw range_error ("anomalie 1") ; // afficherait : exception : anomalie 1 ..... throw range_error ("anomalie 2") ; // afficherait : exception : anomalie 2 } catch (range_error & re) { cout << "exception : " << re.what() << "\n" ; exit (-1) ; } }

6 - Les exceptions standard

527

528

La gestion des exceptions CHAPITRE 23

6.4.2 Gestion des dbordements de mmoire avec set_new_handler

.)e lba t -pecca sap tnemelbaborp tiares en ,ler e mmargorp nu snad ,iuq ec ,xuaelbat sed sesserda set -ner ffid sel riovecer ruop rda elbairav em m al sruojuot snosilitu suon iciuq zeton( ecalp ed
#include <cstdlib> // pour exit #include <iostream> using namespace std ; main() { long taille ; int * adr ; int nbloc ; cout << "Taille souhaitee ? " ; cin >> taille ; for (nbloc=1 ; ; nbloc++) { adr = new (nothrow) int [taille] ; if (adr==0) { cout << "**** manque de memoire ****\n" ; exit (-1) ; } cout << "Allocation bloc numero : " << nbloc << "\n" ; } } Taille souhaitee ? 4000000 Allocation bloc numero : 1 Allocation bloc numero : 2 Allocation bloc numero : 3 **** manque de memoire ****

: tnedcrp elpmexel retpada snoirruop suon tne mmoc icioV .erio m m ed euqna m ed sac el retiart ruop euvrp zeva suov euq noitcnof al ed esserdal ,tnemugra ne ,tnassinruo f iul ne reldnah_ wen_tes noitcno f al releppad alec ruop ti ffus suov lI .erio mm ed euqna m ed sac ne eleppa tios elleuq rednamed ed te xiohc ertov ed noitcno f enu rini fd ed elbissop tne melag tse li siaM .cehcd sac ne colla_dab noitpecxe enu ehcnelcd wen ,tua fd raP
#include <cstdlib> // pour exit #include <new> // pour set_new_handler #include <iostream> using namespace std ; main() { void deborde () ; // proto fonction appele en cas manque mmoire set_new_handler (deborde) ; long taille ; int * adr ;

) w o r h t o n ( w e n e d n o i t a s il i t u d e l p m e x E

6 - Les exceptions standard

529

int nbloc ; cout << "Taille de bloc souhaitee (en entiers) ? " ; cin >> taille ; for (nbloc=1 ; ; nbloc++) { adr = new int [taille] ; cout << "Allocation bloc numero : " << nbloc << "\n" ; } } void deborde () // fonction appele en cas de manque mmoire { cout << "Memoire insuffisante\n" ; cout << "Abandon de lexecution\n" ; exit (-1) ; } Taille de bloc souhaitee (en entiers) ? 4000000 Allocation bloc numero : 1 Allocation bloc numero : 2 Allocation bloc numero : 3 Memoire insuffisante pour allouer 16000000 octets Abandon de lexecution Press any key to continue

6.5 Cration dexceptions drives de la classe exception


: eriannoitseg elpmis el ceva snoitpecxe sel setuot retpecretnid rs tse no ,etimil al .snoitpecxe sed rueirtlu tne metiart el etilica f nO .1 : snosiar xued snio m ua ruop ,noitpecxe ed sevird sessalc serp -orp ses rerc ed tnassertni rervas tuep liuq tnanetniam tiov nO .noitpecxe dradnats essalc al ed etnadnepdni noa f ed noitpecxe sessalc serporp son ini fd snoiva suon ,iciuqsuJ

catch (exception & e) { ..... }

: t n a v i u s er i a n n oi ts e g e l p m is u d e di al , e t c et d n oi t p e c x el t n a nr e c n o c fitacilpxe egassem nu rehci ffad elicaf srola tse lI .sessalc serporp ses snad eirporppa no -a f ed rini fder al ed noitidnoc ,sussed-ic etircd ,tah w noitcno f al rus re yuppas tuep nO .2 .noitpecxe essalc al sehcattar n on sn oitpecxe se d ruop sac el sap tiares en eC

catch (exception & e) // attention la rfrence, pour bnficier de la // ligature dynamique de la fonction virtuelle what { cout << "exception intercepte : " << e.what << "\n" ; }

reldnah_ wen_tes ed noitasilitud elpmexE

530

La gestion des exceptions CHAPITRE 23

6.5.1 Exemple 1

6.5.2 Exemple 2

: tah w erbme m noitcno f al snossini fder suon selleuqsel snad te ,noitpecxe essalc al ed sevird ,2_noitpecxe te 1_noitpecxe sessalc xued snorc suon leuqel snad elp mexe rei merp nu icioV
#include <iostream> #include <stdexcept> using namespace std ; class mon_exception_1 : public exception { public : mon_exception_1 () {} const char * what() const { return "mon exception nummero 1" ; } } ; class mon_exception_2 : public exception { public : mon_exception_2 () {} const char * what() const { return "mon exception nummero 2" ; } } ; main() { try { cout << "bloc try 1\n" ; throw mon_exception_1() ; } catch (exception & e) { cout << "exception : " << e.what() << "\n" ; } try { cout << "bloc try 2\n" ; throw mon_exception_2() ; } catch (exception & e) { cout << "exception : " << e.what() << "\n" ; } } bloc try 1 exception : mon exception nummero 1 bloc try 2 exception : mon exception nummero 2

ne )enahc( euer ruelav al evresnoc ruetcurtsnoc nos euq sno yovrp suon siaM .noitpecxe essalc al ed evird ,noitpecxe_nom essalc elues enu snorc suon ,elp mexe e mixued ec snaD

. e l e p p a ri o v al s a p e n e d e n i e p s u o s ,etnatsnoc erbmem noitcno f enud emro f al suos tah w rini fd ed tnatropmi tse liuq zetoN

)1( noitpecxe ed sevird noitpecxe sessalc ed noitasilitU

6 - Les exceptions standard

531

.)2 ici( snoitpecxed setros srueisulp ertne reugnitsid ed elbis -sop isnia etser lI .ruelav ettec essinruo f elleuq noa f ed tah w snossini fder suon te tnemugra
#include <iostream> #include <stdexcept> using namespace std ; class mon_exception : public exception { public : mon_exception (char * texte) { ad_texte = texte ; } const char * what() const { return ad_texte ; } private : char * ad_texte ; } ; main() { try { cout << "bloc try 1\n" ; throw mon_exception ("premier type") ; } catch (exception & e) { cout << "exception : " << e.what() << "\n" ; } try { cout << "bloc try 2\n" ; throw mon_exception ("deuxieme type") ; } catch (exception & e) { cout << "exception : " << e.what() << "\n" ; } } bloc try 1 exception : premier type bloc try 2 exception : deuxieme type

)2( noitpecxe ed evird noitpecxe essalc enud noitasilitU

.sr u e n e t n o c s e d t n as i li t u e m m ar g or p n u s n a d t n e m -natlumis tnenneivretni selle ,spmet ud trapulp al ,te seil tnemetiort tnos snoiton siort seC

.er dr od noitaler enud noitasilitul te stacidrp sel ,sruetarpod sruetarng sel ,semhtirogla sel ,sruetarti sel ,sruenetnoc sel : riovas ,euqhtoilbib ettec ed stnasop moc xuapicnirp sed noit -asilitul tnanrecnoc esab ed snoiton sel ceva resiraili ma f suov ed tse ertipahc ec ed fitcejboL .drakcaP ttelweH zehc eppolevd te ) LTS grba ne( yrarbiL etalpmeT dradnatS e mmon ,cilbup eniamod ud euqhtoilbib enud tirojam ne tnanevorp snoitcno f ed te sessalc ed snortap ed seutitsnoc tnos selle ertned tra p ul p a L .s e la ni g ir o s t u ae v u on e d er b m o n n o b tu o tr us erv u o c d y n o ,s ia M . C u d dr ad -nats euqhtoilbib al ed snoitcno f sed uo tne mmedcrp stircd stol f sed essigas liuq ,emron al t n a v a d + + C s n o isr e v s el s n a d s e u v r p s n oi t c n o f s e l s e t u ot e v u or t y n o , u d n e t n e n e i B .dradnats euqhtoilbib enud noitinifd al dnerpmoc ++C ud emron al ,C ud ellec em moC

1 Notions de conteneur, ditrateur et dalgorithme

Gnralits sur la bibliothque standard

24

; e c n e u q s e n i a tr e c e n u t n a v i us s n n o dr o sr u o j u o t t n o s sr u e n et n o c s el e u q e cr a p ,niol sulp arrev el no em moc ,euq elbissop tsen icec euq areton no ; ruenetnoc emm ud tnav -ius tnemll rus retniop erinam ed ,++ ruetarpol rap tne mrcni ert tuep ruetarti nu ; ruenetnoc nud tneml nu rus etniop ruetarti nuuq tnevuos arid no ; ruenetnoc n u d n n o d t n e m l n u e n g is d i u q r u el a v e n u e ds s o p r ue tar t i n u , n n o d t na ts n i n u : r u e t n i o p e d n o i t o n a l e si l ar n g i u q e nr e c -noc ruenetnoc essalc al rap tne melarng inifd tejbo nu tse ruetarti nU .ruetartid noiton al et i u d or t ni t a u q r u e ne t n o c n u r us s n o it ca s e d n o it as i n g o m o h d i c u o s e c s na d t se C

: sac let nu snad setnedcrp snoitaralcd sel tneiardneived euq ec icioV .snrec -noc stneml sed ep yt el rap ert marap ,rotacolla mon ed ,nortap noitcno f enu tse rein -red ec euq riovas srola tua f lI .tua fd rap iulec ed tigas lis e m m ,resilitu ruetacollal resicrp ed eriassecn tse li ,sac ec snad ,te sessalc ed snortap sel snad tua fd rap sert -marap sel erocne sap tnetpeccan snoitatne mlpmi seniatrec ,tnadnepeC .etnasia fsitas tne melarng tse iuq tua fd rap ruelav enu edssop ert marap dnoces eC .eriom m ed snoitarbil sel te snoitacolla sel ruop esilitu ruetacolla etid noitcno f enu rap te stneml sruel ed ep yt el rap siof al srtmarap tnos sruenetnoc ed snortap sel ,rueugir etuot nE

.erina m em m al ed em margorp es elle ,stner ffid sruenetnoc xued ceva elbas -ilar tse ennod noitca enuuq sd ,euq erid tuep nO .sruenetnoc stner ffid senum moc tnos ser b m e m s n o it c n o f e d p u o c u ae b te n o it as i n g o m o h d tr o f f e s or g n u ti a f t n o L T S e d sr ue t -pecnoc sel ,tilar nE .ertual ruenetnoc nud setnerf fid srt tnos selleuq ,iroirp a ,resnep tiarruop no tnod seirporppa stilannoitcno f ed esopsid ruenetnoc sessalc sec ed enucahC
list <int> li ; vector <double> ld ; list <point> lp ; /* liste vide dlments de type int */ /* vecteur vide dlments de type double */ /* liste vide dlments de type point */

: s et n av i us sn o it ara lc d sel rap )essalc enu tnat tniop( stniop ed etsil enu uo stnattolf ed ruetcev nu ,sreitned etsil enu eriurtsnoc arruop no ,elp mexe raP .stneml sruel ed ep yt el rap tne mel - l er u t a n t u ot s r t m ar a p s e s s a l c e d s n or t a p e d t i g a s l I . s fi t ai c o s s a x u a e l b a t s e l u o s el b m e s n e sel ,setsil sel ,sruetcev sel euq sellet seudnapr sulp sel sennod ed serutcurts sel retnesrper ed tnatte mrep ,sruenetnoc setid sessalc ed elb mesne nu tinruo f dradnats euqhtoilbib a L

534

1.2 Notion ditrateur 1.1 Notion de conteneur


Gnralits sur la bibliothque standard CHAPITRE 24
list <int, allocator<int> > li ; /* ne pas oublier lespace */ vector <double, allocator<double> > ld ; /* entre int> et > ; sinon, >> */ list <point, allocator<point> > lp ; /* reprsentera loprateur >> */

e uqrameR

.t n e m el ba n e vn o c sr u oj -uot ennoitcno f tnedcrp savenac el euq etros ed ,)(dne euq ruelav e m m al edssop )(nigeb ,ediv tse ruenetnoc nuuqsrol ,sruelliaD .srpa etsuj sia m ,ruenetnoc nud tne ml reinred el rus sap non ,retniop etsisnoc iuq ni f ed sruetarti sed sruelav sed tiralucitrap al areton nO
list<point> lp ; ..... list<point>::iterator il ; /* itrateur sur une liste de points */ for (il = lp.begin() ; il != lp.end() ; il++) { /* ici *il dsigne llment courant de la liste de points lp */ }

: ni f as u qs uj t u b d n os e d r u en e tn o c n u t ne m - e l l e it n e u q s r ir u o cr a p r u o p el b as il it u sr u o j u ot ts e ,s t n i o p e d e ts il e n u r us i c i t n e s r p ,t n a v -ius savenac el ,ruenetnoc el tios euq leuq ,euq etros ed ,)(dne te )(nigeb serbmem snoitcnof sed emro f suos ,rotareti ep yt ed serilucitrap sruelav sed tnessinruo f sruenetnoc sel suoT

.noitresnid ruetartil te xul f ed ruetartil tnores stnatrop mi sulp sel ; stirporp sel rei fidom ned tnettemrep sleuqsel , sruetartid sruetatpada sed elleppa nouq ec etsixe liuq arrev no ,e m m eD .timil sulp egasu nud tnos iuq )eitros te ertne( seirogtac sertua xued etsixe liuq snorrev suon ,72 ertipahc uA .tcerid scca te lennoitceridib ,lennoitceridinu : sruetartid seirogtac siort uqov snova suon ,icI

.tilagni rap rapmoc ert tuep ruetar - t i l e t n u , ert u o n e ; ) i + t i ( * t n e l a vi u q t i os ] i [ t i e u q e r i n a m e d , i n i f d s r o l a t s e ] [ r u e t a r -pol ,tnevuos ; snes nu a i+ti noisserpxel ,ruetarti let nu tse ti is ,sac ec snad ; tcerid scca ; l e n n o it c er i d i b ti d sr ol a ts e r u et ar ti l , + + r a p e tr e f - fo tse iuq ellec srola etuojas tilibissop ettec em moc ; -- ruetarpol rap noitatne mrcd : reilucitrap ne ,seriatne mlppus stirporp sed redssop tnorruop sruetarti sniatreC .lennoitceridinu ruetarti nu e mmon nouq ec tnednopserroc iuq rer mund snonev suon euq stirporp sel mu minim ua tnadssop te rotareti mon el tnatrop ruetarti nu tnessinruof sruenetnoc sel suoT . ti l a g n i u o t i l a g r a p s r a p m o c ert t n e v u e p r u e n e t n o c e m m n u r us sr u e t ar t i x u e d ; etsil ettec ed tniop nu engisd ti* ,stniop ed etsil enu rus ruetarti nu tse ti is ,elp -mexe rap ; * ruetarpol tnasilitu ne ,ruetniop nu e mmoc ,cner frd ert tuep ruetarti nu
535

1.3 Parcours dun conteneur avec un itrateur


e uqrameR
1 - Notions de conteneur, ditrateur et dalgorithme

1.3.1 Parcours direct

.ser b m e m s n oi t - c no f s en ia tre c r ap te s e m ht ir og l a s el rap e s il it u sr t ares r ue tar t i d el la vre t ni d no i to n e tt e C .ecneuqs enu tne mro f ellavretni tec rap sngisd stneml sel euq tne mel -ag tid nO .)2pi ,1pi[ tnevuos eton es ellavretni teC .2pi rap tniop iulec )sirpmoc non sia m( uqsuj 1pi rap tniop tnemll ed tnadnets >tniop<rotcev ep yt ud ruenetnoc nud ellav -retni nu tini fd 2pi ,1pi sruelav ed elpuoc el ,snoitidnoc sec snaD .2pi ed ruelav al enneitbo no ,++ rap 1pi ed snoitatne mrcnid erb mon niatrec nu srpa ,euq tid tne mertua ,1pi siuped elbissecca tios 2pi euq sellet sruelav sed tnedssop 2pi te 1pi euq ,sulp ed ,snosoppuS : ralcd tia nol euq snosoppuS .sruetartid sruelav xued ed emrof suos senrob sel tnasicrp ne ruetartid ellavretni nu em mon nouq ec rini fd tuep no ,tnemelarng sulP .nif enu uqsuj tubd nud riruocrap sel sruojuot tuep nouq etros ed ,snnodro tnos sruenetnoc sel suot ,reuqramer tia f jd snoval suon e mmoC
vector<point>::iterator ip1, ip2 ; /* ip1 et ip2 sont des itrateurs sur */ /* un vecteur de points */ list<point> lp ; ..... list<point>::reverse_iterator ril ; /* itrateur inverse sur */ /* une liste de points */ for (ril = lp.rbegin() ; ril != lp.rend() ; ril++) { /* ici *ril dsigne llment courant de la liste de points lp */ }

: esrevni erdrol snad stniop ed etsil enu riruocrap tne mmoc icioV .rei merp el tnava etsuj etniop )(dner euq sidnat ,ruenetnoc ud tne ml reinred el rus etniop )(nigebr euq erid tuep no ; )(dner te )(nigebr serbmem snoit -cno f sel rap seinruo f rotareti_esrever ep yt ed serilucitrap sruelav sed tnemelag etsixe li ,ertuo ne ; ecneuqsnoc ne etpada srola tse ,ruetarti tec suqilppa ,-- te ++ ed noitaci fingis al ,sac ec snaD .esrevni erdrol tnavius ruenetnoc el rerolpxed te mrep li ,reimerp ud ritrap tiurtsnoC .rotareti_esrever ton ruetarti dnoces nud tnesopsid )-- te ++ reuqilppa iul cnod tuep no( lennoitceridib sniom ua tse rotareti selleuqsel ruop sruenetnoc sessalc sel setuoT .t c er i d scca sruetarti sed uq reuqilppas tuep en < ruetarpol rac ,dne.pl < li euq ellet nois -serpxe enu ,rof elcuob al ed trrad noitidnoc e mmoc resilitu sap tuep en no ,noitnettA
1.3.2 Parcours inverse

536

1.4 Intervalle ditrateur


e uqrameR
Gnralits sur la bibliothque standard CHAPITRE 24

.e v -irrad iulec ed tubd el euq ennoitne m en no ,trapd ed ellavretnil tinruo f nol is ,euq zetoN
vector<int> v ; /* vecteur dentiers */ list<int> l ; /* liste dentiers */ ..... copy (v.begin(), v.end(), l.begin() ) ; /* recopie lintervalle [v.begin(), v.end()), */ /* partir de lemplacement point par l.begin() */

: sre it ne d e tsi l e n u s na d sre it n e d ruetcev nu reipocer tne mmoc ,elp mexe rap ,icioV .ruenetnoc reimerp ud xuec euq ep yt e mm ud tneios stneml ses euq uep ruop ,ep yt ertua nud ruenetnoc nu srev nnod ep yt nud ruenetnoc nud snoitamro fni sed reipocer ed tne melica f tnortte mrep se mhtirogla sniatreC .ruenetnoc ud tilargtnil tiadnopserroc ecneuqs ettec ,ici ; ruetartid ellavretni nu rap eini fd ecneuqs enu sia m ,ruenetnoc nu sap non ,tneuqilppas semhtirogla sel ,selp mexe xued sec erdnetne tnessial el e mmoc ,elarng erina m enuD
n = count (l.begin(), l.end(), 1) ; /* compte le nombre dlments valant 1 */ /* dans la squence [l.begin(), l.end()) */ /* autrement dit, dans tout le conteneur l */ list<int> l ; n = count (v.begin(), v.end(), 1) ; /* compte le nombre dlments valant 1 */ /* dans la squence [v.begin(), v.end()) */ /* autrement dit, dans tout le conteneur v */ vector<int> v ; /* liste dentiers */ /* vecteur dentiers */

: )l rap v recalpmer ed tnatnetnoc es ne( erialimis noa f ed aredcorp no : e r al c d e tsi l e n u s n a d 1 x u a g st n e m l d er b m o n el re t p m oc r u o P

: isnia redcorp arruop no

: r ap ra lc d r ue tc e v n u s n ad 1 x u a g st n e m l d er b m o n el re t p m oc r u o p ,e l p m e x e r a P .st n er f f i d sr ue n et n o c se d se u q il p pa ert t n orr u o p s n o it c n o f s e m m s el e u qs i u p se n g o m o h s rt se m -margorp sed tiudnoc alec ,erocne L .tne mugra ne sinruo f tnos sruel iuq sruetarti sed ep yt el rap srt marap ,snoitcno f ed snortap ed emro f suos sinruo f tnos se mhtirogla stner ffid se L .< ruetarpol tnassini fdrus ne elpmexe rap ,T ep yt el rus erdrod noitaler enu ini fd tia nol euq te tcerid scca ruetarti nud esopsid ruenetnoc ec euq uep ruop ,T ep yt ed stejbod ruenetnoc nu reirt arruop no ,e m m eD .== ruetarpol ed noitini fdrus rap tios ,tua fd r a p t i os , ei n i f d t n e m e l b a n e v n o c ti os s t n e m l x u e d e d t il a g l e u q t n a d n e p e c ar d u a f li ; elbmesne uo ruetcev nu ,etsil enu snad neib issua ennod ruelav enu tna ya tneml reimerp el revuort arruop no ,elpmexe raP .stneml ses ed ep yt el te erutan as tneios euq sleuq ,ruenet -noc nu seuqilppa ert tnevuep snoitarpod puocuaeb ,ruetarti nud siaib el rap ,euq tiaf el rus edno f es ellE .setnedcrp xued sel euq elanigiro issua tuot tse emhtiroglad noiton a L

1.5 Notion dalgorithme


1 - Notions de conteneur, ditrateur et dalgorithme

537

-ld snoitresni sed te mrep ruetcev nuuq arrev no ,elpmexe raP .snoitarpo seniatrec ed tic -aci ffel rap ,stilannoitcno f sruel ertuo ,tnesirtcarac es sruenetnoc stnerf fid sel ,tilar nE .s e u q it n e di eri o v ,s e n is i o v s t il a n n o it c n o f s e d sr ol a t n e i ar e d ss o p sr u e n et n o c e d p u o c - u a e B .s e t n e c a j-s u o s s e n n o d e d s er u t c urt s s el r a p s a c n u c u a n e t e s t i l a n n oi t c n o f sr u e l r a p tne meuqinu sertua sed snu sel reugnitsid es tneiarved sruenetnoc stner ffid sel ,snoitidnoc se c s na D . n o it at n e m l p m i r ue l e d s et n a d n e p d ni ert t n e vi o d se u q its ir tc ara c sr ue l ,s e n n o d sruel tne melbanevnoc tneluspacne iuq sessalc sed tnos sruenetnoc sec o tnemom ud ritrap ,siaM .selleusu sennod ed serutcurts sed tnednopserroc sruenetnoc sel euq tnevuos tid nO

.sr u e t -niop ed ellavretni nu rap sini fd isnia stneml sel rengisd ruop )ruenetnoc ed ecneuqs ed sulp sia m( stne mld ecneuqs ed erocne snorelrap suon ,ticilp mis ed icuos raP

.tejbo nu sap tnatn t ,snes nucua tiaruan iuq )(nigeb.t euq ellet noitaton enu resilitud noitseuq sap tsen li ,ici ,udnetne neiB
int t[6] = { 2, 9, 1, 8, 2, 11 } ; list<int> l ; ..... copy (t, t+6, l.begin()) ; /* copie de lintervalle [t, t+6) dans la liste l */

: ru e n -etnoc nu snad erianidro uaelbat nud stneml sed eipocer al ruop esilitu tne mmeuqr f tse tilibissop etteC .semhtiroglad erbmon nob snad s yolp me ertd te mrep ruel aleC .tcerid scca ruetarti nud stirporp sel tne mellerutan tuot tnedssop sleusu sruetniop sel ,rO .rotareti euq let tejbo nud ecalp al silitu ert tuep )...noit -atnemrcni ,noitaicner frd( seudnetta stirporp sel tnadssop elbairav etuot uo tejbo tuot euq tia f ruetarti nu tnesilitu serbmem snoitcno f sel uo se mhtirogla sel tnod erinam a L

.ticaci ffed snoitardisnoc sed snad aredisr noitaci fitsuj a L .elbarapmoc erb me m noitcno f enud esopsid tsil e mmoc ruenetnoc nuuq emm srola ,dnif m mon ennod ruelav enud ehcrehcer ed emhtirogla nu etsixe liuq arrev no ,isniA . e u l o s b a s a p ts e n e u q o v n o it as i n g o m o hl e u q t i a f e l r a p n g ert s i o fr a p arr u o p n O

538

2.1 Conteneurs et structures de donnes classiques

2 Les diffrentes sortes de conteneurs


e uqrameR

1.6 Itrateurs et pointeurs


e uqrameR
Gnralits sur la bibliothque standard CHAPITRE 24

nob euq euv ed erdrep sap tua f en li ,sac ec snaD .essalc ep yt ed stneml sed ,reilucitrap ne ,cnod te ep yt leuq etropmin uqilppa ert tuep ruenetnoc nu tnassini fd essalc ed nortap e L

.unev tne mom el snordneiver y suoN .ruenetnoc ud euqsnirtni erdrol rebrutrep ed euqsir no ,srola euqsiup ,stnatsixe s t n e m l d sr u el a v s e l t n e m e ll ei t n e u q s r e i fi d o m e h cr e h c n ol is , e h c n a v er n e , t n e m e ts e f - in a m ar u a n e y li ; fi ta ic os sa r ue ne t n oc nu d s tn e m l se d nu ca h c t ne me ll e it ne uq s r e ni ma xe euqsir nucua arua yn li ,elp mexe raP .emlborp tnoresop sertuad euq sidnat ,s fitaicossa sr u e n et n o c s e d r e u q il p p as t n orr u o p s l e i t n e u q s sr u e n e t n o c s e d r u o p s e u v r p s n oi t ar p o seniatrec o eruse m al snad ,noisu fnoc retrp sruelliad tuep tcepsa teC .)(dne te )(nigeb sruelav sed te rotareti mmon ruetarti nud sniom ua sruojuot aresopsid iuq ruenetnoc let nud stneml sel tnemelleitneuqs riruocrap ed elbissop sruojuot aretser liuq tse ecneuq -snoc elapicnirp a L .e mmargorp el rap ini fd sulp tsen iuq erdro nu tnavius erid--tsec ,euq -snirtni noa f ed ,sio f ettec ,siam nnodro ert arved ruenetnoc let nu ,ticaci ffed snoitseuq setnedivd ruop ,tia f nE .nnodro sulp tios en fitaicossa ruenetnoc nuuq cnod elbmes lI .tne mecalpme nu resicrp ed elitu sulp tne meuqiroht ares en li ,ruenetnoc ec snad tne ml levuon nu rersni ruoP .eicossa ruelav al edcca no ,lc al ed ritrap .) mon el i ci( l c e n u e m m o n n o u q e c ) .. . es s er d a , e n o h p l t e d or m u n( r u el a v e n u ei c oss a n o ,s a c ec snaD .euqinohplt eriotrepr nu rap ertsulli ert tuep fitaicossa ruenetnoc ed noiton a L .isiohc tnemeticilpxe a nouq tiordne nu ne tia f el no ,tne ml nu e mirppus nouq uo ersni no dnauQ .erdro tec tnavius ruenetnoc el riruocrap tuep nO .etsil enud uo ruetcev nud xuec emmoc snnodro tnos iuq stneml sed dnopserroc ecneuqs ne ruenetnoc ed noiton a L .s f it ai c ossa sr ue n et n oc se l ; )sleitneuqs sruenetnoc uo( ecneuqs ne sruenetnoc sel : seirogtac xued ne sruenetnoc stner ffid sel essalc e mron a L

.setner ffid sessalc ed neib te leb tiassigas lis em moc ,stilibissop sruel ed egassitnerppa nu rap essap sruenetnoc stner ffid sed egasu nob nu ,snoitidnoc sec snaD .elle ceva redicnoc tnatua ruop snas ,stilannoitcno f sed nalp el rus ehcorp tse ne iuq euqissalc ennod ed erutcurts al euqov ruenetnoc nu ruop isiohc mon el euq erid tuep no ,evitinifd nE .tne megral tnorennoitidnoc al iuq ticaci ffed setniartnoc sed tiudortni elle ,sruen - e t n o c s e d n o i t a t n e m l p mi l s a p es o p m i n e mr o n a l e u q n ei b , is ni A . ets i l e n u d i u l e c s n a d euq ruetcev nud sac el snad tnatsixe tneml nu tnemedipar sulp redcca tuep no ,ehcnaver nE .etsil enu cevauq secacif fe snio m tnos ic-sellec siam tniop leuq etropmin ne stnem
539

3 Les conteneurs dont les lments sont des objets


2.2 Les diffrentes catgories de conteneurs
3 - Les conteneurs dont les lments sont des objets

el etcepser enrecnoc essalc al is sac el rs neib ares iuq ec ,seirporppa snoitcnof sel riovrp ardua f li ,eriartnoc sac el snaD .setnasia fsitas tnores tua fd rap seuvrp serbmem snoitcno f s e l , e u q i m a n y d ei tr a p e d s a p t n e d s s o p e n s nr e c n o c s t e j b o s e l is , el ar n g er i n a m e n u D . n oi t a t c e f f a l u o ) n oi tr es n i( ei p o c er ed ruetcurtsnoc ua leppa tnore f ,issua selle ,iuq te ruenetnoc nud tneml nu rus tnat -rop snoitarpo sertuad tne melag etsixe liuq ios ed av li ,siaM .ruenetnoc nud elbmesnel rus tnatrop snoitarpo sed tnenrecnoc reuqovd snonev suon euq secnatsnocric siort se L .stneml ses suot ed eipocer al enartne iuq ec ,ruelav rap tia f es noitcnof enud tnemugra ne ruenetnoc nud noissi msnart al ,tua fd rap ,euq euv ed erdrep sap ardua f en li ,sruellia raP .v ed stneml sel suot ruop tniop essalc al ed eipocer rap ruetcurtsnoc el tnemellerutan tuot arelleppa leuqel ,eipocer rap ruetcurtsnoc ud leppa rap ruetcev uaevuon n u d n o i t a r c t e s t n e m l s e s s u o t e d n o i t c u r t s e d a r u a y l i , e t n a s i f f u s n i t s e w e d e ll i a t a l i s , e h c -naver nE .) w ed seriatnedcxe stne ml sel ruop ruetcurtsed el arelleppa no( v ed stneml sel suot ruop noitatcef fad ruetarpol releppad tnemevitce ffe aretnetnoc es no ,etnasif fus tse w ed elliat al is ,tnemelarng ,te ffe nE .selpmis sniom uep nu tnos sesohc sel ,ici ,tnadnepeC : e uq le t sac nu snad noitatceffad ruetarpol ceva selbarap moc sesohc sed erdnettas tiarruop nO .reipocer tniop ep yt ed stne ml siort sed nucahc ruop tniop essalc al ed eipocer rap ruetcurtsnoc el arelleppa leuqel ,>tniop<rotcev essalc al ed eipocer rap ruetcurtsnoc ud leppa arua y li : v ed ritrap ,ruetcev ertua nu tiurtsnoc nol iS .tniop ed tnemugra snas ruetcurtsnoc nud leppa arua y li ,stneml siort sed nucahc ruoP : tniop ep yt ed stneml siort ed ruetcev nu tiurtsnoc )essalc enu tnat tniop( etnavius noitaralcd al euq arrev no ,elp mexe raP . ei p o c er r a p r u e t c urt s n o c n u d l e p p a l ti os ; eri ass ec n t se n t ne m u g -ra nucua euqsrol tuafd rap ruetcurtsnoc nud rigas tuep li ; ruetcurtsnoc nud leppal tios : stneml sec ed nucahc ruop ,enartne ,stejbo sed tnos stneml sel tnod ,ediv non ,ruenetnoc nud noitcurtsnoc etuoT
vector<point> v(3) ; /* construction dun vecteur de 3 points */ vector<point> w (v) ; /* ou vector v = w ; */ w = v ; /* le vecteur v est affect w */

.ser b m e m s n oi tc n o f s e n -iatrec ed seuqita motua sleppa sed renartne tnov stne ml sec ed snoitalupina m ed erbmon
540
Gnralits sur la bibliothque standard CHAPITRE 24

3.1 Construction, copie et affectation

; ruetcev ed ni f ne snoitresni sed uo etsil enu snad snoitresni sed sac el ares ec euq arrev no ; )ecneuqs al ed stnemld erbmon ud etnadnepdni ,etnatsnoc enu rap nrob ttulp( tnatsnoc tse sp met el selleuqsel ruop erid--tsec ,)1(O ne snoitarpo sed : tnemeuqip yt arertnocner nouq isnia tseC .rinevretni arruop )ruenetnoc e d e c n e u q s e n u d u o( r u e n e t n o c n u d s t n e m l d N er b m o n e l , er d n e tt a ys t u e p n o e m m o C . x k = < t : ti a n o ,s a c s el s u ot s n a d , e u q e ll e t k et n at s n o c e n u e ts i x e l is ) x( O t i d ts e n o i t ar p o e n u d t s p m e t e L : is n i a t i ni f d es iuq ))...(O( uadna L ed etid noitaton al tne melarng tisiohc no ,ruenetnoc nu uq -ilppa emhtirogla nud uo ruenetnoc nud erb me m noitcno f enud ticaci ffel ed reguj ruoP

.eriassecn ares ec euq siof euqahc snoresicrp el suon ,nioseb ed ep yt ec ed euqidosip tcepsal ed unet etpmoc ,sio f ettec ,elarng erinam enuD .s ert ua s i ort s e d s n o it i ni f d s el r et i v t n orr u o p s us se d-i c se t n esr p e u q it a m ot u a n o it ar n g e d s t i li b iss o p s e l : e nr e c n o c es s a l c a l r u o p < r u e t ar p ol s n i o m u a ri n i f d ar d u a f l i , er o c n e l ,tne metsefinaM .ruenetnoc ud stne ml stner ffid sed => uo =< ,> ,< sruetarpo sed nul rap ,nosiarapmoc al rus tnedno f es ic-sellec euq snorrev suon ; 52 ertipahc ua snorenimaxe suon euq seuqihpargocixel snosiarapmoc ed setid stilibissop sel snad edisr elp mexe ertua nU .tua fd rap noisrev ed sulp edssop en ,sio f ettec ,leuqel ,== ruetarpol ed resopsid tnemetse finam arved e n r e c n o c e s s a l c a l , s a c e c s n a D . t si l r u e n e t n o c u d d n i f e r b m e m n o i t c n o f a l t i a f e l e m m o c ,ennod ruelav ed tneml nud ehcrehcer al ed iulec tse stnediv sulp sel selpmexe sed nuL .stne ml sed essalc al ed serbmem snoitcno f seniatrec ed seuqita motua sleppa sed renartne tnevuep iuq ruenetnoc ed seipocer uo snoitcurtsnoc sel euq snoitarpo sertuad etsixe lI

. s t e j b o s e l s u o t t n e m e u qi t a m t s y s t n e nr e c n o c sl i o er u s e m al s n a d , st n i o p s t n er f f i d s e c sap snorelleppar en suon ,semhtirogla uo sruenetnoc stner ffid sed snoitpircsed sel snaD

: euq neib zetoN .)91 ertipahc ud 9 ehp -argarap ua tlpmoc te( 51 ertipahc ud 4 ehpargarap ua soporp euqinonac essalc ed amhcs
541

4 Efficacit des oprations sur des conteneurs


3.2 Autres oprations
e uqrameR
Ds quune classe est destine donner naissance des objets susceptibles dtre introduits dans des conteneurs, il nest plus possible den dsactiver la recopie et/ou laffectation. 4 - Efficacit des oprations sur des conteneurs

: is n i a t n e m e l p m is t n a d c or p n e t at l us r e m m e l t i ar d n e it b o n o , u d n et n e n e i B
main() { list<float> lf ; void affiche (float) ; for_each (lf.begin(), lf.end(), affiche) ; cout << "\n" ; ..... } void affiche (float x) { cout << x << " " ; }

: e ts il e n u d stne ml sel suot rehci ffa ruop euqinhcet ettec resilitu tne mmoc tnartnom elp mexe nu icioV .esilitu sap ares en elle ,tios ne liuq iouq ,siam ruoter ed ruelav enu edssop noitcno f ellet enuuq tidretni sap tsen lI .)noitalipmoc ed ruerre enu tiardneitbo no ,eriartnoc sac el snad( stnadnopserroc stneml sed ep yt ud tnemugra nu redssop tiod f noitcno f al ,udnetne neiB : snad e mmoc ,emhtiroglal ed tne mugra ne tnemelp mis essap srola tse noitcno f etteC .)ruetartid ellavretni nu rap einifd( ecneuqs enud stneml stner ffid xua ennod noitcno f enu reuqilppad tnette mrep serbmem snoitcno f seuqleuq te semhtiroglad puocuaeB
for_each(it1, it2, f) ; /* applique la fonction f chacun des lments */ /* de la squence [it1, it2) */

.sdradnats semhtirogla sed elb mesnel tnavircd C exennal snad snore f suon euq ec sruelliad tseC .senrecnoc snoitarpo sed erutan al rennoitnem te enne yom enud uo mu mixam nud tigas lis reuqidni tiarduaf li ,sicrp ert ruop ; fitacidni tnemevitaler ert -carac nuuq an noita mro fni ellet enuuq euv ed sap ardrep en no ,elarng erina m enuD ...)NgoL(O ne snoitarpo sed ; ruetcev nud euqnocleuq tniop nu ne snoitresni sed sac el ares ec euq arrev no ; ecneuqs al ed stnemld erbmon ua lennoitroporp tse sp met el selleuqsel ruop erid--tsec ,)N(O ne snoitarpo sed
542
Gnralits sur la bibliothque standard CHAPITRE 24

5.1 Fonction unaire

5 Fonctions, prdicats et classes fonctions

main() { list<float> lf ; void affiche (list<float>) ; lf.affiche() ; ..... } void affiche (list<float> l) { list<float>::iterator il ; for (il=l.begin() ; il!=l.end() ; il++) cout << (*il) << " " ; cout << "\n" ; }

. n o it c n o f t ej b o n u t i o s , e ll e u s u noitcno f enu tios ,leppar ed noitcno f em moc tne mmer ffidni ,rinruo f iul tuep nouq tnertnom iasse noitcno f al ed sleppad selpmexe se L .euqnocleuq ep yt ed f noitcno f tejbo nud e mrof suos leppar ed noitcno f enu tnemugra ne tnavecer snoitcno f ed ellima f enu tini fd iasse n oi t c n o f e d n ort a p e l , i c I .s n o i t c n o f e d s n ort a p e d s a c el s n a d t n e t n e s r p sl i u q t r t n il ert -nom iuq ertua nu iciov nE .noitasilitud elpmis elpmexe nu nnod srola snoiva ne suon te 51 ertipahc ud 6 ehpargarap ua stnesrp t tno snoitcno f stejbo sel te sessalc se L .euqnocleuq ep yt ed tejbo nud e mro f suos neib te leb siam ,noitcno f enud emro f suos sap non ,tnadnop -serroc nortap ud noitini fd al snad euvrp tse leppar ed noitcno f ettec ,spmet ud trapulp a L . t n e m u gr a n e esi ms n ar t a i u l n o u q n oi t c n o f ert u a e n u r el e p p a e n e m a ts e n o it c n o f enu leuqel snad emsinac m let nu reuqov ruop leppar ed noitcno f ed tnevuos elrap nol te euqnocleuq noitcno f enu retissecn tnevuep sli ,elarng erina m enuD .tne mugra ne tac -idrp nu tneiatissecn serbmem snoitcno f uo semhtirogla sniatrec euq riov ed snonev suoN
5.3.1 Utilisation dobjet fonction comme fonction de rappel

: tnemugra ne ssap tacidrp nu tnai firv ecneuqs enud tne ml reimerp el revuort ed temrep fi_dnif emhtiroglal ,elpmexe raP .tnemugra ne tacidrp nu essinruof ruel nouq tnoretissecn serbmem snoitcno f seniatrec te se mhtirogla sniatrec ,erocne L .ep yt e mm ed stne mugra xued ed tnasopsid erid--tsec ,serianib stacidrp sed te tnemugra lues nud tnasopsid erid--tsec ,serianu stacidrp sed arertnocner nO .eurt ardnopserroc ruelav ertua tuot euq te eslaf ardnopserroc 0 srolauq tnahcas ,eritne ert tnemelleutnev tuep ruelav ettec ,tne meuqitamotua ecalp ne sesi m tnos iuq seticilpmi snoisrevnoc sed unet etp moC .loob ep yt ed ruelav enu eiovner iuq noitcno f enu resirtcarac ruop tacidrp ed elrap nO

5.3 Classes et objets fonctions

5.2 Prdicats

#include <iostream> using namespace std ; class cl_fonc /* definition dune classe fonction */ { int coef ; public : cl_fonc(int n) {coef = n ;} int operator () (int p) {return coef*p ; } } ; main() { list<int> l ; list<int>::iterator il ; bool impair (int) ; ..... il = find_if (l.begin(), l.end(), impair) ; /* il dsigne le premier */ ..... /* lment de l vrifiant le prdicat impair */ } bool impair (int n) /* dfinition du prdicat unaire impair */ { return n%2 ; }

5 - Fonctions, prdicats et classes fonctions

543

: seuqigol snoitarpo xua tnadnopserroc stacidrp sel tne melag evuort nO .)/( sedivid ,)*( semit ,)-( sunim ,)%( suludom : stnadnopserroc sruetarpo sel te stnatsixe snortap sertua sed smon stner ffid sel icioV .tni xued ed e mmos al ruop >tni<sulp elpmexe rap ,s e l l e us u s eri a ni b s n o it ar p o x u a t n a d n o ps err o c s n o i t c n o f s e ss a l c s e d t n e m e l a g e ts i x e l I

e uqrameR

.sessalc seniatrec ed noitcurtsnoc al snad ep yt ed tnemugra em moc sesilitu tne melag tnores selle ,trap ertuaD .leppar ed snoitcno f em moc setic ertd te mrep ruel iuq ec ,tnemugra snas ruetcurtsnoc nud tnesopsid snoitcno f sessalc sec setuoT .)=<( lauqe_ssel ,)=>( lauqe_retaerg ,)<( ssel ,)>( retaerg ,)=!( ot_lauqe_ton ,)==( ot_lauqe : stnadnopserroc sruetarpo sel te stnatsixe snortap ed s mon stner ffid sel icioV . t n i o p e ss a l c a l s n a d i n i f d t n e m e l b a n e v n o c er t sr ol a ar v e d iuq ,< ruetarpol rap tniop ep yt ed stejbo xued ed nosiarapmoc al tnadnopserroc nortap n o i t c n o f e n u a r e i c n a t s n i > t n i o p < s s e l , er d n et ta ys t ue p n o e m m o C . t n i e p yt e d st n e m l xued ed )ssel( < rap nosiarapmoc al tnadnopserroc nortap noitcno f enu eicnatsni >tni<ssel , e l p m e x e r a P . e p yt e m m e d s t n e m l x u e d e d n osi ar a p m o c e d s eri a n i b st a c i d r p s e d tnadnopserroc snoitcno f sessalc ed snortap ed erb mon niatrec nu etsixe li ,>lanoitcnuf< snaD .s n o i t c n o f s t e j b o d e mr o f s u os l e p p ar e d s n oi t c n o f sr u el u v r p tno se mhtirogla sel suot iouqruop tseC .essua f tse euqorpicr al euq areton no ,ehcnaver n E . el le us u n oi tc n o f e n u ri o ve cer t ue p n oi tc n o f t ej b o n u t n a d n et ta e m h tir o gl a n u u q ti o v n O
snoitcnof stejbod noitasilitud elpmexE
f(1) f(4) f(1) f(4) f(1) f(4) : : : : : : 5 20 3 12 7 28

544

5.3.2 Classes fonctions prdfinies


Gnralits sur la bibliothque standard CHAPITRE 24
int fct (int n) { return 5*n ; } template <class T>void { cout << "f(1) : " << cout << "f(4) : " << } main() { essai (fct) ; essai (cl_fonc(3)) ; essai (cl_fonc(7)) ; } // appel essai, avec une fonction de rappel usuelle // appel essai, avec une fonction de rappel objet // idem essai (T f) // dfinition de essai qui reoit en f(1) << "\n" ; // argument un objet de type quelconque f(4) << "\n" ; // et qui lutilise comme une fonction /* definition dune fonction usuelle */

; c R a srola ,c R b te b R a : euq slet ,c ,b ,a euq erid--tsec ,evitisnart tse R ; ) a R a(! , a : isnia tini fd es elleuqal ,tcirts elbiaf erdrod noit -aler enu ert tiod R euq esicrp e mron a L .noitcno f enu rap uo ruetarpo nu rap eini fd tios elleuq ,noitseuq ne erianib noitaler al ,R sruojuot snoreton suon ,snoitaton sel rei filpmis ruoP

. tn a ne t ni a m r e ni ma x e s n ol la suon euq seuqov stirporp sel retcepser arved noitcno f ettec uo ruetarpo tec ,erocne L .s t n e m l x u e d e d n o si ar a p m o c e d n o i t c n o f e n u t n e m e ti ci l p x e t n a ssi nr u o f n e t i os ; ) i n i f dr us u o t u a f d r a p( r u et ar p o ert u a n u t n ass is i o h c n e t i os : )ini fdrus uo tua fd rap( < ruetarpol dnopserroc iuq ellec euq ertua noitaler enu resilitud risiohc tuep no ,)...esab ed ep yt ,essalc( stne ml sed ep yt el tios euq leuq te ,sruellia raP . s i li t u e m ht ir o g l a l e d u o n oi t c n o f al e d t n e m e n n oi t c n o f n o b u a seriassecn ,stirporp ed erb mon niatrec nu retcepser arved ruetarpo tec ,erdnetta ys tuep no e mmoc te ,sac ec snaD .ruetarpo tec tne melbanevnoc rini fdrus ardua f li ,< ruetarpol ed tua fd rap sap esopsid en iuq essalc ep yt nud tnos snrecnoc stne ml sel is ,ehcnaver nE .snoitseuq ed resop es port snas ,tne mecnannodrod snoitarpo setner ffid sec reuqilppad erttemrep es tuep no ,stneml sel rennodrod tnatte mrep )<( ellerutan noitaler enu etsixe li leuqel ruop ,gnirts uo erialacs ep yt nud tnos nrecnoc ruenetnoc ud stneml sel euq tnat ,udnetne neiB . er dr o n i a tr e c n u t n a v i u s r u e n -etnoc nud stneml sel tnesinagror ,issua xue ,iuq irt ed se mhtiroglad puocuaeb etsixe li ; er dr o ni atr ec n u t n a v i us st n e m - l s e s r e g n a r r a r e d t n a t t e m r e p , t r o s er b m e m n o it c no f e n u d ares o ps i d t s i l r u e ne t n o c n u ; e c n e n a mr e p n e s n n o dr o t n or es f it ai c -ossa ruenetnoc nud stneml sel ,tid t jd a li e mmoc ,ticaci f fed snoitseuq sed ruop : selpmexe seuqleuq ne-snotiC .ruenetnoc nud stneml stner ffid sel rennodrod tnattemrep noitaler enud ecnassiannoc al tnoretissecn snoitautis ed erb mon niatrec nU

.t n e m me d crp se i d ut t t n o iuq se ll ec e uq t ne uqr f s ni o m egasu nud tnadnepec tnos sessalc seC .)!( ton_lacigol ,)||( ro_lacigol ,)&&( dna_lacigol
545

6.2 Proprits respecter

6.1 Introduction

6 Conteneurs, algorithmes et relation dordre

6 - Conteneurs, algorithmes et relation dordre

.=> te > ,=< ,< sruetarpo sel ruop e mm ed av ne lI .etnerhocni riov ,etnadnepdni tne m -elatot erina m ed ,=! ruetarpol te == ruetarpol sio f al ,ennod essalc enu ruop ,rini fd tne meuqiroht tuep nol euq tia f ++C rap silitu sruetarpod noitini fdrus ed emsinac m e L .spmet rei merp nu snad rongi ert tuep ehpargarap eC .B.N

.uluov tne mom ua tniop ec rus noitnetta ertov uaevuon snoreritta suon ,udnetne neiB .tneml lues nu setiudr tnores noitseuq ne ecnelaviuqd sessalc sel srola euqsiup < rap tiudni erdrol aretimil es nouq tnat ,gnirts uo euqir mun ep yt ed stne m -l sed ceva artarappan ecner ffid enucua ,udnetne neiB .ruenetnoc ud euqsnirtni erdrol rus edno f es fitaicossa ruenetnoc nud dnif erbmem noitcno f al euq sidnat ,== rus edno f es dnif e mhtiroglal ,elpmexe raP .)non uo inifdrus ,< ed srola arigas li ,tua fd rap( erdrod noitaler enu rap setiudni ecnelaviuqd sessalc sel rus uo ,)non uo ini fdrus( == ruetarpol r us e d n o f es st n e m l x u e d e d t il a g l i s ri o v a s ar d u a f li ,s a c s n i a tr e c s n a d , t n e m m a t o N .tnordnepd ne iuq snoitarpo sed uaevin ua secneuqsnoc sel tne metcerroc riovrp ned er use m ne er t n eib ar du a f li ,er dr o d n oi ta ler erporp as r i ni f d ne ma ar es n ouqsr o l , is n i A .ruenetnoc el snad vresnoc ares lues nu te seuqitnedi emmoc tnortarappa essicsba emm ed stniop xued ,)setnelaviuq slc ed riova tnevuep en stneml x ue d e u q arre v n o t n o d( p a m e p yt e d fi t a i c os s a r u e n e t n o c n u t n e m e u q s n irt n i r e n n o dr o r u o p R n oi t a l er e m m e tt e c es i li t u n o l is , e h c n a v er n E . s vr es n o c t n or e s s t ni o p s el s u ot ,ir t e d n oi t -arpo ellet enu snad ,rac evarg srt sap tsen aleC .ennodrooc eri merp al tnavius snnodro tnortarappa ic-xuec ,stniop ed ruenetnoc nu reirt ruop R esilitu nol is ,snoitidnoc sec snaD . ess icsb a e m m al t n a y a st n iop se d se mr o f tnos ecnelaviuqd sessalc sel euq te sesiuqer setniartnoc sel tiafsitas R euq rertno m tuep nO 2x < 1x is )2 y ,2x(2p R )1 y ,1x(1p : r a p R n oi t -aler al essini fd y nouq snosoppus ; y te x sennodrooc xued tnadssop ,)tniop( essalc ep yt n u d s t ne m l se d sn or d is n oc , elp me xe d ert i t .)a R b( ! te )b R a( ! si o f al a n o l is ess al c e m m a l t n e n n e i t r a p p a b t e a e u q e l l e t t n a t e c n e l a v i u q d e s s a l c e n u , R n oi t a l e r a l r a p setiudni ecnelaviuqd sessalc sel rus tnemelp mis siam ,snrecnoc stneml sed elbmesnel rus sap non ,latot erdrod noitaler enu tnessini fd setniartnoc sec euq rertnom tuep nO .noitini fd al sap tnednopr en iuq => uo =< resilitu sap en ,tnadnepec ,edrag ardnerp no ; seuqirmun sep yt sel ruop > te < sruetarpo sel resilitu emlborp snas tuep no ,udnetne neiB .s e s -iuqer stirporp sel etcepser R euq ruop eini fd ertd nioseb sap an tilagl euq areton nO .)c R a(! srola ,)c R b(! te )b R a(! : euq slet ,c ,b ,a
546
Gnralits sur la bibliothque standard CHAPITRE 24

7 Les gnrateurs doprateurs

: = = e d n o it i ni f d a l c e v a et n er h o c ni t e el l e i c i fi tr a erinam enud < ruetarpol snossini fd suon leuqel snad ,elocd elpmexe titep ec ertnom el e m m o c , b = < a e u q il p m i b = = a e u q ,s n es n o b e l s i mr o h , es o p m i n n eir , is n i A . = = e d e ll e c te =< ed euqitamotua noitini fd al ertne neil nucua etsixen liuq reton ed tnatropmi srt tse lI .nortap noitcno f enud noitasilaicps euq tnat ne ,esilitu srola ares ellE .sruetarpo ertauq sec ed euqnocleuq nul ed noitini fd erporp as rennod ed elbissop sruojuot etser li ,udnetne neiB .sertua sed tnemeuqitamotua esopsid elleuq ruop < te == sruetarpo sed essalc enu rinum ed tif fus liuq tiov no ,snoitidnoc sec snaD )b < a( ! is b => a )b > a( ! is b =< a a < b is b > a : se t na vi us s n o it i ni f d s e l r a p < e d st i u d d er t t n e v u e p = > t e > , = < sr u e t ar p o s e l , er i n a m e m m a l e D )b == a(! is b =! a : rap ini fd ares =! ,== ini fd a no elleuqal ruop essalc ep yt nud tnos b te a is ,erdnetta ys tuep no em moC .< ruetarpol ed ritrap ,=> te =< ,> sruetarpo sel ; == ruetarpol ed ritrap ,=! ruetarpol : rini fd ed tnatte mrep snoitcno f ed snortap ed esopsid dradnats euqhtoilbib al siaM
547

#include <iostream> #include <utility> // pour les gnrateurs doprateurs using namespace std ; class point { int x, y ; public : point(int abs=0, int ord=0) { x=abs ; y=ord ; } friend int operator== (point, point) ; friend int operator< (point, point) ; } ; int operator== (point a, point b) { return ( (a.x == b.x) && (a.y == b.y) ) ; } int operator<(point a, point b) { return ( (a.x < b.x) && (a.y < b.y) ) ; } main() { point a(1, 2), b(3, 1) ; cout << "a == b : " << (a==b) << " a != b : " << (a!=b) << "\n" ; cout << "a < b : " << (a<b) << " a <= b : " << (a<=b) << "\n" ; char c ; cin >> c ; }

7 - Les gnrateurs doprateurs

.6 ehpargarap ua seuqov setniartnoc sel retcepser arved noitini fd as ,sac ec snaD .tros erbmem noitcnof al esilitu nouqsrol tsil ep yt ed ruenetnoc nu reirt ruop uo fitaicossa ruenetnoc nu rennodro ruop ,elpmexe rap ,rinevretni tiavuop < ruetarpol euq uv snova suon ,ehcnaver nE .ecneuq - s n o c s n as i c i ts e < t e = = sr u e t ar p o s e d s n o it i ni f d s el ert n e e c n er h o c e d e u q n a m e L

e uqrameR

=> te =< ,> ,= ! sruetarpo sed etnasiafsitas non noitarng ed elpmexE


a == b : 0 a < b : 0 a != b : 1 a <= b : 1

548

Gnralits sur la bibliothque standard CHAPITRE 24

.eueuq_ytiroirp te eueuq ,kcats tnos euq sruenetnoc ed sruetatpada siort sed noitpircsed evrb enu rap snoreni mret suoN .tsil te euqed ,rotcev sruenetnoc sed nucahc s e u qi f i c ps s t il a n n o it c n o f s e l l i a t d n e s n or e n i m a x e s u o n si u P ... s n os i ar a p m o c ,st n e m l d noisserppus te noitresni ,ruenetnoc ertua nu rap noitasilaitini ,elabolg noitatce ffa ,noitcurt -snoc : sruenetnoc siort sec senum moc stilannoitcno f sel reidut rap snorecnem moc suoN . t ic ac i f fe d sn o it -seuq sed ruop euq eifitsuj es en ecnesrp al tnod setnedcrp xued sel ertne eriaidmretni essalc enud tigas liuq arrev no ,euqed essalc al tnauQ .lennoitceridib ruetarti nud euq aresopsid en tsil euq sidnat ,tcerid scca ruetarti nud aresopsid rotcev ,erdnetta ys tuep no emmoC .enahc tnemelbuod etsil ed noiton al dnopserroc tsil essalc al euq sidnat ,uaelbat ed noiton al esilarng rotcev essalc a L .euqed te tsil ,rotcev sessalc sel tnos xuapicnirp sleitneuqs sruenetnoc siort se L .euqsnirtni erinam ed tnos el sdnoces sel euq sid -nat ,e m m-iul e mmargorp el rap tne meticilpxe sopmi erdro nu tnavius snnodro tnos sreim -erp sel ; s fitaicossa sruenetnoc sel te sleitneuqs sruenetnoc sel : setner ffid srt seirogtac xued ne ressalc es tneiavuop sruenetnoc sel euq ,ertipahc tnedcrp el snad ,uv snova suoN

Les conteneurs squentiels

25

: r u el a v a l ti nr u o f ne tne mugra dnoces el ,stne mld erbmon el tinruo f ruetcurtsnoc ud tne mugra rei merp e L
1.1.3 Construction avec un nombre donn dlments initialiss une valeur

.tnemugra snas ruetcurtsnoc nud leppa rap ssilaitini tnemellerutan tuot tnos sli ,essalc ep yt ed stnemld tigas liuqsro L .) n o n is ni mr e t d n i , e u qi t a ts e ss a l c al r u o p 0( dr a d n at s e p y t e d st n e m l d s a c el s n a d s el l e u t -ibah selgr sel rap eigr tse elle ,stneml sec ed noitasilaitinil enrecnoc iuq ec nE .stne m -l n tnanerpmoc ruenetnoc nu tiurtsnoc n reitne tnemugra lues nu ceva ruetcurtsnoc nud leppal ,euqissalc uaelbat nud noitaralcd al ceva essap es iuq ec elbarapmoc noa f eD
1.1.2 Construction avec un nombre donn dlments

: t ne m l nu c ua t n atr op - moc en erid--tsec ,ediv ruenetnoc nu tiurtsnoc tne mugra snas ruetcurtsnoc nud leppaL .ruenetnoc ertua nud ritrap ,nnod stnemld erbmon ceva ,ediv ruenetnoc : sruetcurtsnoc stner ffid ed tnesopsid euqed te tsil ,rotcev sessalc siort se L
1.1.1 Construction dun conteneur vide

.st n ats i x e s t n e m l d n ois s er p p u s a l u o st n e m l x u a e v u o n e d n oi tr es n il ; nosiarap moc ruel ; e l a b ol g n o i t a t c e f f al ; n oi t c ur ts n o c r u el : tnenrecnoc sellE .ici reidut snolla suon euq senum moc stilannoitcno f sed tnedssop sruenetnoc siort sec ,erutan ed ecnerf fid ruel rglaM .noitucxel ed li f ua reirav ed selbitpec -sus erid--tsec ,euqiman yd elliat ed tnos euqed te tsil ,rotcev ,sruenetnoc sel suot e mmoC

550

1.1 Construction

1 Fonctionnalits communes aux conteneurs vector, list et deque

Les conteneurs squentiels CHAPITRE 25

list<int> li(5, 999) ; /* li est construite avec 5 lments de type int */ /* ayant tous la valeur 999 */ point a(3, 8) ; /* on suppose que point est une classe... */ /* lf est construite avec 5 lments de type float /* lf.size() vaut 5 vector<point> vp(5) ; /* vp est construit avec 5 lments de type point /* initialiss par le constructeur sans argument list<float> lf(5) ; list<float> lf ; /* la liste lf est construite vide ; lf.size() */ /* vaudra 0 et lf.begin() == lf.end( ) */ */ */ */ */

.raelc noitcno f enuuq isnia ,snoitini fd srueisulp tnatropmoc ,ngissa erbmem noitcnof enu tnesoporp selle ,sulp ed ; noitatce ffad ruetarpol tnemelbanevnoc tnessini fd tsil te euqed ,rotcev sessalc siort se L

.stejbod tigas liuqsrol snrecnoc stneml sed eipocer ed ruetcurtsnoc el elleppa ,erdnetta ys tuep no em moc ,iuq eipocer rap ruetcurtsnoc euqissalc nud tigas lI
1.1.5 Construction partir dun autre conteneur de mme type
int t[] = { ..... } ; /* nombre quelconque de valeurs qui seront */ vector<int> vi(t, t + sizeof(t)/sizeof(int)) ; /* recopies dans vi */

: isnia redcorp arruop no ,t ed evitce ffe elliat al ed etnadnepdni noitalumro f enu etiahuos nol is ,sac reimerp el snaD
int t[6] = { 2, 9, 1, 8, 2, 11 } ; vector<int> vi(t, t+6) ; /* construit un vecteur form des 6 valeurs de t */ vector<int> vi2(t+1, t+5) ; /* construit un vecteur form des valeurs */ /* t[1] t[5] */

: sruetniop sed rap sini fd sellavretni sed tnasilitu ,euqissalc uaelbat nud seussi sruelav ed secneuqs ed ritrap ,sruenetnoc ed noitcurtsnoc ed elpmexe ertua nu icioV .eri merp al ed ritrap elbissecca tios enrob ednoces al euq uep ruop ,seuqnocleuq sruetartid sellavretni sed resilitud tiarehcpmen neir sia m ,elleusu sulp al noitautis al ed tigas li ; ruenetnoc ud elb mesnel tneiadnopserroc secneuqs sel ,icI
list<point> lp(6) ; /* liste de 6 points */ ..... vector<point> vp (lp.begin(), lp.end()) ; /* construit un vecteur de points */ /* en recopiant les points de la liste lp ; le constructeur */ /* par recopie de point sera appel pour chacun des points */ list<point> lpi (lp.rbegin(), lp.rend()) ; /* construit une liste */ /* obtenue en inversant lordre des points de la liste lp */

: >tniop<tsil ep yt ed ruenetnoc ed secneuqs sed tnasilitu selp mexe sed icioV .tnadnopserroc ellav -retnil ed senrob sel tnatnesrper stnemugra xued ruetcurtsnoc ua tne melpmis tinruo f no ,sac ec snaD .ep yt e m m ed stnemld ecneuqs enud ritrap ruenetnoc nu eriurtsnoc tuep nO
1.1.4 Construction partir dune squence
list<point> lp (10, a) ;/* lp est construite avec 10 points ayant tous la */ /* valeur de a : il y a appel du constructeur par */ /* recopie (ventuellement par dfaut) de point */

1.2 Modifications globales


vector<int> vi1 ; ..... vector<int> vi2(vi1) ;

1 - Fonctionnalits communes aux conteneurs vector, list et deque

/* ou encore vector<int> vi2 = vi1 ; */ /* vecteur dentiers */

551

.noitatce ffa ue tiava y lis e m m o c , s u l u o v st n e m l s e l r a p s c a l p m er t n or es st n a ts i x e s t n e m l s el ,s a c x u e d s el s n a D )r u e l a v ,s i o f _ b n( n gi ss a : e s o p m i r u e l a v e n u t n a y a s t n e m l d nnod erb mon nu ,ruenetnoc nu retce ffad tnattemrep noisrev ertua enu tnemelag etsixe lI tubd siuped elbissecca ert tiod nif // )nif ,tubd( ngissa : )noitatcef fa rap elbitap moc ep yt nud tne m -elues sap te( uluov ep yt ud tneios sngisd stne ml sel euq noitidnoc ,)nif ,tubed[ ellav -retni nu rap eini fd ecneuqs enud stne ml sel ,tnatsixe ruenetnoc nu ,retce ffad temrep ngissa noitcno f al ,ep yt em m ed sruenetnoc ertneuq elbissop tsen noitatce ffal euq srolA .tniop essalc al ed noitatcef fad ruetarpol ed noitasil -itul tios ,tniop essalc al ed eipocer rap ruetcurtsnoc ud noitasilitul tios ,riovas ,2pv te 1pv sruetcev sed sevitaler selliat sel tnavius ,tpmocse tatlusr ua rinevrap ed snoa f xued etsixe li ,42 ertipahc ud 1.3 ehpargarap ua reuqramer tiaf jd snoval suon emmoc ,sac ec snaD : stejbo sed tnos stne ml sel tnod ruenetnoc nu ceva elp mexe ertua nu icioV
vector<int> vi1 (...), vi2 (...) ; vector<float> vf (...) ; ..... vi1 = vi2 ; /* correct, quels que soient le nombre dlments de vi1 /* et de vi2 ; le contenu de vi1 est remplac par celui /* de vi2 qui reste inchang vf = vi1 ; /* incorrect (refus en compilation) : les lments /* de vf et de vi1 ne sont pas du mme type */ */ */ */ */ vector<point> vp1 (....), vp2 (...) ; ..... vp1 = vp2 ;

: s elp m e xe se uq le uq icioV .em m el tios sruenetnoc sed nucahc ed stne mld erb mon el euq eriassecn tne m - el l u n ts e n l i , u d n e t n e n e i B .s t n e m l d e p yt e m m el t e n ort a p e d m o n e m m e l t n a y a er i d --tsec ,ep yt emm ed ruenetnoc ertua nu nnod ep yt nud ruenetnoc nu retce ffa tuep nO
1.2.1 Oprateur daffectation

552

1.2.2 La fonction membre assign

Les conteneurs squentiels CHAPITRE 25

char t[] = {"hello"} ; list<char> lc(7, x) ; .....

point a (...) ; list<point> lp (...) ; vector<point> vp (...) ; ..... lp.assign (vp.begin(), vp.end()) ; /* maintenant : lp.size() = vp.size() */ vp.assign (10, a) ; /* maintenant : vp.size()=10 */

/* lc contient :

x, x, x, x, x, x, x */

. == r u et arp ol e d e m m- el le es ops i d er i nr ed e tt ec euq eriassecn ares li ,essalc ep yt ed tnos snrecnoc stne ml sel is euq tnadnepec areton nO . x ua g tn os gnar e mm ed stne ml sel is te elliat emm al tno slis eiarv ares == rap nosiarap moc ruel , e p y t e m m e d s r u e n e t n o c x u e d t n o s 2 c t e 1 c i S . s er i l u c itr a p s t l u ci f f i d e d s a p e t n e s r p e n lI .euqitbahpla erdro rap sto m sed ressalc ed temrep iuq ellec eugolana ,euqihpargocixel nosiarap moc enu siofrap emmon nol euq ec rus eiuppas < ed iulec euq sidnat ,ruetarpo let nud dnetta nouq ec dnopserroc == ed elr e L . = > t e > , = < , = ! e d t n e m el a g c n o d t n es o psi d s li ,sr u e t ar p o d s e u qi t a m ot u a s n o it ar n g sed siaib el rap ; < te == sruetarpo sed tnesopsid tsil te euqed ,rotcev sruenetnoc siort se L
1.3.1 Loprateur ==

. ss - il ai ti n i n o n t n e m el l e u t n e v ,s n n o d s t n e m l d er b m o n n u d n oi t a t c e f f a l t n a t e t n es b a tilibissop elues al ,noitcurtsnoc al ed tne mo m ua setref fo tnos iuq sellec seriali mis tnos ruenetnoc nud selabolg snoitaci fido m ed stilibissop sel ,retatsnoc el tuep no em moC

: ellennoitidart ehcramd al euq ecaci ffe sulp ares etnedcrp noitatce ffaL
vector<int> v1, v2 ; ..... v1.swap(v2) ; /* ou : v2.swap(v1) ; */

: e lp me x e r aP .ep yt e m m e d sr u e ne t n o c x ue d e d u n et n o c e l re g na h c d te mr e p ) r u e n e t n o c ( p a w s e r b m e m n o i t c n o f a L
1.2.4 La fonction swap
vector<point> vp(10) ; /* vp.size() = 0 */ ..... vp.clear () ; /* appel du destructeur de chacun des points de vp */ /* maintenant vp.size() = 0 */

. u n e t n o c n os e d r u e n et n o c e l e di v ) (r a el c n oi t c n o f a L
1.2.3 La fonction clear
lc.assign(t, t+4) ; lc.assign(3, z) ;

1.3 Comparaison de conteneurs


e uqrameR
vector<int> v3=v1 ; v1=v2 ; v2=v3 ;

1 - Fonctionnalits communes aux conteneurs vector, list et deque

/* lc contient maintenant : h, e, l, l, o /* lc contient maintenant : z, z, z

*/ */

553

.s e s i l a i c ps s er b m e m s n o it c n o f s e d e tsi x e li u q sr u el li a d arr e v n o , s a c sr e i nr e d s e c snad ; )1(O ne tnore f es selle o euqed ed nif ne uo tubd ne uo rotcev ed ni f ne ueil tnorua selleuqsrol tpecxe ,)N(O ne tnores selle ,euqed te rotcev sruenetnoc sel snad euq sidnat ,)1(O ne sruojuot tnores selle ,etsil enu snad ,euq stnavius sehpargarap sel snad snorrev suoN .ertua nu ruenetnoc nud etner ffid ares ticaci ffe ruel ,snoisserppus ed te snoitresnid st -ilibissop semm sel tner ffo sruenetnoc siort sel ,eiroht neuq neib ,euq sio fetuot snoleppaR . et si l e n u d s a c el s n a d s e si li t u e g a t n a v a d t n os s e ll e , t n e m e ts e f i n a m ,is emm ,rotcev ruenetnoc el ruop tnetsixe selleuq srola ,euqissalc uaelbat nud sac el snad sap t ne ia ts i xe n s ti lib iss op se ll et e d e uq are t o n nO .s t na tsi x e st ne m l d s n ois serppu s s e d u o st n e m l x ua e v u o n e d s n oi tre s n i se d r us se d n o f se u q i ma n y d s n o it ac i fi d o m se d t n et te m -rep )sruenetnoc sel suot e mmoc( sruenetnoc siort sec ,sruellia raP .srueirtlu sehpargarap sel snad setircd tnores selle ,ertual ruenetnoc nud uep euqleuq tneirav stilibissop sec em moC .rei fidom al ruop tios ,ruelav al ertannoc ne ruop tios ,tnatsixe tne ml nu sccad stilibissop ed tnemellerutan esopsid tsil te euqed ,rotcev sruenetnoc siort sed nucahC

: etnadnopserroc ruelav al te selbissop snosiarapmoc seuqleuq icioV


int t1[] = {2, int t2[] = {2, vector<int> v1 vector<int> v2 vector<int> v3 vector<int> v4 vector<int> v5 5, 2, 4, 8 } ; 5, 2, 8 } ; (t1, t1+5) ; /* v1 contient : (t2, t2+4) ; /* v2 contient : (t2, t2+3) ; /* v3 contient : (v3) ; /* v4 contient : ; /* v5 est vide 2 2 2 2 5 5 5 5 2 4 8 */ 2 8 */ 2 */ 2 */ */

.irporppa < ruetarpo nud e mm-elle esopsid erinred ettec euq eriassecn ares li ,essalc ep yt ed tnos snrecnoc stne ml sel is euq ,erocne l ,areton nO .)xuag tnos sli( ertual rueirfni tsen nucua ,sediv tnos sruenetnoc xued sel iS .ertual < e mmoc tarappa li ,ediv tse sruenetnoc xued sed lues nu iS . x ua f srola tse sruenetnoc sed nosiarap moc al ed tatlusr el ; essua f stneml xued ed nosiarapmoc ; i ar v ts e n osi ar a p m o c al e d t at l us r e l ; e t ni e tt a sr u e n et n o c s e d n u l e d ni f : esilar tse setnavius snoitidnoc sed enul euq sd tpmorretnis lI .tnetsixe slis ,sreimerp sel rap tnanem moc ne ,< ruetarpol rap ,gnar emm ed stneml sel erapmoc li , er i a f e c r u o P .sr u e n e t n o c x u e d s e d s t n e m l s e d e u qi h p ar g o c i x e l n os i ar a p m o c e n u e ut c e f f e l I

554

1.4 Insertion ou suppression dlments


1.3.3 Exemples 1.3.2 Loprateur <
Les conteneurs squentiels CHAPITRE 25
v2 < v1 /* faux */ v4 < v3 /* faux */ v5 > v5 /* faux */ v3 < v2 /* vrai */ v3 == v4 /* vrai */ v5 < v5 /* faux */ v3 < v4 /* faux */ v4 > v5 /* vrai */

: snoitaralcd sec cevA

: selp mexe seuqleuq iciov nE e c n e u q s a l e d ni f a l r u s u o t n a v i u s t n e m l l r u s r u e t a r t i // nu tinruo f )nif ,tubd[ ellavretnil ed sruelav sel emirppus // )nif ,tubd( esare : e ll a vre t ni n u d s t ne m l se l e c n e u q s a l e d ni f a l r u s u o t n a v i u s t n e m l l r u s // ruetarti nu tinruo f noitisop rap ngisd tne mll emirppus // )noitisop( esare : e n n o d n o i tis o p e d t n e m l n u : remirppus ed temrep esare noitcno f a L
1.4.2 Suppression
list<double> ld ; list<double>::iterator il ; ..... /* on suppose que il pointe correctement dans la liste ld */ ld.insert(il, 2.5) ; /* insre 2.5 dans ld, avant llment point par il */ ld.insert(ld.begin(), 6.7) ; /* insre 6.7 au dbut de ld */ ld.insert (ld.end(), 3.2) ; /* insre 3.2 en fin de ld */ ..... ld.insert(il, 10, -1) ; /* insre 10 fois -1 avant llment point par il */ ..... vector<double> vd (...) ; ld.insert(ld.begin(), vd.begin(), vd.end()) ; /* insre tous les lments */ /* de vd en dbut de la liste ld */

1.4.1 Insertion

list<double> ld ; list<double>::iterator il1, il2 ; ..... /* on suppose que il1 et il2 pointent correctement dans /* la liste ld et que il2 est accessible partir de il1 ld.erase(il1, il2) ; /* supprime les lments de lintervalle [il1, il2) ld.erase(ld.begin()) ; /* supprime llment de dbut de ld

1 - Fonctionnalits communes aux conteneurs vector, list et deque

*/ */ */ */

: selp mexe seuqleuq iciov nE noitisop rap tniop tnemll tnava // , )nif ,tubed[ ellavretnil ed sruelav sel ersni // )noitisop ,nif ,tubed( tresni : e n n o d n oi ti s o p e n u d ri tr a p , e ll a vr e t ni n u d s t n e m l s e l rs n i t ne m ll r us r ue tar t i n u t inr u o f // noitisop rap tniop // tnemll tnava ,ruelav siof_bn ersni // )ruelav ,siof_bn ,noitisop( tresni : e n n o d n o it is o p e n u t n a v a , e n n o d r u e l a v e n u s i o f n rsni tne mll rus ruetarti nu tinruo f // noitisop rap tniop tne mll tnava ruelav ersni // )ruelav ,noitisop( tresni : e n n o d n o it is o p e n u t n a v a r u el a v e n u : r e r s n i d t e m r e p t r e s n i n oi t c n o f a L

555

.) l ar n g s a c e l s n a d ) N( O n e ti c a ci f f e e n u , t n a d n e p e c , c e v a( 4. 1 ehpargarap ua setircd snoisserppus ed uo noitresnid selarng stilibissop sed esopsid no ; 3.1 te 2.1 ,1.1 sehpargarap xua setirc -d snosiarap moc ed te noitatce f fad ,noitcurtsnoc ed snoitarpo sel setuot reutce f fe tuep no ; )sruenetnoc sel suot ed ellec e mmoc( noitucxel ed li f ua reirav tuep ,stne mld erbmon el erid--tsec ,elliat al : euqs i up uaelbat el euq larng sulp erdac nu er ffo li siaM .ta erb me m noitcno f al rap uo ] [ ruetarpol r a p , e u q iss a l c s u l p n o a f e d ti os ,t c er i d s c c a r u e t ar t i n u d si ai b el r a p ti os eri a f es t u e p scca teC .stne ml ses ed erb mon ud etnadnepdni erid--tsec ,)1(O ne ticaciffe enu ceva euqnocleuq tne ml nu tcerid scca nu tnasirotua ne uaelbat ed elleusu noiton al dnerper lI

.)ruelav ,)(dne.c( tresni.c tnelav -iuq tse )ruelav(kcab_hsup.c ,ruenetnoc nu tse c iS .kcab_hsup ni f ne noitresnid esilaicps noitcno f enu etsixe li ,elbasnepsidni erug tios en ec euq neib te ,elbalb mes erina m enuD .))(nigebr.c(esare.c etnelaviuq tse )(kcab_pop.c ,ruenetnoc nu tse c is ; noitarpo ettec esilar iuq )(kcab_pop esilaicps erb me m noitcno f enu etsixe li ,sruenetnoc siort sel ruop )1(O ne tse noisserppus ettec ed ticaci ffel em moc ,tios ne liuq iouQ . )(nigebr noit -isop al esare tnauqilppa ne rinetbos sio fetuot tuep tatlusr let nU .)(dne noitisop al esare tnauqilppa ne ,ruenetnoc nud tne ml reinred el re mirppus ed elbissop sap tsen li ,)(nigeb n o i t i s o p a l es ar e t n a u qi l p p a n e r u e n et n o c n u d t n e m l r ei m er p el r e mir p p us e d e l bi s -sop tse lis euq etatsnoc no ,sussed-ic setnesrp selarng stilibissop xua tneit nes nol iS . )) N ( O n e ( e r c o i d m t i c a c i f f e e n u d x ir p u a s i a m , f i _ d n i f u o d n i f e u q l e t dr a d n a t s e m h t ir o g l a n u d e d i a l er i a f e s sr u o j u o t t u e p e h cr e h c e r e l l e t e n u u q s n i o m s a p e t s er n e n l I . s f i t a i c o s s a sr u e n e t n o c s e l c e v a ar i u d or p e s i u q e c t n e m - er i ar t n o c , t e f f e t e c e r b m e m n o i t c n o f e n u c u a sr u e l l i a d a r e t s i x e n l I . n o i s s er p p u s r u e l u o s e n n o d sr u e l a v e d e h cr e h c er a l s t p a d a s a p t n os e n s l e i t n e u q s sr u e n e t n o c s e L 2
erase (il, ld.end()) ;

: dl sreitned etsil enu rus ,elbanevnoc ruelav ed ,ruetarti nu tse li elleuqal snad ,etnav -ius noitcurtsnoc al ,elpmexe rap ze yoV .)(dne ruelav al ,nonis uo nu etsixe ne lis mirp - p u s t n e m l r e i nr e d el t n a v i u s r u e t ar t il e d r u el a v a l t n e i o v n er e s a r e s n o i t c n o f x u e d s e L 1

556

2 Le conteneur vector
1.4.3 Cas des insertions/suppressions en fin : pop_back et push_back

: et n e l a v i u q t s e el l E

Les conteneurs squentiels CHAPITRE 25

while (il = ld.erase(il) != ld.end()) ;

se uqrameR

: tnemelp mis sulp erircs tnemetse finam tuep tnedcrp elocd elpmexeL .] [ r u et arp ol e uq ed ipar s ni o m tnemergl tse ta ,eitrapertnoc ne ,udnetne neiB .sap tne meuqiroht tia f en ] [ ruetarpol euq ec ,tcerrocni ecidnid sac ne egnar_fo_tuo noitpecxe enu rerng ed tse ertd nosiar elues aS .]i[v etnelaviuq tios )i(ta.v euq ellet ta erb me m noitcno f enu tnemelag etsixe li siaM : s et n el a vi u q tnos setnavius snoitcurtsni xued sel euq etros ed ,i gnar ed tnemll ecner fr enu tse ]i[v noisserpxel ,rotcev ep yt ed tse v iS .ellerutan noa f ed elbasilitu ,tia f ne ,tse ] [ ruetarpoL
2.1.2 Accs par indice
v[i] = ... ; *(v.begin()+i) = ... ;

: elocd elp mexe titep nu icioV


iv += n ; iv -= p ;

: snad e mmoc ,euqnocleuq titnauq enud tnemrcd uo tnemrcni ert tne melag tuep li ,tcerid scca tse li e mmoc ,siaM .-- uo ++ rap tnem -rcd uo tne mrcni ert ,lennoitceridib ruetarti tuot e mmoc ,rs neib ,tuep vi ruetartiL .v ed stnem -ld erbmon el ceva elbitapmoc tios i ed ruelav al euq noitidnoc ,vi rap ngisd tse iuq iulec euq niol sulp stne ml i utis ,v ruetcev ud tne mll engisd elle : snes nu srola a i+vi euq ellet noisserpxe enu ,rotareti::>tni<rotcev ep yt ed elbairav enu tse vi ,elpmexe rap ,iS .tcerid scca tnos rotcev ep yt ed ruenetnoc nud rotareti_esrever te rotareti sruetarti se L .ruenetnoc ed ep yt ec ed tro f tniop el tne metse finam eutitsnoc iuq ec ,)1(O ne tse scca tec ed ticaci ffel ,sac sel suot snaD .kcab eirporppa erbmem noitcnof enu rap eriaf es tuep tne ml reinred ua sccal ,ertuo nE .)ta erbmem noitcno f uo ] [ ruetarpo( ecidni rap uo )rotareti_esrever uo rotareti( ruetarti rap : serina m setner ffid ed ,rei fidom al ruop euq ruelav al ertannoc ne ruop neib issua ,ruetcev nud stne ml stner ffid xua edcca nO
2.1.1 Accs par itrateur

.1 ehpargarap ua senimaxe tnos iuq sellec ed tne mlpmoc ne cnod tnenneiv iuq ,rotcev essalc al ed seuqi ficps stilannoitcnof sel renimaxed snoretnetnoc suon suon ,icI
557

2.1 Accs aux lments existants

vi[0] = 0 ; vi[3] = 30 ; vi[7] = 70 ;

vector<int> v(10) ; /* vecteur de 10 lments */ vector<int>::iterator iv = v.begin() ; /* iv pointe sur le premier lm de v */ ..... iv = vi.begin() ; *iv=0 ; /* place 0 dans le premier lment de vi */ iv+=3 ; *iv=30 ; /* place 30 dans le quatrime lment de vi */ iv = vi.end()-2 ; *iv=70 ; /* place 70 dans le huitime lment de vi */

/* ou : vi[vi.size()-2] = 70 ;

/* ou : vi.at(0) = 0 ; */ /* ou : vi.at(3) = 30 ; */ ou : vi.at(7) = 70 ; */

2 - Le conteneur vector

-acolla ruel snad rinevretnid ,tne melleutnev ,tnatte mrep te eriomm stnemecalp me sed noit -seg al sevitaler snoita mro fni sed tnassinruo f slituod esopsid rotcev essalc al ,sruellia raP .noitatne mlp mil ed ervunam ed egra m al tne mervs etimil ,etuod nes no e mmoc ,iuq ec ,snoitarpo seniatrec ticaci ffed setniart -noc sed esopmi elle ,uv snoval suon emmoc ,tnadnepeC .ruetcev nu uolla tnemecalp mel rerg tiod noitatne mlpmi enu tnod erina m al tne meticilpxe sap esop min e mron a L
2.3.1 Introduction

: elocd elp mexe titep nu icioV .tneml reinred el re mirppus ruop )(kcab_pop noitcno f al ; n i f n e t n e m l l e v u o n n u r er s ni r u o p ) r u e l a v ( k c a b _ h s u p n oi t c n o f al : ) 1 ( O n e t s e ti c a c -i ffel tnod ,tne ml reinred ud noisserppus ed uo noitresnid serb me m snoitcno f ed tiasopsid rotcev ,sruenetnoc sertua xued sel em moc ,euq uv snova suon ,ehcnaver nE . )1(O ne tnatsixe stne ml xua sccad resopsid ruop re yap xirp el l tseC . )1(O ne ares elle ,setsil sed sac el snad ,euq srola ,)N(O neuqsiup ,ercoid m tse ticaci ffe ruel ,sio fetuoT .4.1 ehpargarap ua setircd noisserppus ed te noitresnid selarng stilibissop sed esopsid rotcev ruenetnoc e L

.s u oss e d-i c s e i d -ut tnos selleuqsel ,ni f ne snoisserppus sed uo snoitresni sed sac nucua ne te mrep en ellE .t n ats i x e t n e m l n u e c n er f r e n u r i nr u o f e d e t n et n o c es n o it c n o f et t e c e u q n e i b ar et o n n O
vector<int> v(10) ; ..... v.back() = 25 ; /* quivalent, quand v est de taille 10, : v[9] = 25 ; */ /* quivalent, dans tous les cas, : v[v.size()-1] = 25 */

.tne ml reinred ua tnemetcerid redccad te mrep iuq kcab erbmem noitcno f enu etsixe li ,ni f ne snoisserppus xua uo snoitresni xua tpada tnemerilucitrap tse ruetcev el e mmoC .sr u e n et n o c s er t u a s e l c e v a n oi t a t o n e d n o it as i n g o m o h l s n a d e d is r e g a t n a v a lapicnirp el tnod sruetarti sel euq ttulp secidni sel resilitud elbar frp tne melarng tse lI
558
Les conteneurs squentiels CHAPITRE 25

2.3 Gestion de lemplacement mmoire 2.2 Insertions et suppressions


2.1.3 Cas de laccs au dernier lment
vector<int> v(5, 99) ; /* vecteur de 5 lments valant 99 v.size() = 5 v.push_back(10) ; /* ajoute un lment de valeur 10 : /* v.size() = 6 et v[5] = 10 ; ici, v[6] nexiste pas v.push_back(20) ; /* ajoute un lment de valeur 20 : /* v.size() = 7 et v[6] = 20 v.pop_back() ; /* supprime le dernier lment : v.size() = 6 */ */ */ */ */ */

e d l e p p a l , u d n et n e n e i B . n n o d t n e m o m n u r u et c e v n u u ol l a t n e m e c al p m e l e d el a m i n i m elliat al resopmid tnemsicrp temrep )elliat(evreser erb me m noitcno f al ,rO .noitacolla ettec rus riga sap tiavuop en nol is etnassertni erug tiares en noita mro fni ellet enu siaM .eriassecn tios erio m m ed noitacollar enuuq snas ruetcev nu snad rersni arruop nouq stne mld erbmon el ertannoc ed tem -rep )(ezis-)(yticapac ecner ffid a L .)(ezis => )(yticapac sruojuot a no ,tnatsni tuot ,udnetne neiB .)ruetcev ud tnemll tnatser esilitu tinul( elliat al tnemelp mis tinruo f ne noitcnof ettec ,colb lues nud emro f suos uolla tse ruetcev el o leusu sac el snaD .noitacolla ellevuon ed reutce ffe riova snas ,retpecca arruop liuq stnemld erb mon el erid--tsec ,ruet -cev ud elleitnetop elliat al tinruo f iuq ,)(yticapac ,enisiov noitcno f enu etsixe li siaM .ruet -cev nud stne mld erb mon el ertannoc ed tiatte mrep )(ezis noitcno f al euq uv jd a nO . e u q i n u c o l b n u d emro f suos uolla sruojuot tse ruetcev nud tne mecalp mel euq eshtop yhl tiaf nol is redneh - r p p a e l i c a f s u l p t s e s l it u o s e c e d el r el , n o it c u d or t ni n e t i d al n o e m m o C . n o it a c ol l a n os snad rinevretnid ,tnemelleutnev ,tnatte mrep te ruetcev nu uolla eriom m tnemecalpmel tnanrecnoc snoita mro fni sed tnassinruo f slituod erb mon niatrec nu esoporp emron a L .s ca l p d ert d tno mirppus tnemll ed etius al sutis stneml sel slues euq tiov no ,ici ; )! ios ed av iuq ec( mirppus tnemll euq isnia ,mirppus tneml nud etius al sutis stneml sel ; em m al tse ne nosiar al ; tneml nud noitresnid sac ne ,stneml sel suot ; eriassecn euq stnemecalpmed sulp tnavresr ne seipocer seniat -rec retivd elbissop tse liuq sio fetuot arrev no ; eriassecn t tia ruetcev ud elb mesnel ed eipocer enuuq tuep es li ,te ffe ne ; elliat al ed noitatnemguad sac ne ,stne ml sel suot : riovas ,colb lues nu ne rg tse eriomm tne mecalp mel o sac el snad erdnettas tuep no sleuqxua xuec tnemetcaxe tnos snrecnoc stneml se L .ruetcev ec ed stneml sed sniatrec rus secner fr sed uo sruetarti sed noitadilavnil tnenartne ruetcev nu rus snoitarpod erbmon niatrec nU .elbisualp sulp al tnemeniatrec tsec ,elbaegasivne noitulos elues al sap tsen ec is e mM .colb lues nu ne ruetcev nud tne mecalpmel sruojuot tneuolla selleutca snoitatne mlpmi sel ,tnemsicrp ,rO .erio m m stne mecalp me sel erg noitatnemlpmil tnod erinam al tannoc nol is sesopmi selgr sel erdnerp moc ed elica f sulp tse li ,erocne L .stnadnop -serroc stneml xua redcca ruop selbasilituni erid--tsec ,sedilavni rineved tnevuep sruetar -tid sruelav sed uo secner fr sed ,snoitarpo seniatrec etius ,euq tiovrp e mron al ,ni fnE .ruetcev nu erg noitatnemlp mi enu tnod etcaxe erinam al tannoc nol euqsrol rednehrppa elica f sulp tse slituo slet ed elr el ,udnetne neiB .noit
559
2.3.2 Invalidation ditrateurs ou de rfrences 2.3.3 Outils de gestion de lemplacement mmoire dun vecteur
2 - Le conteneur vector

.ennod ruelav enu rehcrehcer : etnediv zessa tse noitaci fingis al tnod sia m ,tnemerueirtluuq tnesrp ares en iuq dnif e mhtiroglal rap ruelav ed ehcrehcer enu tniojda snova y suoN .tnedcrp el snad te ehpargarap ec snad reni maxed snonev suon euq rotcev essalc al ed stilannoitcno f selapicnirp sel tnartsulli e mmargorp ed telp moc elpmexe nu icioV

.stejbod tigas lis ,ruetcurtsed ruel ed leppa ,tnemellerutan ,ceva suluov stne mld erb mon el ,ni f ne ,emirppus no ,ruetcev ud elliat al reuni mid tiudnoc leppal ,ehcnaver ne ,iS .stneml xuaevuon ed ,nif ne ,ersni iul no ,ruetcev ud elliat al retne mgua tiudnoc eziser ed leppal iS .ruetcev ud stnemld erbmon el rus ,neib te leb ,sia m ,uolla tne mecalpmel ed elliat al rus rigad ,evreser ceva e mmoc ,ici ,sulp tigas en li ,noitnettA .noitcudr al ed iulec snad euq tne messiorccal ed snes el snad neib issua ,ruetcev ud evit -ce ffe elliat al rei fidom ed temrep iuq ,etisu uep ,)elliat(eziser noitcno f enu etsixe li ,nifnE .nnod tnatsni nu ,ruetcev ua reuolla tuep nouq ela mixa m elliat al ertannoc ed te mrep )(ezis_xam noitcno f al ,sruellia raP .s e di l a v t n or -etser stnadnopserroc sruetarti uo secner fr sel te scalpd sap tnores en tnava sutis stne m -l sel ,tneml levuon nud noitresnid sac ne ,reilucitrap nE .noisserppus ed uo noitresnid sa c n e st ne m l d s eip oc er se l m u m ix a m ua re t i m il e d r us sa t se no ,e u o ll a e ti mi l a l sap are s -s a p d e n r u et c e v u d el li at al e u q t n a t , il p m o c c a l i a v ar t e c s i o f e n u , t n a d n e p e C .t n e m e c a l p m e ert u a n u n e r u e t c e v u d s t n e m l s el s u o t e d ei p o c er e n u r e n e m a n ei b s rt t u e p n oi t c n o f et t e c
560
Les conteneurs squentiels CHAPITRE 25

2.4 Exemple

main() { void affiche (vector<int>) ; int i ; int t[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10 } ; vector<int> v1(4, 99) ; // vecteur de 4 entiers egaux 99 vector<int> v2(7, 0) ; // vecteur de 7 entiers vector<int> v3(t, t+6) ; // vecteur construit a partir de t cout << "V1 init = " ; affiche(v1) ; for (i=0 ; i<v2.size() ; i++) v2[i] = i*i ; v3 = v2 ; cout << "V2 = " ; affiche(v2) ; cout << "V3 = " ; affiche(v3) ; v1.assign (t+1, t+6) ; cout << "v1 apres assign : " ; affiche(v1) ; cout << "dernier element de v1 : " << v1.back() << "\n" ; v1.push_back(99) ; cout << "v1 apres push_back : " ; affiche(v1) ; v2.pop_back() ; cout << "v2 apres pop_back : " ; affiche(v2) ; cout << "v1.size() : " << v1.size() << " v1.capacity() : " << v1.capacity() << " V1.max_size() : " << v1.max_size() << "\n" ; #include <iostream> #include <vector> #include <algorithm> using namespace std ;

.ruetcev let nud stib sel suot resrevni enitsed pilf erb mem noitcno f enu erdniojda iul tnad -nepec tuaf lI .tne mmedcrp seidut snova suon euq sellec cnod tnos >loob<rotcev essalc al ed stilannoitcno f se L .tneml euqahc tnadnopserroc snoita mro fni sed tib lues nu rus egakcots el resi mitpod noitatnemlpmil ertte mrep ed tse lapicnirp fitcejboL .loob ep yt ed tse tne mugra nos euqsrol ,rotcev nortap ud noitasilaicps enud ecnetsixel tiovrp e mron a L

: isnia eini fd ert srola tiarruop ehciffa noitcno f al ,elp mexe raP .sruetarti sed resilitud uo ecner fr rap noissimsnart enu resilitud elbissop etser li , al e c r et i v e ti a h u o s n ol i S . n oi t u c x e d s p m e t n e t n asi l a n p r er v as t u e p e ll e r n o it -autis enu snad iuq ec ,ruelav rap tia f es ehciffa noitcno f al ruetcev nud noissi msnart a L

rotcev essalc al ed noitasilitud elpmexE


V1 init = 99 99 99 99 V2 = 0 1 4 9 16 25 36 V3 = 0 1 4 9 16 25 36 v1 apres assign : 2 3 4 5 6 dernier element de v1 : 6 v1 apres push_back : 2 3 4 5 6 99 v2 apres pop_back : 0 1 4 9 16 25 v1.size() : 6 v1.capacity() : 10 v1 apres insert : 2 3 4 5 6 99 V1.max_size() : 1073741823

2.5 Cas particulier des vecteurs de boolens


: n o a f e t t e c e d t ne i a r e t n es rp e s s le pp a s t ne r f f i d s e s t e
void affiche (vector<int>::iterator deb, vector<int>::iterator fin) { vector<int>::iterator it ; for (it=deb ; it != fin ; it++) cout << *it << " " ; cout << "\n "; } } void affiche (vector<int> v) // voir remarque ci-dessous { unsigned int i ; for (i=0 ; i<v.size() ; i++) cout << v[i] << " " ; cout << "\n" ; } vector<int>::iterator iv ; iv = find (v1.begin(), v1.end(), 16) ; // recherche de 16 dans v1 if (iv != v1.end()) v1.insert (iv, v2.begin(), v2.end()) ; // attention, ici iv nest plus utilisable cout << "v1 apres insert : " ; affiche(v1) ; affiche (v1.begin(), v1.end()) ;

e uqrameR

2 - Le conteneur vector

561

; )(kcab_hsup noitcno f al etlpmoc elle ; tubd ne tne ml levuon nu rersni ruop ,)ruelav(tnorf_hsup ; t ne m l r ei nr e d ua sccal tnatte mrep kcab noitcno f al etlp moc elle ; tneml reimerp ua redcca ruop ,)(tnorf : tne ml reimerp el tnanrec -noc sesilaicps snoitcno f sel retuoja ,tne mellerutan tuot ,tua f li selleuqxua ,rotcev ed sellec t n os e u q e d e d s ti l a n n o it c n o f s el ,s e c n a mr o fr e p e d s e c n er f f i d s e c e d n o it c ar ts b a t i a f n ol i S .s ti t e p t n or es s c o l b s el e u q s e t n a mr o fr e p s u l p t n a t u a d t n or es ,) N( O ne ticaci ffe enu tna yauq neib ,snoisserppus sel te snoitresni sel ,eriartnoc uA .areunimid ))1(O ne sruojuot euq neib( tcerid sccal ed tidipar al sulp ,etitep ares scolb sed elliat al sulp ,ehcnaver nE .xue ertned snu-seuqleuq ed tnemelues siam ,ruetcev nu ceva sac el tiatc em moc ,stne ml sertua sed elbmesnel ed tne mecalpd el sulp aretissecn en ruenetnoc ed t u b d n e n ois s er p p u s a l u o n o itr es ni l e u q n ei b t i o v n o ,s n o it i d n o c s e c s n a D .s t n e m l sr u ei s -ulp ,tne melarng ,uo nu nucahc tnanetnoc scolb srueisulp ed emro f suos ttulp siam ,colb lues nu ne euqed nu reuollad elbannosiar sap tsen li ,sesopmi setniartnoc xua eria fsitas r u o p , e u q t e m d a n o l i s s e l bis n e h r p m o c s u l p p u o c u a e b t n e n n e i v e d s e s o h c s e l ,s n i o m n a n ; euqed ep yt ed ruenetnoc nud erio mm tne mecalp mel rerg ed erinam al tnemeticilpxe sap esopmin e mron al ,3.2 ehpargarap ua reuqra mer tia f snoval suon em moc te erocne L .evreser ed te yticapac ed sulp siam ,)(ezis_xam ed te )(ezis ed neib aresopsid no ,tnemsicrp sulp ; euqed ep yt ed ruenetnoc nu ruop sulp tnet - s i x e n , r ot c e v e p yt e d r u e n et n o c n u d er i o m m t n e m e c a l p m e l e d n oi ts e g e d sl i t u o s ni atr e c ; rotcev ep yt ed ruenetnoc nu rus )1(O ne sruojuot ,noitar -po e m m al euq edipar sniom ares euqed ep yt ed ruenetnoc nu rus )1(O ne noitarpo enu : xu ae v i n stner ffid e yap es eriatne mlppus tilibissop ettec rac rotcev euq ecaci ffe sulp tse euqed euq tnatua ruop erulcnoc ne sap tua f en li ,tiaf nE .ruetcev el sap tiattemrep en euq ec ,)1(O ne tne melag ,tubd ne noisserppus uo noitresni enu ,nif ne noisserppus uo noitresnil ed sulp ne ,er ffo li ,ehcnaver nE .)N(O ne tnetser euqnocleuq tniop nu ne snoitresni te snoisserp -pus sel euq sidnat ,euqnocleuq tne ml nu )1(O ne tcerid sccal sruojuot temrep li ,reiluc -itrap nE .ruetcev nud sellec ed senisiov zessa stilannoitcno f sed erf fo euqed ruenetnoc e L

.92 ertipahc ua tircd ares lI .ici setircd sruenetnoc sed stilannoitcnof sel etuot ed sulp esop -sid en nortap ec sia M .sreitne sed snad sunetnoc serianib s fito m sel ceva tia f el no emmoc t n e m e c a ci f f e r el u pi n a m s e l e d t e e x i f el li at e d s ti b e d s e ti us s e d r e t n es r p er e d t e mr e p i u q ,reitne nu rap rt marap ,testib mmon sessalc ed nortap nu tnemelag etsixe li ,trap ertuaD
562
Les conteneurs squentiels CHAPITRE 25

3.1 Prsentation gnrale

3 Le conteneur deque

e u q e d e s s a l c a l e d n o i t a s il i t u d e l p m e x E
x a b x y z x y z a x + +

: euqed ruenetnoc ud stilannoitcno f sed senu-seuqleuq tnartsulli elocd elpmexe titep nu icioV

.5 ehpargarap ua snorelrap suon tnod eueuq ruenetnoc ed ruetat -padal resilitud elbar frp tse li ,stneml stner ffid xua tne metcerid redccad nioseb sulp an nol is ,sac ec snad ,tia f nE .ertual rillieucer sel ed te ,ti mrtxe enu snoitamro fni sed eriudortnid eriassecn tse li o )tuO tsriF ,nI tsri F( O FI F ep yt ed elip ed snoitautis sed snad tnassertni rervas tuep lI .setcnitsid neib stilannoitcno f sed tnedssop iuq tsil te rotcev sruenetnoc sel euq silitu sniom puocuaeb tse euqed ruenetnoc el ,elarng erinam enuD ! scolb sed elliat al sap emm artannoc en no ,sruelliad ; euqra mer ettec ed reti forp siamaj arruop en no ,euqitarp ne ,siam ; eipocer enu simuos lues el ares iuq colb rei merp ud stnem - l s ed ru s sr ue tar t i s e l e uq are d il av n i n t ub d ne n o itr es ni l e uq n ia tre c tse l i ,st n er f f id scolb 5 ed e mrof suos tnemlpmi tse euqed ep yt ed ruenetnoc nu is ,elp mexe raP .setnang -iartnoc srt ertarappa tnevuep selle ,sac sniatrec snad ,is e m m ,rotcev essalc al ed sellec e u q s e m m s el t n e m et c a x e t n e ts er s e c n er f r s e d t e sr u e t ar t i s e d n oi t a d il a v ni d s e l g r s e L .)(kcab_pop noitcno f al etlp moc elle ; tneml reimerp el remirppus ruop ,)(tnorf_pop
563

3.2 Exemple

#include <iostream> #include <deque> #include <algorithm> using namespace std ; main() { void affiche (deque<char>) ; char mot[] = {"xyz"} ; deque<char> pile(mot, mot+3) ; affiche(pile) ; pile.push_front(a) ; affiche(pile) ; pile[2] = + ; pile.push_front(b) ; pile.pop_back() ; affiche(pile) ; deque<char>::iterator ip ; ip = find (pile.begin(), pile.end(), x) ; pile.erase(pile.begin(), ip) ; affiche(pile) ; } void affiche (deque<char> p) // voir remarque paragraphe 2.4 { for (int i=0 ; i<p.size() ; i++) cout << p[i] << " " ; cout << "\n" ; }

3 - Le conteneur deque

ne uo )ruelav(tnorf_hsup tubd ne noitresnid sesilaicps snoitcno f sed tnemelag esopsid nO .euqed te rotcev sruenetnoc sed ,larng ne ,sac el sap tiatn iuq ec ,)1(O ne sruojuot tse ticaci ffe ruel ,siof ettec ,siaM .4.1 ehpargarap ua setircd te esare te tresni snoitcno f sel rap serucorp noisserppus ed te noitresnid selarng stilibissop sed esopsid tsil ruenetnoc e L

. et si l al e d st ne m l d erb - mon el ei fidom iuq etsil ed ni f ne uo tubd ne noitresnil ceva ,etsil al ed stnemld erbmon el sap ei fidom en iuq noitarpo ,stneml sec ed nul ed noitaci fido m al sap ardnofnoc en nO
list<int> l () ; ..... if (l.front()=99) l.front=0 ; /* si le premier lment vaut 99, */ /* on lui donne la valeur 0 */

: t n e m l re i nre d u a ecner fr enu tse ednoces al ,tneml reimerp ua ecnerfr enu tse erimerp al : euqed essalc al ruop euq noitaci fingis emm al ceva , )(kcab te )(tnorf snoitcno f sed esopsid tsil essalc a L .s eri ai d mre t ni st n e m l xua rehcatta tuep nouq trtnil tios euq leuq ,icec te nrecnoc tne mll uqsuj ,tneml rap tne ml ,ni f as siuped uo tubd nos siuped riruocrap al tnemeriotagilbo ulla f arua li ,etsil e n u d t n e m l n u s i o f er i m er p e n u r e d c c a r u o p , is n i A . e u q n o c l e u q t i t n a u q e n u d r e t -nemrcnil ed elbissop sulp ares en li sia m ,-- uo ++ rap tnemrcni ert arruop ti ruetartiL : e m r o f a l e d n o i t a t c e f f a e n u r a p r e i f i d o m e l u o , t i * n oi s s e r p x e l ed ruelav al rap tniop tnemll retlusnoc sruojuot arruop no ,ruetarti let nu engisd ti iS .slennoitceridib tne melues tnos sli ,sio f ettec ,sia m rotareti_esrever te rotareti sruetarti sel sruojuot er ffo tsil ruenetnoc e L .tcerid scca tneiat sessalc sec ed sruetarti sel euq ecrap s ti li b iss o p x u e d s e c ert n e n ei l n u ti ats i x e li , t i a f n e ; e ci d n i r a p u o r u e t ar t i r a p : s er i n a m xued ed stnatsixe stneml xua redccad tneiattemrep euqed te rotcev sruenetnoc se L
*it = ... ;

.ici sap cnod snordnerper sel en suon ; setsil xua tneuqilppas 1 ehp -argarap el snad sesopxe stilibissop sel setuot euq snoleppaR .tcerid scca ruetarti nud sulp esopsid en tsil ruenetnoc el ,eitrapertnoc nE .euqed te rotcev setnedcrp sessalc xued xua troppar rap ruenetnoc ec ed rueja m tuotal eutitsnoc iuq ec ,noitisop ruel tios euq elleuq , )1(O ne ticaci ffe enu ceva eria f es tnov snoisserppus uo snoitresni sel ,sio f etteC .srevnel uo tiordnel etsil al riruocrap ed tnatte mrep lennoitceridib ruetarti nud aresopsid y nouq ei fingis iuq ec ,enahc tnemelbuod etsil ed tpecnoc ua dnopserroc tsil ruenetnoc e L

564

4.2 Insertions et suppressions 4.1 Accs aux lments existants

4 Le conteneur list
Les conteneurs squentiels CHAPITRE 25

-l ses ed irt : selanigiro zessa ,sertuad er ffo ne tsil essalc al ,2.1 ehpargarap ua setircd ,ngissa erbme m noitcno f al te noitatce ffal rap setre ffo selarng stilibissop sed sulp nE

. e uq inu n o i t c n o f a l c e v a t n e m e t n i o j n o c e s i l i t u t n e v u o s t s e e l l e r a c ,) t r o s ( ir t e d n o i t c n o f a l r c a s n o c , t n a v i u s e h p ar g a r a p e l s n a d s n or e t n e s r p a l s u o v s u o n , t n a d n e p e c ; s t n e m l d n o is s er p p us a l t n e m e l a g t s e n o i t a c o v a l t n o d e u q i n u e r b m e m n o i t c n o f e n u e t s i x e l I 2 .noitamro fni ettec rinetbo ruop tnuoc euq let emhtirogla nu tnavarapua riruocer ed elb - iss o p sr u oj u o t ts e l I .s e i f i c ps s n o it i d n o c x u a t n a d n o p r s t n e m l s e d t i ats i x e l is r i o v as ed elbissop sap tsen liuq etros ed ,tatlusr nucua tinruo f en evomer erbmem noitcno f a L 1

: isnia ini fd eriap_tse tacidrp el tnasilitu elpmexe nu icioV .42 ertipahc ud 5 ehpargarap ua edroba t a tacidrp ed noiton a L .iarv tse tnemugra ne inruo f erianu tacidrp el sleuqsel ruop stneml sel suot emirppus noitcno f etteC tacidrp ua tnadnopr stneml sel suot e mirppus // )tacidrp( fi_evomer
4.2.2 Suppression des lments rpondant une condition

: stejbo sed tnos snrecnoc stne ml sel o sac el snad ini fd ert cnod tiod iuq == ruetarpol rus ednof es noitcno f ettec ,erdnetta ys tuep no em moC r u e l a v x u a g st n e m l s u ot e mir p p us // ) r u e l a v ( e v o m e r . e n n o d n oi t i d n o c e n u t n a si a f si t a s s t n e m l s e d n o iss er p p us ; n n o d r u e l a v e n u t n a y a st n e m l s el s u ot e d n o iss er p p us : st n e d cr p sr u e n et n o c s el sa p t n ei a d - ss o p e n e u q s e ll e n n o it i d n o c s n ois s er p p u s e d s n o i t c n o f e d es o ps i d t s i l ess al c al , er t u o n E . e u q e d t e r ot c e v s e s s a l c s e l s n a d s e r t -nocner ,)(kcab_pop ni f ne uo )(tnorf_pop tubd ne noisserppus ed uo )ruelav(kcab_hsup nif
565
4.2.1 Suppression des lments de valeur donne

4.3 Oprations globales


se uqrameR
int t[] = {1, 6, 3, 9, 11, 18, 5 } ; list<int> li(t, t+7) ; /* li contient : 1, 6, 3, 9, 11, 18, 5 */ li.remove_if(est_paire) ; /* li contient maintenant : 1, 3, 9, 11, 5 */ bool est_paire (int n) /* ne pas oublier : { return (n%2) ; } int t[] = {1, 3, 1, 6, 4, 1, 5, 2, 1 } list<int> li(t, t+9) ; /* li contient : 1, 3, 1, 6, 4, 1, 5, 2, 1 */ li.remove (1) ; /* li contient maintenant : 3, 6, 4, 5, 2 */ #include <functional> */

4 - Le conteneur list

tacidrp erianib tacidrp ua tnasia fsitas sevitucsnoc // sruelav ed etius enud tne ml reimerp el euq evresnoc en // )tacidrp( euqinu ) ==( se la g s e vi t uc s no c // sruelav ed etius enud tne ml reimerp el euq evresnoc en // )(euqinu : irt ud erdrod noitaler al rap setiudni tnos iuq sellec euq se mm sel tneios == noitaler al rap setiudni ecnelaviuqd sessalc sel euq ardua f li ,e mhtiroglal ed euqigol tnemennoitcno f nu rinetbo ruop ,tne m -sicrp sulP .)== ed tigas lis e m m( tilagd erianib tacidrp el te )< ruetarpol ed tigas lis emm( irt el ruop esilitu erdrod noitaler al ertne tilibitapmoc al rerussad elbarfrp ares li ,essalc ep yt ed stne mld eirt etsil enu euqinu euqilppa nol is euq neib areton nO .non uo ini fdrp ,erianib tacidrp nud siaib el rap ,xiohc nos ed nosiarapmoc ed noit -aler enu resopmi ,sac sel suot snad ,issua arruop no siaM .essalc ep yt ed stnemld sac ne t n e m e l b a n e v n o c i ni f d ert r s n ei b t n a v e d r u e t ar p o t e c ,s t n e m l x u e d e d t il a g l e d r e d -icd ruop == ruetarpol rus tua fd rap edno f es noitcnof ettec ,erdnetta ys tuep no e mmoC .s e v i t u c s n o c n o n s i a m ,seuqitnedi sruelav sed rinetnoc erocne arruop etsil al ,evitini fd ne ,euq ei fingis iuq ec ,seuq - it n e di se v it u cs n oc sr ue la v e d se c ne u qs s el t n e m l l u es n u ra p r ec al p mer e d et n et n oc e s elle srola siam ,rennoitcno f tuep elle ,eriartnoc sac el snaD .eirt tne melbalarp etsil enu rus retrop eria f al ed noitidnoc ,elbuod ne stne ml sel renimild temrep euqinu noitcno f a L
4.3.2 Suppression des lments en double

< ruetarpol rus tna yuppas ne ,enrecnoc etsil al eirt // )( tros .non uo ini fdrp erianib tacidrp nud siaib el rap xiohc nos ed noitaler e n u r es o p m i d ,s a c s e l s u ot s n a d , ti li b iss o p a l ar u a n O .i n i f d t n e m el b a n e v n o c ti al er i n -red ettec euq uep ruop ,essalc ep yt nu ruop sirp moc y ,< ruetarpol tua fd rap resilitu arruop nO .tnedcrp ertipahc el snad etnesrp t a elleuq ellet ,tcirts elbia f erdrod noitaler enu rus eiuppas tros noitcno f al ,ruenetnoc nud tnemecnannodrol ehcuot iuq ec tuot e mmoC . )N goL( O neuqsiup ,ecaci ffe tnemevitaler te ruenetnoc ed ep yt ec ruop tnemeuqi f - i c p s e ti r c , t r o s n o i t c n o f e r p o r p a s e d e s o p s i d t s i l e s s a l c a l , t i a f n E . t c e r i d s c c a s r u e t a r t i sed tnetissecn trapulp al siam ,ruenetnoc nud stneml sed irt ed se mhtirogla sed etsixe lI .ep yt emm ed etsil ertua enu snad etsil enud eitrap uo tuot ed tre fsnart ,sennodro tne m -elbalarp setsil xued ed noisu f ,selpitlum secnerrucco sed elleutnev noisserppus ceva stne m
566
Les conteneurs squentiels CHAPITRE 25

4.3.1 Tri dune liste

list<int> li(...) ; /* on suppose que li contient : 1, 6, 3, 9, 11, 18, 5 */ li.sort(greater<int>) ; /* maintenenant li contient : 18, 11, 9, 6, 5, 3, 1 */ list<int> li(...) ; /* on suppose que li contient : 1, 6, 3, 9, 11, 18, 5 */ li.sort () ; /* maintenenant li contient : 1, 3, 5, 6, 9, 11, 18 */

tacidrp erianib tacidrp // e l r u s t n a y u p p a s n e , e nr e c n o c e t s il a l eir t // ) t a c i d r p ( t r o s

: s ets il x ue d s e l irt t n e m el b al ar p s n o va s u o n leuqel snad ,elpmexe rei merp nu icioV .noisu f al rap esilitu tse iuq ellec euq erdrod noitaler em m al tnavius seirt tnos setsil xued sel euq esoppus egrem noitcno f al ,tnadnepeC .senrec -noc setsil xued sed tne mecnannodrol rus esp en etniartnoc enucua ,eiroht neuq areton nO tacidrp erianib tacidrp el rus tna yuppas ne // ,enrecnoc etsil al ceva etsil ennoisu f // )tacidrp ,etsil( egrem e d i v t s e e t s i l : n i f a l ; > r u et a r p o l / / rus tna yuppas ne ,enrecnoc etsil al ceva etsil ennoisu f // )etsil( egrem .< ruetarpol ed arigas li ,tua fd rap ; tcirts elbia f erdrod noitaler enu rus ,tros e mmoc ,eiuppas egrem noitcnof al , er d n et t a ys t u e p n o e m m o C . u n e t n o c n os e d e d i v ts e e n n oi s u f ets i l a L . e nr e c n o c e ts il al ceva ep yt emm ed etsil ertua enu rennoisu f rinev ed temrep egrem erb me m noitcnof a L .s e nr e c n o c s e ts il s e d e n u c a h c e d s t n e m l d er b m o n e l t n a n g is d 2 N te 1N ,)2N+1N(O ne tse ticaci ffel ,sac xued sel snad ,is e m m ,etnamro frep sulp tne mergl tnemelarng esilaicps erb me m noitcno f enud esopsid tsil essalc al ,sirt tne melbanev -noc sruenetnoc xued reuqilppas tnavuop noisu f ed larng emhtirogla nu etsixe liuq neiB
4.3.3 Fusion de deux listes
5 4 2 */ 5 4 2 */ 2 */ 6 6 6 */ */

. n o n u o e irt tse etsil al euq tnavius ,unetbo te ffed ecner ffid al tnemerialc ertnom iuq elpmexe nu icioV
567

li1.merge(li2) ; /* li1 contient maintenant : 1 6 3 9 11 12 4 9 8 18 5 */

: setsil xued sed elbalarp irt snas ,elpmexe emm el iciov , fitacidni ertit elpmis
li1.merge(li2) ; /* li1 contient maintenant : /* et li2 est vide 1 3 4 5 6 8 9 9 11 12 18 */ */

list<int> li2(t2, t2+4) ; list<int> li1(t1, t1+7) ; int t2[] = {12, 4, 9, 8} ; li2.sort() ; li1.sort() ; list<int> li2(t2, t2+4) ; list<int> li1(t1, t1+7) ; int t2[] = {12, 4, 9, 8} ;

int t1[] = {1, 6, 3, 9, 11, 18, 5 } ;

int t1[] = {1, 6, 3, 9, 11, 18, 5 } ;

int t[] = {1, 6, 6, 4, 6, 5, 5, 4, 2 } ; list<int> li1(t, t+9) ; /* li1 contient : 1 6 list<int> li2=li1 ; /* li2 contient : 1 6 li1.unique() ; /* li1 contient maintenant : 1 6 li2.sort() ; /* li2 contient maintenant : 1 2 li2.unique() /* li2 contient maintenant : 1 2

/* li2 contient :

/* li1 contient :

/* et li2 est vide /* li2 contient : 12 4 9 8 /* li1 contient : 1 6 3 9 11 18 5 4 8 9 12 1 3 5 6 9 11 18 6 6 4 4 4 4 4 6 4 5 6 6 5 5 6 5 5 4 5 */ */

4 - Le conteneur list

*/ */ */

.er io m m ed c o lb erp orp nos ed esopsid tneml euqahc euq esop mi e mron al ,tnemetceridni ,isniA .ecalp ed regnahc d sap tnon sertua sel euq cnod ei fingis aleC .sedilavni tnenneived smirppus uo srsni st n e m l s el t n a nr e c n o c s e c n er f r u o sr u e t ar t i s e l s l u e s , e tsi l e n u s n a d st n e m l d s n oi s -serppus ed uo snoitresnid sac neuq esicrp elle ,tnem matoN .etsil enud stneml sed rus secner fr sed te sruetarti sed noitadilavnid selgr sed te ticaci ffed setniartnoc sed sio f al esopmi elle ,tnadnepeC .sruenetnoc sertua sel ruop tiaf el en elleuq sulp sap ,etsil enu suolla erio mm stne mecalpme sel rerg ed erinam al tnemeticilpxe sap esopmin emron a L

noitisop tnemecalp mel ro_etsil ed )ro_nif ,ro_tubed[ ellavretnil ecalpd // )ro_nif ,ro_tubed ,ro_etsil ,noitisop( ecilps
char t1[] = {"xyz"}, t2[] = {"abcdef"} ; list<char> li1(t1, t1+3) ; /* li1 contient : x y z */ list<char> li2(t2, t2+6) ; /* li2 contient : a b c d e f */ list<char>::iterator il1=li1.begin() ; list<char>::iterator il2=li2.end() ; il2-- ; /* pointe sur avant dernier */ li1.splice(il1, li2, il2) ; /* li1 contient : f x y z */ /* li2 contient : a b c d e */

noitisop tne mecalpmel ro_noitisop rap tniop ro_etsil ed tnemll ecalpd // )ro_noitisop ,ro_etsil ,noitisop( ecilps
/* il pointe sur le deuxime lment de li1 */ /* li1 contient : x a b c d e f y z */ /* li2 est vide */

noitisop tne mecalpmel // ro_etsil ed stneml sel ecalpd // )ro_etsil ,noitisop( ecilps . s ipo c t ne me lu es sap t e e n i gir o d etsil al ed s mirppus tnos scalpd stneml sel ,egrem ceva e mmoc ,euq neib areton nO .enrecnoc etsil al snad etsil ertua enud stneml sed recalpd ed temrep ecilps noitcno f a L
4.3.4 Transfert dune partie de liste dans une autre

568

4.4 Gestion de lemplacement mmoire


Les conteneurs squentiels CHAPITRE 25
char t1[] = {"xyz"}, t2[] = {"abcdef"} list<char> li1(t1, t1+3) ; list<char> li2(t2, t2+6) ; list<char>::iterator il1=li1.begin() ; list<char>::iterator il2=li2.begin() ; li1.splice(il1, li2, il2, li2.end()) ; char t1[] = {"xyz"}, t2[] = list<char> li1(t1, t1+3) ; list<char> li2(t2, t2+6) ; list<char>::iterator il ; il = li1.begin() ; il++ ; li1.splice(il, li2) ; {"abcdef"} ; /* li1 contient : /* li2 contient : ; /* li1 contient : /* li2 contient : il2++ ; /* li1 contient : /* li2 contient : x y z a b c d e f b c d e f x y z */ a */ x y z a b c d e f */ */ */ */

4 - Le conteneur list

569

4.5 Exemple
. 1 e h p ar g ar a p el s n a d e u q is ni a , e h p ar g ar a p e c s n a d s e n i m a x e s n o v a s u o n e u q t s i l e s s a l c al ed stilannoitcno f sed erbmon nob tnartsulli e mmargorp ed telp moc elpmexe nu icioV

.evreser te yticapac reilucitrap ne te ,snoit -acolla sel rus rigad tnattemrep noitcno f enucua ehcnaver ne evuorter yn no , )(ezis_xam te ) ( e z i s n o i t a m r o f n i d s n o i t c n o f s e d s r u o j u o t e s o p s i d t si l r u e n e t n o c e l i s , s n o i t i d n o c s e c s n a D
#include <iostream> #include <list> using namespace std ; main() { void affiche(list<char>) ; char mot[] = {"anticonstitutionnellement"} ; list<char> lc1 (mot, mot+sizeof(mot)-1) ; list<char> lc2 ; cout << "lc1 init : " ; affiche(lc1) ; cout << "lc2 init : " ; affiche(lc2) ; list<char>::iterator il1, il2 ; il2 = lc2.begin() ; for (il1=lc1.begin() ; il1!=lc1.end() ; il1++) if (*il1!=t) lc2.push_back(*il1) ; /* equivaut a : lc2=lc1 ; */ /* lc2.remove(t); */ cout << "lc2 apres : " ; affiche(lc2) ; lc1.remove(t) ; cout << "lc1 remove : " ; affiche(lc1) ; if (lc1==lc2) cout << "les deux listes sont egales\n" ; lc1.sort() ; cout << "lc1 sort : " ; affiche(lc1) ; lc1.unique() ; cout << "lc1 unique : " ; affiche(lc1) ; } void affiche(list<char> lc) // voir remarque paragraphe 2.4 { list<char>::iterator il ; for (il=lc.begin() ; il!=lc.end() ; il++) cout << (*il) << " " ; cout << "\n" ; } lc1 lc2 lc2 lc1 les lc1 lc1 init : a n t i init : apres : a n i c remove : a n i c deux listes sont sort : a c e e unique : a c e i c o n s t i t u t i o n n e l l e m e n t o n s i o n s i egales e i i i l m n o u i o n n e l l e m e n u i o n n e l l e m e n l l m n n n n n o o s u s u

t s i l e s s a l c a l e d n oi t a si l i t u d e l p m e x E

: elip enu tnasilitu em margorp ed elp mexe titep nu icioV .elip al ed tna mirppus el ne ,tem mos ua utis tnemll ed ruelav al tinruo f : )(pop ; elip al rus ruelav ecalp : )ruelav( hsup ; )re mirpp us al s nas( rei fido m uo ertannoc tuep nouq elip al ed tem mos ua eutis noitamro fnil scca : )(pot ; elip al ed stnemld erb mon el tinruo f : )(ezis ; e d i v t s e e l i p a l i s e u r t ti nr u o f : ) ( y t p m e : s e t n a vi us ser b m e m s n oi tc n o f s el t n e m e u q i n u e v u ort y n O .e ti u d ort n i erinred al tna yartxe ne ,sio f al elues enud nosiar ,ellieucer nouq te sertua sel rus senu sel elipme nouq snoita mro fni sed )hsup( eriudortniuq tuep en no ,ruenetnoc let nu snaD
stack <int, vector<int> > s1 ; /* pile de int, utilisant un conteneur vector */ stack <int, deque<int> > s2 ; /* pile de int, utilisant un conteneur deque */ stack <int, list<int> > s3 ; /* pile de int, utilisant un conteneur list */

: s n oi tar al c d se c snad em moc ,tsil uo euqed ,rotcev sleitneuqs sruenetnoc siort sed nul ed ritrap tiurtsnoc ert tuep li ; )tuO tsriF ,nI tsa L( OFIL ep yt ed selip ed noitseg al nitsed tse kcats nortap e L

.tnemugra snas ruetcurtsnoc nud suot tnesopsid slI .sennod stilannoit - c n o f s e d t n at p a d a l n e t e t n a n g i er ts er a l n e si o f a l , e c a fr e t ni l t n e i fi d o m n e i u q n n o d e p y t nud ruenetnoc nu rus setiurtsnoc snortap sessalc ed tigas lI .sruenetnoc ed sruetatpada stid ,eueuq_ytiroirp te eueuq ,kcats sreilucitrap snortap siort ed esopsid dradnats euqhtoilbib a L

570

5.1 Ladaptateur stack

5 Les adaptateurs de conteneur : queue, stack et priority_queue

Les conteneurs squentiels CHAPITRE 25

#include <iostream> #include <stack> #include <vector> using namespace std ; main() { int i ; stack<int, vector<int> > q ; cout << "taille initiale : " << q.size() << "\n" ; for (i=0 ; i<10 ; i++) q.push(i*i) ; cout << "taille apres for : " << q.size() << "\n" ; cout << "sommet de la pile : " << q.top() << "\n" ; q.top() = 99 ; /* on modifie le sommet de la pile */ cout << "on depile : " ; for (i=0 ; i<10 ; i++) { cout << q.top() << " " ; q.pop() ; } }

: eueuq enu tnasilitu emmargorp ed elp mexe titep nu icioV .tnamirppus el ne eueuq al ed ett ne utis tne mll tinruof : )(pop ; eueuq al snad ruelav ecalp : )ruelav( hsup ; re mirpp us al s nas ,r ei f -ido m uo ertannoc isnia tuep nouq ,eueuq al ed ni f ne eutis noitamro fnil scca : )(kcab ; remirppus al snas ,rei fid -om uo ertannoc isnia tuep nouq ,eueuq al ed ett ne eutis noita mro fnil scca : )(tnorf ; e u e u q a l e d s t n e m l d er b m o n e l ti nr u o f : ) ( e z i s ; ediv tse eueuq al is eurt tinruof : )(ytpme : s et n a v i us s er b m e m s n o it c n o f s e l t n e m e u qi n u e v u or t y n O : s no i tara l c d s ec s n ad e m m o c ,)t ub d n e se ca ci f f e sn o itr es ni d sap es ops i d e n li uqs iup irporppa s ap ti ares en rotcev ruenetnoc el( tsil uo euqed sleitneuqs sruenetnoc xued sed nul ed ritrap tiurt -snoc ert tuep ruenetnoc let nU .noitcudortni ruel ed esrevni erdrol snad ,ett ne ellieucer nouq te ni f ne tiudortni nouq snoitamro fni sed ecalp y nO .)tuO tsriF ,nI tsriF( OFIF ep yt ed selip erocne uo ,seueuq issua setid ,etnettad seli f ed noitseg al nitsed tse eueuq nortap e L
queue <int, deque<int> > q1 ; /* queue de int, utilisant un conteneur deque */ queue <int, list<int> > q2 ; /* queue de int, utilisant un conteneur list */

kcats ruenetnoc ed ruetatpadal ed noitasilitud elpmexE


taille initiale : 0 taille apres for : 10 sommet de la pile : 81 on depile : 99 64 49 36 25 16 9 4 1 0

5.2 Ladaptateur queue

#include <iostream> #include <queue> #include <deque> using namespace std ; main() { queue<int, deque<int> > q ; for (int i=0 ; i<10 ; i++) q.push(i*i) ; cout << "tete de la queue : " << q.front() << "\n" ; cout << "fin de la queue : " << q.back() << "\n" ; q.front() = 99 ; /* on modifie la tete de la queue */ q.back() = -99 ; /* on modifie la fin de la queue */ cout << "on depile la queue : " ; for (int i=0 ; i<10 ; i++) { cout << q.front() << " " ; q.pop() ; } }

5 - Les adaptateurs de conteneur : queue, stack et priority_queue

571

: stiroirp ceva etnettad eli f enu tnasilitu em margorp ed elp mexe titep nu icioV .tnamirppus el ne eueuq al ed ett ne utis tne mll tinruo f : )(pop ; e ue u q al e d st n e m l s e d er dr ol e d t c e ps er e l s ul p er uss a n , s n o it at n e m l p m i s e n i a tr e c s n a d ,i u q n o it a c i fi d o m e d t il i bis s o p al r e si li t u s a p e n e d s n o d n a m m o c er s u o n ,t n e m el l e u t c a ; )r e mir p p us a l s n as( r e i fi d o m t n e m -euqiroht ,uo ertannoc tuep nouq eueuq al ed ett ne eutis noita mro fnil scca : )(pot ; eueuq al snad ruelav ecalp : )ruelav( hsup ; eueuq al ed stnemld erb mon el tinruo f : )(ezis ; e di v ts e e u e u q al is e u r t ti nr u o f : ) ( y t p m e : s et n a v i us s er b m e m s n o i t c n o f s el t n e m e u q i n u e v u ort y n O .ecneuqs enud ritrap tnemeuqissalc eriurtsnoc el tuep no ,ici ,ehcnaver nE : snoitaralcd sec snad em moc ,euqed ruenetnoc nud ritrap uq tiurtsnoc ert tuep en ruenetnoc let nU .stiroirp c e v a e t n e tt a d e l i f e d si o fr a p elr a p n O . eri a ni b t a c i d r p n u d e mr o f s u os r i nr u o f t u e p n o u q erdrod noitaler enu rap eini fd tiroirp eniatrec enu retcepser erinam ed ,noitcudortni euqahc i fido m tse eueuq al snad stneml sed tnemecalp mel ,ehcnaver ne ; nif ne stne m -l sed sruojuot tiudortni no elleuqal snad ,etnettad eli f enu elb messer ruenetnoc let nU
priority_queue <int, deque<int> > q1 ; priority_queue <int, deque<int>, greater<int> > q2 ;

kcats ruenetnoc ed ruetatpadal ed noitasilitud elpmexE


tete de la queue : 0 fin de la queue : 81 on depile la queue : 99 1 4 9 16 25 36 49 64 -99

572

5.3 Ladaptateur priority_queue

Les conteneurs squentiels CHAPITRE 25

#include <iostream> #include <queue> #include <deque> using namespace std ; main() { int i ; priority_queue <int, deque<int>, greater<int> > q ; q.push (10) ; q.push(5) ; q.push(12) ; q.push(8) ; cout << "tete de la queue : " << q.top() << "\n" ; cout << "on depile : " ; for (i=0 ; i<4 ; i++) { cout << q.top() << " " ; q.pop() ; } }

5 - Les adaptateurs de conteneur : queue, stack et priority_queue

573

tete de la queue : 5 on depile : 5 8 10 12

eueuq_ ytiroirp ruenetnoc ed ruetatpadal ed noitasilitud elpmexE

.pamitlum ceva sulp tne mellerutan aretsixen tilibissop ettec ; tnopuD lc al tnadnopserroc tne mll rengisd ruop ]"tnopuD"[ eriaunna noisserpxel resilitu arruop no ,senahc sed tnos slc sel leuqel snad ,eriaunna m mon ruenetnoc nu ceva ,elp mexe r a P . p a m e p yt e d r u e n e t n o c n u r us ] [ r u e t ar p o l ri n i f d er e d t n e m s i c r p t e mr e p n oi t c n it -sid etteC .sap esirotual en pam euq sidnat ,)non uo stner ffid sicossa sormun sed ceva( mon emm ed sennosrep srueisulp ed ecnesrp al esirotua pamitlum euq erid tuep no ,euq -inohplt eriotrepr ed elpmexe erton dnerper nol iS .tne mevitucsnoc srola tnortarappa iuq lc emm ed stneml srueisulp revuort y arruop no te sap esopmil en pamitlum ,lc em m al tna ya stneml xued ed ecnesbal tid tnemertua ,slc sed ticinul esop mi pam euq srola ,siaM .ruelav enu te lc enu tnaicossa ne , fitaicossa ruenetnoc ed tpecnoc ua tne menielp tnednopserroc slI .pamitlum te pam tnos stnatropmi sulp sel s fitaicossa sruenetnoc xued se L . n o i t c urt s n o c al e isi o h c )< tua fd rap( noitaler enu rus tnadnof es ne ,ecnenamrep ne tnemeuqsnirtni nnodro evuort es fi ta ic os sa r ue ne t n oc n u , t ic ac i f fe d s n oi ts e u q s el p mis e d r u o p , t u o t r g la M .e nr ec n oc ennosrep al ed mon ud e mro f lc enud ritrap enohplt ed ormun el evuorter no leuqel s n a d ,e u qi n o h p l t er i o tre p r u d e l p m e xe l t i c j d s n o v a s u o N . lc e m m o n r u el a v as e d eitrap enud uo ruelav as ed noitcno f ne sia m ,ruenetnoc el snad ecalp as ed noitcno f ne sulp non ,noitamro fni enu revuorter ed noitacov elapicnirp ruop tno s fitaicossa sruenetnoc se L .ruetarti nu uo ecidni nu esilitu nol euq ,erdro tec ed etpmoc tnanet ne stneml sruel ed nu edcca no ; e m m-iul e mmargorp el rap tne meticilpxe sop mi erdro nu tnavius snnodro tnos ,ertipahc tnedcrp el snad sidut snova suon euq ,sleitneuqs sruenetnoc se L .s fitaicossa sruenetnoc sel te sleitneuqs sruen -e t n oc se l : se ir og t ac x ue d n e t nes sa lc es sr ue n et n oc s el ,42 ert ipa h c u a ti d t a l i e m m oC

Les conteneurs associatifs

26

.0 e ic os sa r u el a v al tnasilaitini ne ,tnadnopserroc tnemll arerc ]X[m retlusnoc rehcrehc ed tiaf elp mis el : s n a d e m m o c , e t n at si x e n i l c e n u e i c oss a r u el a v e n u r esi l it u e h cr e h c n o l is ,ts e s ul p i u Q . x u a e v u o n e d r er s n i n e , s a c nucua ne ,te stnatsixe stneml xuauq ] [ ruetarpol rap redcca tuep en no ,ruetcev nu snad : pam ep yt ed ruenetnoc nu te ruetcev nu ertne elatne madno f ecner ffid enu l jd tiov nO . 5 r u e l a v a l e d t e S l c a l e d n o i t a i c o s s a l e d m r o f t n e m l n u , m r u e n e t n o c el s n a d , er s n i : e u q e ll et n o i t c urt s n i e n U . 0 t u a v ) ( e z i s . m : e di v t s e r u e n e t n o c e c , t n a t s ni l r u o P . t n i e p y t e d seicossa sruelav sel te rahc ep yt ed tnos slc sel leuqel snad ,pam ep yt ed ruenetnoc nu erc : euq e ll et no i tara l c d e nU
map<char, int> m ; m[S] = 5 ; cout << "valeur associe a la cl X : ", m[X] ;

.liatd ne stirporp sel reidut ned tnava pam ep yt ed ruenetnoc n u d n o it as il it u d fi t c u d ort n i e l p m e x e n u r a p s n or e c n e m m o c s u o n , e tsi l e d el l e c e u q e m m u o r ue tc e v e d , u ae l ba t e d el le c e u q e u n n o c s ni o m ts e fi ta ic o ssa u ae l ba t e d n oi t o n a l e m m o C .42 ertipahc ud 2.6 ehpargarap ua setnesrp t tno selleuq sellet ,tcirts elbia f erdrod noitaler enud stirporp sel redssop tiod ,e mutuoccal em moc ,iuq erdrod noitaler enu sruocer el esoppus alec ,ecnenamrep ne nnodro tse ruenetnoc let nu emmoC . )N goL(O ne tse noitarpol ed ticaci ffel ; ][ ruetarpol tnasilitu ne lc enu eicossa ruelav al tne medipar redccad temrep pam ruenetnoc nU .ruelav al ed iulec rap te lc al ed ep yt el rap rtmarap ,riap m mon ,irporppa essalc ed nortap nu etsixe li ,stne ml slet ed retnesrper ruoP .ruelav e n u t e l c e n u : s e itra p x u e d e d ss o p m o c s t n e m l d mr o f c n o d t se p a m r ue n et n oc e L

.l e us u e l b m es n e n u d s a c el s a p t n e m e ts e f i n a m ts e n i u q e c , s e u q it n e d i s t n e m l sr u e i s ul p e d e c n e s r p a l ar e sir o t u a t e s i t l u m er t u o n e ; s e u qi t a m h t a m ne eriassecn sap tsen iuq ec ,stneml sel rus eirporppa erdrod noitaler enud , fitaicossa ruenetnoc tuot ruop e mmoc ,resopsid ed sio fetuot noitidnoc ,euqita mhta m snes ua selb mesne sed retnesrper ed tnorttemrep sli tnemevitcef feuq arrev nol te ,tesitlum te tes tne mmon es sruenetnoc seC .ecnanetrappad noiton al euq sulp etser en li te tarapsid ruelav e n u t e l c e n u ert n e n oi t a i c os s a d n oi t o n a l ,s n o i ti d n o c s e c s n a D . l c el u e s a l t n e ti mi l e s stne ml sel euq erid tneiver iuq ec ,sulp etsixen lc al eicossa ruelav al o sac el snad ,pamitlum te pam ed sreilucitrap sac sed tnednopserroc iuq sruenetnoc sertua xued etsixe lI
576
Les conteneurs associatifs CHAPITRE 26

1.1 Exemple introductif

1 Le conteneur map

: ) n o it at n e m l p m il e d er d n e p d t u e p c l c al e d e vi t a l er n o it is o p al , n oi t n e tt a( r e n -imaxed snonev suon euq stniop stner ffid sel tnanerper telpmoc e mmargorp titep nu icioV : ) r u e l a v , l c ( e mr o f a l s u o s m e d sr u el av sel setuot ,lerutan erdrol tnavius ,rehci ffa tnem moc ,elpmexe rap ,iciov ,evitinifd nE . e i c oss a r u e l a v a l t n a d n o ps err o c d n o c e s ; l c al t n a d n o ps err o c t srif : scilbup serb mem xued ed esopsid iuq ,riap m mon ,reilucitrap essalc ep yt nud tnos pam ruenetnoc nud stneml sel ,tia f nE .etnadnopserroc ruelav al te lc al tnemraps redccad nioseb arua no ,sp met ud trapulp al ,sia m ,m ed tnaruoc tnemll neib engisd mi* : tarappa tluci ffid etitep enuuq etatsnoc no ,tnadnepeC
map<char, int> ::reverse_iterator im ; ..... for (im=m.rbegin() ; im!=m.rend() ; im++) { /* ici *im dsigne llment courant de } /* itrateur inverse */ /* sur un map<char,int> */ /* im parcourt tout le map m */ m */ for (im=m.begin() ; im!=m.end() ; im++) cout << "(" << (*im).first << "," << (*im).second << ") " ;

: st na v i us sa m -hcs xued sed nul rap m ed stneml sel suot riruocrap tnemeuqissalc arruop nO .tne meuqs -nirtni snnodro tnos sfitaicossa sruenetnoc sel ,sesirper srueisulp tid snoval suon e mmoc ,euq ecrap euq elbissop tsen iceC .pam essalc al rap inruof rotareti euqissalc lennoitceridib ruetarti nu ceva riruocrap el arruop no ,m euq let pam nud stne ml sel suot rehci ffa ruoP
577

#include <iostream> #include <map> using namespace std ; main() { void affiche (map<char, int>) ; // voir remarque paragraphe 2.4 du chapitre 25 map<char, int> m ; cout << "map initial : " ; affiche(m) ; m[S] = 5 ; /* la cle S nexiste pas encore, lelement est cree */ m[C] = 12 ; /* idem */ cout << "map SC : " ; affiche(m) ; cout << "valeur associee a la cle S : " << m[S] << "\n" ; cout << "valeur associee a la cle X : " << m[X] << "\n" ; cout << "map X : " ; affiche(m) ; m[S] = m[c] ; /* on a utilise m[c] au lieu de m[C] ; */ /* la cle c est creee */ cout << "map final : " ; affiche(m) ; } map<char, int> ::iterator im ; /* itrateur sur un map<char,int> */ ..... for (im=m.begin() ; im!=m.end() ; im++) /* im parcourt tout le map m */ { /* ici *im dsigne llment courant de m */ }

1 - Le conteneur map

; )1.1 ehpargarap ud elpmexe erton snad e mmoc( ediv ruenetnoc nud noitcurtsnoc : stilibissop siort tneti mil es selle ; sleitneuqs sruenetnoc sel ruop euq setniertser sulp puocuaeb tnos ruenetnoc let nud noitcurtsnoc ed stilibissop se L

.sini fdrus tnemelbanevnoc ert tnev -iod sruetarpo sec ,essalc ep yt ed tse eriap al ed sniom ua stne ml sed nul o sac el snad ,udnetne neiB .ruelav al siup ,lc al < drobad euqilppa liuq erid--tsec ,euqihpargocixel nosiarap moc enu dnopserroc dnoces e L .< te == sruetarpo xued sed esopsid riap essalc a L : erircs tne melag tiarruop etnedcrp noitcurtsnil ,isniA .dnoces te tsrif s mmon scilbup serbmem xued ed esopsid riap essalc al , fitcudortni elpmexe erton snad uv al no e mmoC : riap_e kam dradnats noitcno f enu leppa tia f nol is selpmis sulp uep nu tnos sesohc sel siaM : sn a d em moc redcorp tnemeuqiroht tuep no ,eriap ellet enu sennod sruelav sed retce ffa ruoP : stnemugra xued ruet -curtsnoc nu evuort y nO .sruelav xued tejbo nu snad repuorger ed tnattemrep te ep yt ed sert -marap xued tnatropmoc ,riap essalc ed nortap nu etsixe li ,riov el ed snonev suon e mmoC
pair <int, float> p(3, 1.25) ; /* cre une paire forme dun int de */ /* valeur 3 et dun float de valeur 1.25 */ p = pair<int,float> (4, 3.35) ; /* ici, les arguments peuvent tre dun type */ /* compatible par affectation avec celui attendu */ p = make_pair (4, 3.35f) ; /* attention : 3.35f car le type des arguments */ /* sert instancier la fonction patron make_pair */ p.first = 4 ; p.second = 3.35 ; /* ici 3.35 (double) sera converti en float */

pam ruenetnoc nud noitasilitud fitcudortni elpmexE


map initial : map SC : (C,12) valeur associee a la valeur associee a la map X : (C,12) map final : (C,12) (S,5) cle S : 5 cle X : 0 (S,5) (X,0) (S,0) (X,0) (c,0)

578

1.3 Construction dun conteneur de type map 1.2 Le patron de classes pair
Les conteneurs associatifs CHAPITRE 26
void affiche (map<char, int> m) // voir remarque paragraphe 2.4 du chapitre 25 { map<char, int> ::iterator im ; for (im=m.begin() ; im!=m.end() ; im++) cout << "(" << (*im).first << "," << (*im).second << ") " ; cout << "\n" ; }

: selpmexe seuqleuq icioV .)42 ertipahc ud 3.5 ehpargarap ua lrap snova suon tnod( noitcnof essalc enu riruocer ed eriassecn tse liuq eif -ingis iuq ec ,noitcno f ed mon nu sap non te ep yt nu rinruo f ed eriassecn srola tse li ,sac rein -red ec snaD .non uo )>tni<ssel e mmoc( ini fdrp erianib tacidrp nud e mro f suos tinruof nol euq noitaler ertua enu tnasilitu ne nnodro ertd ruenetnoc nu resop mid elbissop tse lI .stejbo sed tnos slc sel euqsrol > ruetarpol ed noitini fdrus enud uo ,gnirts uo serialacs sep yt sel ruop eini fdrp noitaler al ed essigas liuq ,< noitaler al esilitu no ,tua fd raP .slc sel tne melbanevnoc rennodro ruop tcirts elbia f erdrod noitaler e n u l e p p a t n as i a f n e s n n o dr o t n e m e u q s nir t n i t n o s sr u e n e t n o c s e l , ti d j d a l n o e m m o C
1.3.2 Choix de lordre intrinsque du conteneur

: eriurtsnoc ruop tilatot ne uo eitrap ne resilitul arruop no ,eilp mer tne melbanevnoc te : i s n i a e ti ur t s n o c , r l e ts il e n u et si x e l is , e l p m e x e r a P . > s r u e l a v _ s e d _ e p y t ,slc_sed_epyt<riap ep yt ed ert tneviod snrecnoc stneml sel : etnatropmi ecnerf fid enu tnadnepec ceva ,sleitneuqs sruenetnoc sel ruop ertnocner jd tilibissop enud tigas lI ecneuqs enud ritrap noitcurtsnoC
map <int, long> m1 ; ..... map <int, long> m2(m1) ; /* ou encore : map <int, long> m2 = m1 ; */ list<pair<char, long> > lr (...) ;

.stejbod tigas liuqsrol snrecnoc stne ml sed eipocer rap ruetcurtsnoc el elleppa ,erdnetta ys tuep no em moc ,iuq eipocer rap ruetcurtsnoc euqissalc nud tigas lI epyt emm ed ruenetnoc ertua nud ritrap noitcurtsnoC
map <int, long> m1 ; /* cls de type int, valeurs de type long */ map <char, point> m2 ; /* cls de type char, valeurs de type point */ map <string, long> repert ; /* cls de type string, valeurs de type long */

: )essalc ep yt nu tse tniop euq esoppus no( selpmexe sec snad em moc ,ruelav al ruop te lc al ruop suluov sep yt sel resicrp ed etnetnoc es nO ediv ruenetnoc nud noitcurtsnoC .trap tniop ec snoreni maxe suon ,tralc ed sulp ruoP .ruenetnoc el tnemeuq -snirtni rennodro ruop esilitu ares iuq erdrod noitaler al risiohc ed elbissop tse li ,ertuo nE .ecneuqs enud ritrap noitcurtsnoc ; ep yt e mm ed ruenetnoc ertua nud ritrap noitcurtsnoc
579
1.3.1 Constructions utilisant la relation dordre par dfaut

map <char, long, greater<char> > m1 ; /* les cls seront ordonnes par /* valeurs dcroissantes - attention > > et non >> map <char, long, greater<char> > m2(m1) ; /* si m2 nest pas ordonn par /* la mme relation, on obtient une erreur de compilation map <char, long> repert (lr.begin(), lr.end() ) ;

1 - Le conteneur map

*/ */ */ */

.silitu uep tse noitcurtsnoc ed ep yt ec ,euqitarp nE

: erinam ettec ed 2mi te 1mi rap stniop stneml xua sevitaler slc sel rerapmoc arruop no : ceva ,elp mexe raP .pmoc_yek ed etiudd tne melpmis tse elle ,tnemerbil eisiohc sia maj tsen noitcno f ettec ,pmoc_yek tne meriart -noc ,euq neib areton nO .tsrif serbmem sel eriartxe ne riova snas ,slc sed erdrol tnavius ,)seriap xued ,cnod( stne ml xued rerap moc ed ertte mrep ed tse noitcno f ettec ed trtniL .slc sed ruelav al noles sruojuot ,stne ml xued rerap moc ruop elbasilitu noitcno f al tnassin -ruo f )(pmoc_eulav erbmem noitcno f enud esopsid pam essalc al ,erialimis erinam enuD . n o it c ur ts n o c a l ed srol esilitu t a erdrod noitaler elleuq ,slc sed erap moc nouq sio f euqahc ,rednamed es ri o v a d r e ti v t u e p a l e c , eri art n o c s a c e l s n a d ; t r t n i d er u g et n es r p e n i c e c ,t u a f d r a p erdrod noitaler al tnasilitu ne sruenetnoc slet ed rennodrod etnetnoc es nol euq tnat ,setreC : ce v a ta tl us r e m m el ar d ne it b o n o ,s ia m
if (a < c) ..... if m.key_comp() (a, c) ..... /* notez bien key_comp() (....) */ map <char, int> m ; map <char, int>::iterator im1, im2 ;

: snad e mmoc ,etcerid noa f ed rahc ep yt ed slc xued rerap moc ,setrec ,tuep no : fitcudortni elp mexe erton ed ruenetnoc el ceva ,elpmexe raP .slc sel rennodro ruop esilitu noitcno f al tnassinruo f )(pmoc_yek erb me m noitcno f enud tnesopsid pam sessalc se L .fedepyt noitcurt -snil riruocer reticni sio frap tuep eluocd ne iuq snoitaton sed ruedruol a L .ruenetnoc el tnemelbanevnoc reicnatsni ruop slc sed ep yt ua tnadnopserroc epyt ,tne mugra emis -iort e mmoc >epyt<ssel resicrp sruojuot tuaf li ,sac ec snaD .slc sed erdrod noitaler al r u o p t u a f d r a p r u e l a v e n u d x i o h c e l r e t p e c c a s a p e n t n e v u e p s n o i t a t n e m l p mi s e ni atr e C
1.3.3 Pour connatre la relation dordre utilise par un conteneur
map<char, int> m ;

580

Les conteneurs associatifs CHAPITRE 26

if ( key_comp() ( (*im1).first, (*im2).first) ) ..... if ( value_comp() (*im1, *im2) ) ..... class mon_ordre { ..... public : bool operator () (int n, int p) { ..... } /* ordre faible strict */ } ; map <int, float, mon_ordre> m_perso ; /* cls ordonnes par le prdicat */ /* mon_ordre, qui doit tre une classe fonction */

: isnia redcorp ulla f tiarua li ,pmoc_yek cevA

e uqrameR

ruelav al ed te tsrif.)ti*( lc al ed e mro f eriap enud tigas liuq snoleppar ; tnadnopserroc tnemll engisd ti* noisserpxel ,pam ep yt ed ruenetnoc nu rus edilav ruetarti nu tse t i is ,s t ne d crp s elp me xe se l s na d ti a f j d al n o e m m o c t e er d ne tt a ys tu ep no e m m oC
1.4.2 Accs par itrateur

: el p m e x e r a P . n oi t a ci f i d o m n e u q n o it at l us n o c n e n e i b iss u a , al e c t e et n ats i x e n i l c e n u e u q il p p a l n o u q sr ol s d , t n e m l l e v u o n n u d n oi t a r c al er i u d n o c tuep liuqsiup ugib ma tse ruetarpol rap scca tec iouq ne rtno m jd a 1 ehpargarap e L .elliesnocd tnemetro f ares tnatsixe tneml nud )ruelav + lc( elabolg noitaci fido m ed e v i t a t n e t e n u , n i o l s ul p u e p n u arr e v e l n o e m m o c ,tr a p ert u a d , t n e m l l e v u o n n u d n oi t a r c al e n m a e t n a ts i x e ni l c e n u s c c a d e vi t at n e t e n u , tr a p e n u d , t e f f e n E .s f it ai c o ss a sr u e n - e t n o c s e d e m m er u t a n a l i l r e i l u ci tr a p u e p n u r u o t n u t n e n n er p s n o it ar p o s e c , sl ei t n e u q s sruenetnoc xua troppar rap ,tnadnepeC .rei fidom al ruop tios ,ruelav al ertannoc ne ruop tios ,stnatsixe stne ml xua redccad tnemeuqiroht te mrep pam ,ruenetnoc tuot em moC
1.4.1 Accs par loprateur [ ]

.)5 ,1( lc al revuort te )9 ,1( lc al rehcrehcer arruop no ,slc ed esiug ne ssilitu stniop ed elpmexe erton ceva sruojuot ,tid tnemertuA .ruenetnoc el rennodro ruop esilitu erdrod noit -aler al rus neib te leb siam ,tilagd noitaler euqithtop yh enu rus sap non ,aredno f es en -nod lc ed tneml nud ehcrehcer al ,niol sulp riov el ed noisaccol arua no e mmoc ,sulp eD .setnelaviuq em moc tnortarappa essicsba em m ed stniop sed tnadnopserroc slc sel ,snoitidnoc sec snad ; stniop sed sessicsba sel rus tnemeuqinu tna yuppas ne tniop essalc al snad eini fd t tia < noitaler al euq snosoppus te tniop ep yt e d s te jb o s ed lc e m m oc t na si li t u p a m n u s n or d is no c ,e lp me x e ra P .42 ert ipa hc ud 2.6 ehpargarap ua uqilpxe t a liuq let ,erdrod noitaler al rap etiudni tse iuq ellec tnat ecnelaviuql ; etnelaviuq lc enu tnadssop tne ml ertuad sap etsixen lis euq ruenetnoc let nu snad tiudortni tsen tne ml levuon nuuq erid tiardua f li ,sicrp sulp ert ruop ,tia f nE .seuqinu tnos slc sel ,pam ep yt ed ruenetnoc nu snad ,euq tnemelarng tid no ,elpmexe raP . s a c s er t u a s e l s n a d em m ed tne meriassecn sulp av nen lI .esop es en reilucitrap emlborp nucua ,)<( tua fd rap noitaler al eti mil es nouq te gnirts uo erialacs ep yt ed slc sed esilitu nol euq tnaT
1.3.4 Consquences du choix de lordre dun conteneur

1.4 Accs aux lments

map<char, int> m ; ..... m [S] = 2 ; /* /* /* ... = m[T] ; /* /*

si la cl make_pair la valeur si la cl make_pair

S nexiste pas, on cre llment (S, 2) ; si la cl existe, on modifie de llment qui ne change pas de place T nexiste pas, on cre llment (T, 0)

1 - Le conteneur map

*/ */ */ */ */

581

.reil -ucitrap uep nu elr nu tiaf ne a reinred ec euq siam tnemugra let nu tnavecer noitresnid noit -cno f enu em m dnauq etsixe liuq arrev nO .fitaicossa ruenetnoc nud stneml sel snnodro tne meuqsnirtni tnos tnod erinam al rus riga sulp tuep en nouqsiup ertd nosiar ed erug s u l p a n n n o d t n e m ec al p m e n u n oi tres n i d e ll ec , n o it ac i fi n g is e m m a l e vr es n o c r ue tar t i nu rap ngisd tneml nud noisserppus ed noiton al is ,sio fetuoT .sleitneuqs sruenetnoc sel r a p s e tr e f f o t n os i u q s el l e c s e u g o l a n a ,s n oi ss er p p us s e d t e s n oi tr e s n i s e d r us s e d n o f s e u qi m -an yd snoitacifidom ed stilibissop sed er ffo pam ruenetnoc el ,erdnetta ys tuep no e mmoC

.stnatrecnocd ert srola tnevuep statlusr se L .ruenetnoc el ren -nodro ruop silitu erianib tacidrp el ceva elbitapmocni erina m ed == ruetarpol ini fd -r us a n o e ll e u q a l s n a d ess al c , ess al c e p y t e d s t n e m l s e d er i a f f a a n o l e u qsr ol el b is n e s tuotrus tse euqramer ettec ; == ruetarpol rus sap esab es en dnif noitcno f al ,noitnettA

.)(dne ruelav al tinruof noitcno f ettec ,vuort tsen tneml nucua iS .)ruenetnoc el rap esilitu erdrod noitaler al ed snes ua etnelav -iuq lc enu uo( ennod lc enu tna ya tne ml nu rus ruetarti nu rinruo f : lerutan elr nu a )lc( dnif : er b m e m n o it c no f a L
1.4.3 Recherche par la fonction membre find

sia ib el rap ,

: s n o it i d n o c sec snaD .selleutca snoitatne mlp mi sel setuot snad etatsnoc nol euq ec sap tsen ec ,euq - it ar p n E .t n e m l l e v u o n u d n o itr es ni e n u d e i v i us , t i r a p n gi s d t n e m l l e d n o it c urts e d enu etnelaviuq ert tiarved noitacifidom ellet enuuq erid ed ert elbmes suon elbannosiar e hcr a m d el u es a L ? j d et si xe R l c a l i s ress ap e s l i-t i od e uq , trap er t ua d ; ca lp d ert c n o d ti ar v e d l i ; e c al p a s ert s ul p e n e d e u qs ir t n e m l l e v u o n el , l c a l e d r u el a v al ei f i d o m noitarpo ellet enu e mmoc ,trap enud ,te ffe nE .tnessiarappa stugibma seniatrec ,rO .emron al r a p i f i c ps t n e m el at o t s a p t n e m el l e u t c a ts e n n o it ar p o el l e t n u d t c a x e e l r e l si a M : erirc tiarruop no ,>tni ,rahc<pam ep yt ed ruenetnoc nu ruop ,elpmexe rap ; ti rap ngisd tnemll ed ruelav al rei fido m ed tidretni sap tsen li ,eiroht nE .ti* etlp moc eriap al uq ttulp )selle ertned enul uo( sruelav serinred xued sec ressertnis nema ttulp ares no ,sruelliad ,larng ne ; dnoces.)ti*( eicossa
582
Les conteneurs associatifs CHAPITRE 26
*it = make_pair (R, 5) ; /* remplace thoriquement llment dsign par ip */ /* fortement dconseill en pratique */

pam nud tneml nud ruelav al reifidom ed lliesnocd tnemetrof tse lI

1.5 Insertions et suppressions


e uqrameR

rueta rti nud

,luser elp mexe rap ,elbairav enu reralcd ulla f tiarua li ,eria f el uluov snoiva s uon iS . e l b a ir a v e n u s n a d r u o t er e d r u e l a v a l r e c a l p h cr e h c s a p s n o v a n s u o n , i ci , er o c n e t E : s n e s e c s n a d e lp - m e x e t n e d c r p er t o n r e t p a d a t n e m m o c , e l p m e x e r a p , i c i o v ; e s u e ir o b a l z e ss a ts e n o i t - a s i l i t u n o s e u q ar e t o n n o ; t n a d n o p s e rr o c r u e t ar t i l t s e n o i t i s o p t e u e i l u e a n o i tr e s n i l i s es i c r p c i d n i n e l o o b e l e l l e u q a l s n a d ,) c i d n i , n o i t i s o p ( r i a p e m r o f a l e d e r i a p e n u t s e i u q r u o t er e d r u e l a v e n u t n e s s i nr u o f t n e m l n u d n o i tr es n i d s n o i t c n o f x u e d s e L 2 . s e v i t u c s n o c s r u e l a v x u e d r e r a p m o c e d e u q n i o s e b a n n o i t c n o f a l e u q t i a f e l r a p e u q i l p x e s i u q e c , ) 1( O n e t i c a c i f f e e n u s r o l a t n e i t b o n o , n o i tr e s n i d t n i o p u a t n e m e t c a x e d n o p s er r o c e i nr u o f r u e l a v a l i S . n o i t r es n i d t c a x e t n e m e c a l p m e l ed e hcrehcer al retilica f ru op etia f tse iuq noitsegg us e nu tse noitisop ruetartiL ) er i a p , n oi ti s o p( tr e s n i : emro f al ed ,tresni ed noisrev e misiort enu etsixe li ,rueugir etuot nE 1
if(m1.insert(make_pair(5, 6.25f)).second) cout << "insertion effectue\n" ; else cout << "lment existant\n" ;

se uqrameR

: selp mexe seuqleuq icioV . ) M ( O n e ts e t ic ac i f fe l , u l u ov er dr ol t na v i us ir t tse ellavretni tec is ,sio fetuoT .ellavretnil ed stne mld erbmon el tnangisd M ,))M+N(goL(O ne tse ednoces al ed ellec ; )N goL(O ne tse noitcno f eri merp al ed ticaci ffeL .irporppa ep yt nud seriap sed ert tneviod snrecnoc stneml sel euq ,sac xued sel snad ,neib areton nO )nif ,tubd[ ecneuqs al ed seriap sel ersni // )nif ,tubd( tresni : e ll a vre t ni n u d s t ne m l se l t n e m l eri ap al er sn i / / )tneml( tresni : e n n o d r u e l a v e d t n e m l n u : rersnid te mrep tresni erbme m noitcno f a L .snoitarpo sed enucahc ruop etius al rap snoisicrp seuqleuq snoretroppa suoN .)N go L(O ne tse snoitarpo sec ed ticaci ffel ,elarng erina m enuD .etnelaviuq lc ed tne mld sap etsixen lis euq tituoban elle ,pam ep yt ed ruenetnoc nud sac el snad ,sruojuot tiassituoba leitneuqs ruenetnoc nu snad noitresni enuuq srola ,ertuo nE
583
1.5.1 Insertions

map<int, float> m1, m2 ; map<int, float>::iterator im1 ; ..... m1.insert (make_pair(5, 6.25f)) ; /* tentative dinsertion dun lment */ m1.insert (m2.begin(), m2.end()) ; /* tentative dinsertion dune squence */

1 - Le conteneur map

. sru ei sul p r e vu ort n e arru op n o ,

pamitlum

ruo p ; su lp ua nu arua n e y li ,

pam

ru oP .1

. n oi t c urt s e d r u el s r p a s e l bi ss e c c a s u l p tnos en iuq s mirppus stneml sel ruop ,udnetne neib ,tpecxe ,sruetarti sed te secner fr sed noitadilavnid siamaj tnenartnen ,pam rus ,reilucitrap ne ,cnod ,s fitaicossa sruenetnoc sel rus snoitarpo sel ,sleitneuqs sruenetnoc sniatrec ruop essap es iuq ec tnemeriartnoC

.2 ehpargarap ua setnesrp dnuob_reppu te dnuob_re wol snoitcno f xua sruocer riova arruop no ,sac ec snaD .nnod ellavretni nu tneitrappa lc al tnod stneml sel suot remirppus etiahuos nol euq revirra tuep lI

.unetnoc nos tuot ed ruenetnoc el ediv )(raelc noitcno f al ,euqissalc tro f noa f ed ,nifnE
map<int, float> m ; map<int, float>::iterator im1, im2 ; ..... m.erase (5) ; /* supprime llment de cl 5 sil existe m.erase (im1) ; /* supprime llment dsign par im1 m.erase (im2, m.end()) ; /* supprime tous les lments depuis celui /* dsign par im2 jusqu la fin du conteneur m */ */ */ */

: se l p m e x e s e u ql e u q i ci o v n E l c e t n e l a v i u q l c e d s t n e m l s e l e mi r p p u s / / ) l c ( esare : e n n o d l c e d t n e m l l )nif ,tubd[ ellavretnil ed seriap sel emirppus // )nif ,tubd( esare : el l a vr e t ni n u d st n e m l s el noitisop rap ngisd tnemll e mirppus // )noitisop( esare : e n n o d n oi ti s o p e d t n e m l n u : re mirppus ed temrep esare noitcno f a L
1

. er u t ir c l u e p e u q l e u q r e g l l a r u o p ) f e d e p y t ( s e m y n o n y s s e p y t e d s n o i t i n i f d s e d r i r - u o c er e d e g as s u l p t n e m e l b a b or p t i ar es l i t e s e x e l p m o c s u l p u e p n u er o c n e t n e i ar es s e s - o h c s e l , t u a f d r a p > e p y t < ss e l r u e l a v a l s a p t n e t p e c c a n i u q s n o i t a t n e m l p m i s e l s n a D : e l b i s s o p n o i t ar a l c d e n u i c i o v ; s f i t c i f s t n e m u gr a s e d r e s i c r p u l l a f t i ar u a l i , t u a f d r a p r u e t c ur t s n o c e d s a p es o ps i d e n r i a p e m m o c ,s u l p e d ; i r p or p p a r i a p e p y t n u d
pair<map<int,float>::iterator, bool> resul(m1.end(),false) ;

584

1.6 Gestion mmoire


e uqrameR
1.5.2 Suppressions
Les conteneurs associatifs CHAPITRE 26

.reni maxed snonev suon euq pam essalc al ed stilannoitcno f selapicnirp sel tnartsulli e mmargorp ed telp moc elpmexe nu icioV

.2 ehpargarap ua seidut tnores selle ; trtnid sulp el tnetnesrp selleuq sac reinred ec snad tnadnepec tseC .pamitlum ep yt ed sruenetnoc sed cevauq pam ep yt ed sruenetnoc sed ceva neib issua selbasilitu tnos iuq tnuoc te egnar_lauqe ,dnuob_reppu ,dnuob_rewol serbmem snoitcno f sed etsixe li ,eiroht nE . ec n e na m -rep ne eulov noitasinagro nos te tne meuqsnirtni nnodro tse ruenetnoc let nu ,trap ertuad ,seriap sed tnos stne ml sel ,trap enud ,te ffe ne ; noitaci fingis enu rennod ed elici ffid tiares li selleuqxua seuqihpargocixel snosiarap moc ed stilibissop ed in ,ngissa noitcno f ed sap etsixen lI .ep yt em m ed sruenetnoc xued ed sunetnoc sel regnahcd tnattemrep pa ws noit -cno f al te noitatce ffa elues al tnetimil es pam sruenetnoc sed selabolg snoitalupinam se L

. e d il a v n i e n n e i v e d vi r u e t -artil euq iulec ,suqov jd seuqsir sel ertuo ,truoc no ,non uo etnesrp tios S lc al euQ : )>tni ,rahc<pam ep yt ed ruenetnoc nu rus edilav ruetarti nu tnangisd vi( elpmexe rap ; ennod noitisop ed tneml nu tnemelabolg rei fidom ed ,lliesnocd tne metrof euq neib ,elbissop tne meuqiroht tse li ,4.1 ehpargarap ua uqidni al no em moc ,sio fetuoT
585
*iv = make_pair (S, 45) ;

1.8 Exemple

1.7 Autres possibilits

#include <iostream> #include <map> using namespace std ; main() { void affiche(map<char, int>) ; map<char, int> m ; map<char, int>::iterator im ; m[c] = 10 ; m[f] = 20 ; m[x] = 30 ; m[p] = 40 ; cout << "map initial : " ; affiche(m) ; im = m.find (f) ; /* ici, on ne verifie pas que im est != m.end() cout << "cle f avant insert : " << (*im).first << "\n" ; m.insert (make_pair(a, 5)) ; /* on insere un element avant f m.insert (make_pair(t, 7)) ; /* et un element apres f cout << "map apres insert : " ; affiche(m) ; cout << "cle f apres insert : " << (*im).first << "\n" ;/* im -> f m.erase(c) ; cout << "map apres erase c : " ; affiche(m) ; im = m.find(p) ; if (im != m.end()) m.erase(im, m.end()) ; cout << "map apres erase int : " ; affiche(m) ; }

1 - Le conteneur map

*/ */ */ */

: r i o vas ,e n no d lc enu etnelaviuq lc enu tna ya stnemld ellavretnil tnanrecnoc snoitamro fni sed rinetbo ; ) lc ( tnuoc ed edial ,ennod lc enu etnelaviuq lc enu tna ya stnemld erbmon el ertannoc : te f f e ne , t uep nO . p a m -itlum ruenetnoc nu euqilppa sel nouqsrol trtni ruel tuot tnennerp ,pam essalc al ed serb - me m snoitcnof ed erbmon niatrec nu ,reuqramer tia f jd snoval suon e mmoc ,trap ertuaD .mu mixam ua lues nuuq tiamirppus nen elle ,pam ruen -etnoc nu cevauq sidnat stneml srueisulp re mirppus tuep )lc( esare erb me m noitcno f al ; n i ol sulp uep nu enimaxe dnuob_re wol noitcno f al tnaruocer ne unnoc ert tnadnepec tuep i c- i ul e c ; r e i m er p u d t i g as l i u q s a p es i c r p e n n o , n oi t n e tt a ; e ul u o v l c al t n a y a s t n e m l sed nu rus ruetarti nu tinruo f dnif erbmem noitcnof al ,setnelaviuq slc srueisulp etsixe lis : ios ed tnov iuq secnaun seuqleuq ceva ,serbmem snoit -cno f semm sel tnedssop iuq pamitlum sruenetnoc xua stluci ffid snas tnesilarng es pam sruenetnoc sed stilibissop sel ,noitcirtser ettec si mroH .slc sed ticinu non al tiariudniuq tugibmal ed unet etp moc ,ruenetnoc let nu elbacilppa sulp tsen ] [ ruetarpol ,erdnetta ys tuep no e mmoC .s fitucsnoc srola tnessiarappa stnadnopserroc stneml sel ,udnetne neiB .setnelaviuq slc srueisulp revuort tuep no ,tnemelarng sulp ,uo sio f srueisulp ertar -appa tuep lc em m enu ,pamitlum ep yt ed ruenetnoc nu snad ,tid jd snoval suon e mmoC

pa m essalc al ed noitasilitud elpmexE


map cle map cle map map initial f avant insert apres insert f apres insert apres erase c apres erase int : : : : : : (c,10) (f,20) (p,40) (x,30) f (a,5) (c,10) (f,20) (p,40) (t,7) (x,30) f (a,5) (f,20) (p,40) (t,7) (x,30) (a,5) (f,20)

586

2.1 Prsentation gnrale

2 Le conteneur multimap
Les conteneurs associatifs CHAPITRE 26
void affiche(map<char, int> m) // voir remarque paragraphe 2.4 du chapitre 25 { map<char, int>::iterator im ; for (im=m.begin() ; im!=m.end() ; im++) cout << "(" << (*im).first << "," << (*im).second << ") " ; cout << "\n" ; }

: renimaxed snonev suon euq pamitlum essalc al ed stilannoitcno f selapicnirp sel tnartsulli e mmargorp ed telp moc elpmexe nu icioV

. s a p e ts i x e n g u o e s l c s e d s n i o m u a e n u l e u q e u qs i r e l tr u o c n o u qs i u p e n n e i v n o c : euq let leppa nuuq niatrec sap tse n li ,sa c e c s n ad s lc s e d ti ci n u l r gl a m ,t e f fe n e ; p a m ep yt ed r u e ne tn o c nu d s ac el snad trtni nu retnesrp tuep elpmexe tnedcrp erton ed esare ed leppa emixued e L
m.erase (m.find(e), m.find(g)) ;

: elp mexe titep nu icioV ) )lc( dnuob_reppu.m ,)lc( dnuob_re wol.m( riap_ekam = )lc(egnar.lauqe.m : n oi t a l er a l a n o u q ar e t o n n O )lc( dnuob_reppu te )lc( dnuob_re wol ,stnedcrp // sruetarti xued sed sruelav sed emro f eriap enu tinruo f // )lc( egnar_lauqe lc e tn el a vi uq lc e n u / / tna ya tne ml reinred el rus ruetarti nu tinruo f // )lc( dnuob_reppu l c e tn el a vi uq lc e n u / / tna ya tne ml rei merp el rus ruetarti nu tinruo f // )lc( dnuob_re wol

2.2 Exemple

#include <iostream> #include <map> using namespace std ; main() { void affiche(multimap<char, int>) ; multimap<char, int> m, m_bis ; multimap<char, int>::iterator im ; m.insert(make_pair(c, 10)) ; m.insert(make_pair(f, m.insert(make_pair(x, 30)) ; m.insert(make_pair(p, m.insert(make_pair(y, 40)) ; m.insert(make_pair(p, cout << "map initial :\n " ; affiche(m) ; m.insert(make_pair(f, 25)) ; m.insert(make_pair(f, m.insert(make_pair(x, 2)) ; cout << "map avec fff et xx :\n " ; affiche(m)

multimap<char, int> m ; ..... m.erase(m.lower_bound(c), m.upper_bound(c)); /* quivalent : */ /* erase(c) ; */ m.erase(m.lower_bound(e), m.upper_bound(g)); /* supprime toutes les cls */ /* allant de e g ; aucun quivalent simple */

2 - Le conteneur multimap

; 20)) ; 20)) ; 40)) ; 35)) ;

e uqrameR

587

588

Les conteneurs associatifs CHAPITRE 26

im=m.find(x) ; /* on ne verifie pas que im != m.end() */ m_bis = m ; /* on fait une copie de m dans m_bis */ m.erase(im) ; cout << "map apres erase(find(x)) :\n " ; affiche(m) ; m.erase(f) ; cout << "map apres erase(f) :\n " ; affiche(m) ; m.swap(m_bis) ; cout << "map apres swap :\n " ; affiche(m) ; cout << "il y a " << m.count(f) << " fois la cle f\n" ; m.erase(m.upper_bound(f)) ; /* supprime derniere cle f - ici pas de test*/ cout << "map apres erase (u_b(f)) :\n " ; affiche(m) ; m.erase(m.lower_bound(f)) ; cout << "map apres erase (l_b(f)) :\n " ; affiche(m) ; m.erase(m.upper_bound(g)) ; cout << "map apres erase (u_b(g)) :\n " ; affiche(m) ; m.erase(m.lower_bound(g)) ; cout << "map apres erase (l_b(g)) :\n " ; affiche(m) ; m.erase(m.lower_bound(d), m.upper_bound(x)) ; cout << "map apres erase (l_b(d), u_b(x)) :\n " ; affiche(m) ; } void affiche(multimap<char, int> m) // voir remarque paragraphe 2.4 du chapitre 25 { multimap<char, int>::iterator im ; for (im=m.begin() ; im!=m.end() ; im++) cout << "(" << (*im).first << "," << (*im).second << ")" ; cout << "\n" ; } map initial : (c,10)(f,20)(p,40)(p,35)(x,30)(y,40) map avec fff et xx : (c,10)(f,20)(f,25)(f,20)(p,40)(p,35)(x,30)(x,2)(y,40) map apres erase(find(x)) : (c,10)(f,20)(f,25)(f,20)(p,40)(p,35)(x,2)(y,40) map apres erase(f) : (c,10)(p,40)(p,35)(x,2)(y,40) map apres swap : (c,10)(f,20)(f,25)(f,20)(p,40)(p,35)(x,30)(x,2)(y,40) il y a 3 fois la cle f map apres erase (u_b(f)) : (c,10)(f,20)(f,25)(f,20)(p,35)(x,30)(x,2)(y,40) map apres erase (l_b(f)) : (c,10)(f,25)(f,20)(p,35)(x,30)(x,2)(y,40) map apres erase (u_b(g)) : (c,10)(f,25)(f,20)(x,30)(x,2)(y,40) map apres erase (l_b(g)) : (c,10)(f,25)(f,20)(x,2)(y,40) map apres erase (l_b(d), u_b(x)) : (c,10)(y,40)

p a m i t l u m e d n o i t a s il i t u d e l p m e x E

: )! statlusr sel snad elbisiv srt sap tsen ecapse ertcarac el ,noitnetta( tes essalc al ed stilannoitcno f selapicnirp sel tnartsulli e mmargorp ed telp moc elpmexe nu icioV

.ruelav enud euq noitisop enud ritrap neib issua ,elbissop sruojuot etser ,elle tnauq ,iuq stnemld noisserppus al uo noitresnil ruop euq noitcurtsnoc as ruop neib issua ,pam ruenetnoc nud sellec ed tnem -ellerutan tuot tnesiudd es tes ruenetnoc nud stilibissop sel ,etniartnoc ettec ed srohed nE
/* correct */ /* interdit */

: r u e la v al re i fi d o m n e s a p t ue p e n n o ; et n ats n oc e n u t s e t e s r u e n e t n o c n u d t n e m l n u u q ts e p a m s r u e n e t n o c s e l t e t e s s r u e n e t n o c s e l e r t n e ecner ffid ertua enU .noitalupina m al tnemellerutan etilica f ne iuq ec ,seriap sed sulp cnod tnos en tes ruenetnoc nud stneml se L .lc al eicossa tsen ruelav enucua leuqel snad ,pam ruenetnoc ud reilucitrap sac nu tse tes ruenetnoc el ,noitcudortni ne tid t a li em moC

3.2 Exemple

3.1 Prsentation gnrale

3 Le conteneur set

main() { char t[] = "je me figure ce zouave qui joue du xylophone" ; char v[] = "aeiouy" ; void affiche (set<char> ) ; set<char> let(t, t+sizeof(t)-1), let_bis ; set<char> voy(v, v+sizeof(v)-1) ;

#include <iostream> #include <set> #include <string> using namespace std ;

set<int> e(...) set<int>::iterator ie ; ..... cout << *ie ; *ie = ... ;

let_bis = let ; set<char>:: iterator iv ; for (iv=voy.begin() ; iv!=voy.end() ; iv++) let.erase(*iv) ; cout << "lettres presentes : " ; affiche (let) ; cout << "il y a " << let.size() << " lettres differentes\n" ; if (let.count(z)) cout << "la lettre z est presente\n" ; if (!let.count(b)) cout << "la lettre b nest pas presente\n" ; /* ensemble dentiers */ /* itrateur sur un ensemble dentiers */

3 - Le conteneur set

589

. t e s i t l u m sr u e n -etnoc sed sac el snad erocne tnorennoitcno f ,sussed-ic suqov ,noinur ed uo noitcesretnid xuarng se mhtirogla se L .euqita mhtam elbmesne-itlum el snad sap tsel en tesitlum n u d n oi ti n i f d al eri ass e c n er dr o d n o it a l er al e u q e c n er f fi d et t e c c e v a ) e u d n a p r u e p( elb mesne-itlum ed euqita mhta m noiton al dnopserroc lI .ertarappa stnelaviuq stneml srueisulp esirotua no leuqel snad ,tes ruenetnoc nu tse tesitlum ruenetnoc el ,setnelaviuq slc srueisulp esirotua no leuqel snad pam ruenetnoc nu tse pamitlum ruenetnoc el euq e m m eD

. n o its e u q n e s n oi t - ar p o s e l r esi l a r e d art t e mr e p s e l b m es n e s e d r e il u ci tr a p s a c u a n o it a c il p p a r u e L . e n n o dr o ecneuqs elleuq etrop min ceva selbasilitu ,xuarng se mhtirogla sed etsixe liuq ,72 ertip -ahc ua snorrev suon ,tnadnepeC .)...noinur ,noitcesretni( seuqissalc setsilbmesne snoitarpo s e l r e si l a r e d t n a t t e mr e p er b m e m n o i t c n o f e d s a p et si x e n l i ,t e s e ss a l c a l s n a d ,sr u el li a r a P .== ruetarpol e d n o it i ni f dr us el l e u t n e v e n u n o n t e s t n e m l x u e d e d ti l a g l ri n i f d r u o p e si li t u ar e s iuq noitaler ettec tsec euq euv ed erdrep sap arduaf en li ,ertuo nE .tcirts elbia f erdrod noit -aler enud etnadnopserroc essalc al rinum srola ardua f liuqsiup stejbod elbmesne nu rerc ne ma ares nol euq sd euqramer ettec ed etpmoc rinet ardua f lI .tne meriassecn sap tsel en euqita mhtam elbmesne nuuq sidnat ,nnodro tne meriotagilbo tse tes ep yt ed ruenetnoc nU

tes ruenetnoc ud noitasilitud elpmexE


lettres presentes : a c d e f g h i j l m n o p q r u v x y z il y a 22 lettres differentes la lettre z est presente la lettre b nest pas presente lettres sans voyelles : c d f g h j l m n p q r v x z lettres + toutes voyelles : a c d e f g h i j l m n o p q r u v x y z

590

4 Le conteneur multiset
3.3 Le conteneur set et lensemble mathmatique
Les conteneurs associatifs CHAPITRE 26
void affiche (set<char> e ) // voir remarque paragraphe 2.4 du chapitre 25 { set<char>::iterator ie ; for (ie=e.begin() ; ie!=e.end() ; ie++) cout << *ie << " " ; cout << "\n" ; } } cout << "lettres sans voyelles : " ; affiche (let) ; let.insert(voy.begin(), voy.end()) ; cout << "lettres + toutes voyelles : " ; affiche (let) ;

5 - Conteneurs associatifs et algorithmes

591

5 Conteneurs associatifs et algorithmes


dnif rap ehcrehcer enu ,elp mexe raP .sleusu semhtirogla xua tnemelici ffid zessa tnetrp es iuq ,riap ed stnemld mro f tse pamitlum uo pam ep yt ed ruenetnoc nu ,drobad tuoT . a l e c s n os i ar sr u ei s u l p a y l I .s fi t a i c -ossa sruenetnoc xua xuarng semhtirogla sniatrec reuqilppad elici ffid tnemelarng tse lI

: )! statlusr sel snad elbisiv srt sap tsen ecapse ertcarac el ,noitnetta( tesitlum essalc al ed stilannoitcno f selapicnirp sel tnartsulli e mmargorp ed telp moc elpmexe nu icioV
#include <iostream> #include <set> using namespace std ; main() { char t[] = "je me figure ce zouave qui joue du xylophone" ; char v[] = "aeiouy" ; void affiche (multiset<char> ) ; multiset<char> let(t, t+sizeof(t)-1), let_bis ; multiset<char> voy(v, v+sizeof(v)-1) ; cout << "lettres presentes : " ; affiche (let) ; cout << "il y a " << let.size() << " lettres en tout\n" ; cout << "la lettre e est presente " << let.count(e) << " fois\n" ; cout << "la lettre b est presente " << let.count(b) << " fois\n" ; let_bis = let ; multiset<char>:: iterator iv ; for (iv=voy.begin() ; iv!=voy.end() ; iv++) let.erase(*iv) ; cout << "lettres sans voyelles : " ; affiche (let) ; } void affiche (multiset<char> e ) // voir remarque paragraphe 2.4 du chapitre 25 { multiset<char>::iterator ie ; for (ie=e.begin() ; ie!=e.end() ; ie++) cout << *ie ; cout << "\n" ; } lettres presentes : acdeeeeeeefghiijjlmnoooopqruuuuuvxyz il y a 44 lettres en tout la lettre e est presente 7 fois la lettre b est presente 0 fois lettres sans voyelles : cdfghjjlmnpqrvxz

tesitlum ruenetnoc ud noitasilitud elpmexE

.s fitaicossa sruenetnoc sed ceva selbasilitu tnos iuq xuec s n or e u q i d n i s u o n ,s e m h tir o gl a x u a r ca s n o c 7 2 ert i pa hc e l s na d , el ar n g er i na m e n u D .ruenetnoc u d sr u el a v s el s a p ei f i d o m e n i u q e m h tir o gl a t u o t r e u q il p p a d el b iss o p ets er li ,s n i o m n a N .serdro xued sel ertne stilfnoc sed tnessiarappa srola te ,erdro ertua nu tnavius reirt ehc -r e h c n o ti os ,t r t ni n u c u a a n i u q e c , e nr e t n i er dr o l t n a v i us r eir t e h cr e h c n o ti os : et si l a r er u g ts e n e u q s nir t n i n o a f e d n n o dr o j d f i t a i c oss a r u e n e t n o c n u r eir t r i ol u o v , e m m e D .ennod lc enu rus tnalliavart dnif erbmem noitcnof al resilitu arerfrp no ; trtnid erug tnemelarng etnesrp en iuq ec ,)ruelav ,lc( eriap al rus eria f es tiarved
592
Les conteneurs associatifs CHAPITRE 26

: e mr o f al e d n oi tc ur ts ni e n u t ne it n oc e m h tir o gl a n u u qsr ol , el p me x e r a P .s l u p i n a m t ne m e vi tc e f fe stne ml sed ep yt el tiudd es leuqud ritrap ,nnod ep yt nu edssop ,iul tnauq ,iuq ruet -arti nud eriaid mretnil rap sruojuot sia m ,tne metcerid siamaj tia f es en noitalupinam ettec ,tnadnepeC .relupina m snema tnores sliuq stneml sed esicrp ecnassiannoc snas ,tirc tse edoc rue L .snoitcno f ed snortap ed e mrof suos tnetnesrp es dradnats semhtirogla se L

.stnatsixe se mhtirogla sed nucahc ed leppal ed etcaxe exatn ys al ed te ticaci ffel ed ,sicrp elr ud etlpmoc ecner fr enu ,B exennAl snad arevuort nO .se mmargorp ed selpmexe sed rap stnatropmi sulp sel rertsulli te ,se mhtir -ogla stner ffid sed elr el erdnerpmoc eria f tuot tnava esiv ertipahc ec euq neib areton nO .noitresnid sruetarti sel te tol f ed sruetarti sel ,ecneuqs ed noiton al ,ruetartid seirogtac sel : reilucitrap ne ,noitasilitu ruel snad tnenneivretni iuq selarng snoiton ed erb mon niatrec nu elleppar uo etnesrp li ,tnav - ar a p u A . dr a d n at s e u q h t oi l bi b a l e d s e m h tir o gl a s el r a p s e tr e f f o s ti li b iss o p s e t n er f f i d s el esopxe ertipahc tnesrp e L .selpmexe stnedcrp son ed sniatrec snad snu-seuqleuq resilitu ned noisaccol ue snova suon te ,42 ertipahc ua etnesrp t jd a e mhtiroglad noiton a L

1.1 Algorithmes et itrateurs

1 Notions gnrales

*it = ...

Les algorithmes standard

27

. ei tr os e d dr a d n a ts t i n ul e u q s l e t st o l f s ni atr e c e d t i or d n e e m m n u n e s i o f x u e d erircd elbissop sap tsen li ,tnemetse finam ,rO .ecneuqs enu snad snoitamro fni sed eriud -ortni tuep nouq noa f emm al ed ,tol f nu rus ep yt e m m ed sruelav ed etius enu erircd ertte mrep ed tse eitros ne ruetartil ed noitacifitsuj elapicnirp al euq riov tua f li ,snoitcirtser sec erdnerp moc xuei m ruop ,erocne L .setcnitsid sruelav xued ed noitarc al tnorenartne : s e v iss e c c u s s n oi t a t c e f f a s el , 2 t i = = 1 t i a n o , n n o d t n e m o m nu ,is ; egassap lues nuuq artte mrep en eitros ne ruetartil ,ertne ne ruetartil e mmoC : r u e t ar t i l e t n u t s e t i i s , el p m e x e r a P . n oi t a t l u s n o c al sac nucua ne te noitaci fidom al euq esirotuan liuq ecnerf fid ettec ceva ,lennoitceridinu ruetarti nuuq stirporp se m m sel edssop eitros ne ruetarti nu ,etnatimocnoc noaf eD . dr a d - n ats e r t n e d ti n ul e u q s l e t s t o l f s ni atr e c r us r u e l a v e m m e n u si o f x u e d er il e d el b iss o p sap tsen li ,tnemetse fina m ,rO .ecneuqs enud snoitamro fni sed erutcel al eugolana noa f enud ,tol f nu rus ep yt em m ed sruelav ed etius enud erutcel al nitsed tse ertne ne ruetar - t il e u q ti as n o u q sr o l s d e i fi ts u j e s e ll e ,i c I .s l e n n o it c er i d i n u sr u e t ar t i s e d s a c el s n a d s a p tiatsixen noitcirtser etteC .ruelav em m al tne meriassecn sap tnengisd en ++2ti te ++1ti , 2 t i = = 1t i , n n o d t n e m o m n u , i s , t i d t n e m e r t u A . e r i r c d e d t e m r e p l i u q s t n e m l s e l r u s )essap elues enu issua tid no( egassap lues nuuq esirotuan ertne ne ruetarti nu ,ertuo nE
... = *it ; *it = ... ; /* correct si it est un itrateur en entre */ /* impossible si it est un itrateur en entre */ *it = ... ; ... = *it ; /* correct si it est un itrateur en sortie */ /* impossible si it est un itrateur en sortie */ *it1++ = ... ; *it2++ = ... ;

: r u e t ar t i l e t n u t s e t i i s ; n o i t a ci f i d o m as sulp te etnadnopserroc ruelav al ed noitatlusnoc al euq esirotuan liuq ecner ffid ettec ceva ,lennoitceridinu ruetarti nuuq stirporp sem m sel edssop ertne ne ruetarti nU .e c n e u qs e n u e m m o c tol f nu redccad tnette mrep ,niol sulp uep nu snorrev el suon em moc ,iuq tol f ed sruetarti s e d u a e vi n u a t r t ni n u t n e t n es r p s li ,sr u e n et n o c s e d n u c u a r a p si nr u o f t n e i os e n s li u q n e i B .eitros ne sruetarti sed te ertne ne sruetarti sed tigas li ; slennoitceridinu sruetarti sel euq s e vi t cir ts er s ul p s t ir p or p e d t n a s o ps i d ,sr u e t ar t i d s eir o g t a c s ert u a x u e d e tsi x e li , t i a f n E .tcerid scca te lennoitceridib ,lennoitceridinu : seirogtac siort ne srola tneiassitrapr es iuq sicossa sruetarti sel te sruenetnoc ed stne ml sed lupina m tuotrus snova suon ,iciuqsuJ
1.2.1 Itrateur en entre

.noitseuq ne emhtiroglal tnadnopserroc nortap noitcno f al ed noitaicnatsnil ed srol ,noitalipmoc al ini fd tnemetia frap ares ep yt ec siam ,lupina m isnia ares iuq tnemll ed ep yt el sap tnemevitcef fe tannoc en em margorp ud ecruos edoc el
594
Les algorithmes standard CHAPITRE 27

1.2 Les catgories ditrateurs

1.2.2 Itrateur en sortie

, ec n euq s erimerp al tnadnopserroc ellavretni reimerp nu tnemeuqissalc tnessini fd stnemugra xued : ri o va s , n o a f e m m a l e d t n e d c or p se m h tir o gl a se c s u ot ,sa c ec s na D . e p yt e m m e d s t n e m l se d t na y a ert u a e n u s na d e c ne u qs e n u d ei p o cer a l e d sac el elp mexe rap tseC .elliat e mm ed secneuqs xued tneuqilppas semhtirogla sniatreC ...res -opmi iul tiarehcrehc nouq ellec te enretni noitasinagrol ertne srola tnessiarappa iuq tilib -itap mocnid seuqsir sed unet etpmoc ,pamitlum uo pam ep yt ed ruenetnoc nu enneitrappa elleuq elbannosiar erug tsen li ,elle mro f noitcidretnid sap etsixen liuq neiB .selbai fidom sulp tnos nen stne ml sel euqsiup ,tesitlum te tes ep yt ed ruenetnoc nu enneitrappa elleuq elbissop sulp tsen li ,ecneuqs al ed stneml sel ei fido m emhtiroglal is ,ehcnaver nE .seriap sed tnos stneml sruel euq tiaf el rap ng tnemelarng ares no ,pamitlum uo pam sep yt sed sac el snad ,tnadnepeC .enretni erdro ruel ed unet etp moc ,snes nu neib a ecneuqs ed noiton al ,el-snoleppar ,sleuqsel ruop s fitaicossa sruenetnoc sel sirpmoc y ,ep yt leuq etropmin ed ruenetnoc nu rinetrappa tuep erinred ettec ,ecneuqs ettec ed stne ml sel sap ei fido m en e mhtiroglal euq tnaT . n o i ta li p m o c e d ruerred eniep suos ,ep yt e mm ud ert tne mellerutan tnorved selleuqsel ,nif te tubd sruelav xued sel tnemugra ne tnemelpmis areuqinummoc iul no ,sac ec snad ; )nif ,tubd[ emro f al ed ruetartid ellavretni nu rap eini fd ecneuqs enu tneuqilppas se mhtiroglad puocuaeB

.ecneuqs ettec rus essap elues enuuq eutce ffen li ,trap ertuad ,euq te etnadnopserroc ecneuqs al sap ei fido m en li ,trap enud ,euq tsec ,ertne ne ruetarti nu etpecca emhtirogla nu is ,elp mexe rap ; e mhtirogla nu rap udnetta ruetartid eirogtac al ed uv ua eriudd tuep nouq noita mro fnil ed soporp tceridni trtni nu tnetnesrp sli ,alec ed srohed nE .5.1 ehpargarap ua snordneiver y suon ; tolf ed ruetarti tid ruetartid reilucitrap ruetatpada nu leppa tnasia f ne ,tol f nu ruetarti nu reicossa ruop ssilitu tnemmeuqr f tnores eitros ne te ertne ne sruetarti se L
itrateur en entre itrateur en sortie |___________________________| | itrateur unidirectionnel | itrateur bidirectionnel | itrateur accs direct

: etnedcrp eirog -tac al ed stirporp sel snio m ua edssop eirogtac etuot elleuqal snad eihcrarih enu noles regnar sel ed tnette mrep sruetartid seirogtac qnic sed stirporp sel euq rertno m tuep nO
1.2.3 Hirarchie des catgories ditrateurs

1.3 Algorithmes et squences


1 - Notions gnrales

595

.t n e d c r p t n e m l l e d e ti us a l n oi tr es n i e l l e v u o n e n u a r e u q o v o r p . . . = s n i * n oi t a t c e f f a e ll e v u o n e n u d ei v i us , s n i e d n o i t a t n e m r c n i et u o t ,s ul p e D . t i n o it is o p n e t n e m l l e v u o n n u ar er s ni . . . = s n i * e u q e l l e t n o i t c u r t s n i e n u u q are f ,ruetartid elaitini ruelav enud ecalp te ueil ne ,sni ed noitasilitul ,snoitidnoc sec snaD
ins = inserter(c, it) ; /* valeur initiale dun itrateur dinsertion */ /* permettant dinsrer partir de la */ /* position it dans le conteneur c */

: r ue ne t n oc ec r us r ue tar t i d erilucitrap ruelav enu tse ti te ruenetnoc nu tse c euq esoppus no leuqel snad elpmexe nu iciov ne ; retresni snoitcno f ed nortap ud tres es no ,ruetarti let nu ruelav enu retce ffa ruoP : elp mexe raP .ruenetnoc ed ep yt nu rap rtmarap te rotareti_tresni m mon sessalc ed nortap n u d t i g as li ; n o itr es ni d r u e t ar t i n u e m m o n n o u q e c l e p p a t i a f n o , er i a f e c r u o P . n o it is o p ettec ed ritrap snoitresnid noisseccus enu ne ennod noitisop enud ritrap eipoc ed snoit -arpod noisseccus enu remro fsnart ed tnatte mrep reilucitrap e msinacm nu etsixe li ,tia f nE .r ue n et n o c u d e nr et -ni erdrol te sopmi leitneuqs erdrol ertne tiaretlusr iuq tilibitapmocnil ed unet etpmoc ,pamitlum uo pam ep yt ed fitaicossa ruenetnoc nud rueirtnil eria f es sap tiod en eipoc al ; te si tlum u o tes ep yt ed sruenetnoc sed ruop sac el sap tsen iuq ec ,esirotua ert tiod noitacifidom ruel ; retsixe jd tneviod eipoc al seriassecn stne mecalpme sel : setniartnoc ed erbmon niatrec nu tne mellerutan tnesop mi snoitarpo sellet eD
copy (v.begin(), v.end(), l.begin()); /* recopie lintervalle [v.begin(), v.end() ) */ /* partir de la position l.begin() */ insert_iterator <list<int> > ins ; /* ins est un itrateur dinsertion */ /* dans un conteneur de type list<int> */

: ypoc ed sac el elpmexe rap tsec ; ecneuqs enud stneml sed sruelav sel rei fidom ruop suvrp tnos semhtiroglad puocuaeB

.riap ep yt ed erutcurts enud nies ua sepuorger tnores ic-sellec ,sac ec snad ; sruetarti xued ed emro f suos ellav -retni nud seti mil sel ,ruoter ed ruelav e mmoc ,tnessinruo f semhtirogla serar seuqleuq ,nifnE ...ruetniop nu tios iuq ruetarti nu emhtirogla nu rinruo f ed tidretnin neir ,sruelliad ; euqissalc uaelbat nud tnemedrobd ed sac ne ertl tiavuop li em moc ni mretdni tse em margorp ud tne metrop moc el ,sac ec snaD .etitep port tios elbic ecneuqs al euq euqsir el tnemetse finam etnesrp redcorp ed noa f ettec euq neib areton nO . ec n euq - s e d n o c e s al e d t u b d e l t n a n gis d r u e t ar t i n u d r u e l a v a l t i nr u o f t n e m u gr a e m is i ort n u
596
Les algorithmes standard CHAPITRE 27

1.4 Itrateur dinsertion

1 - Notions gnrales

597

: e m m ar g or p u d e g at n al p n u r e n e m a n ei b s r t t u e p i u q d c or p e d er n e g ec snolliesnocd suon ,euqitarp ne ; lam tialuord es elleuq rertnom ruop titep port ruenetnoc n u sn a d e ll eu su eip oc en u t ne t a no ,t n av arap ua ; n o itre s ni e n u n e st n at si xe s t ne m l s ed snad eipoc enu re mro fsnart ruop e msinacm let nu tnasilitu e mmargorp ed elp mexe nu icioV .)noitisop ,ruelav(tresni erb me m noitcno f al ed resopsid tiod ruenetnoc el ; ruenetnoc el snad noitisop ed ritrap noitresni enu ruop : )noitisop ,ruenetnoc( retresni ; kcab_hsup erb me m noitcno f al ed res -opsid tiod ruenetnoc el ; ruenetnoc ud ni f ne noitresni enu ruop : )ruenetnoc( retresni_kcab ; tnorf_hsup erbmem noitcno f al ed resop -sid tiod ruenetnoc el ; ruenetnoc ud tubd ne noitresni enu ruop : )ruenetnoc( retresni_tnorf : riovas ,noitresnid ruetarti n u d e l ai ti n i r u e l a v e n u r i ni f d e d t n at t e mr e p s n o it c n o f s i or t et si x e li , el ar n g er i n a m e n u D
#include <iostream> #include <list> #include <algorithm> using namespace std ; main() { void affiche (list<char>) ; char t[] = {"essai insert_iterator"} ; list<char> l1(t, t+sizeof(t)-1) ; list<char> l2 (4, x) ; list<char> l3 ; cout << "l1 initiale : " ; affiche(l1) ; cout << "l2 initiale : " ; affiche(l2) ; /* copie avec liste l2 de taille insuffisante */ /* deconseille en pratique */ copy (l1.begin(), l1.end(), l2.begin()) ; cout << "l2 apres copie usuelle : " ; affiche(l2) ; /* insertion dans liste non vide */ /* on pourrait utiliser aussi front_inserter(l2) */ copy (l1.begin(), l1.end(), inserter(l2, l2.begin())) ; cout << "l2 apres copie inser : " ; affiche(l2) ; /* insertion dans liste vide ; on pourrait utiliser aussi */ /* front_inserter(l3) ou back_inserter(l3) */ copy (l1.begin(), l1.end(), inserter(l3, l3.begin())) ; cout << "l3 apres copie inser : " ; affiche(l3) ; } void affiche (list<char> l) { void af_car (char) ; for_each(l.begin(), l.end(), af_car); /* appelle af_car pour chaque element */ cout << "\n" ; } void af_car (char c) { cout << c << " " ; }

.ypoc euq slet ,dradnats semhtirogla sniat -rec ceva ruetarti let nu resilitud artte mrep elleuqsiup esueicrp tnadnepec tse ecnetsixe noS .uaevin ec noitaci fingis snas rac ,te ffe snas tse noitarpo ellet enu ,tnadnepec ; ++raclf tnavirc ne raclf ruetartil retnemrcnid elbissop tnemeuqiroht tse liuq areton nO . t u o c t o l f e l r u s x er t c ar a c el e i o v n e : euq ellet noitcurtsni enu ,snoitidnoc sec snaD : euq isnia tseC .tnatsixe tol f nu tne mugra ne tnavecer ruetcurtsnoc nud esopsid essalc etteC : elpmexe rap ; snrecnoc stneml sed ep yt el rap rtmarap ,rotareti_maertso m mon ,sessalc ed nortap nu etsixe li ,eria f ec ruoP .tnemmedcrp seini fd t tno selleuq sellet ertned ruetarti nud stirporp sed euq tnasopsid en ecneuqs ellet enu rus ruetar -ti nu rinifd ed elbissop tse li ,tnemevitce ffE .ecneuqs enu truocrap nouq rerdisnoc tuep no ,ep yt emm ed snoitamro fnid etius enu ,dradnats ertnel rus ,elpmexe rap ,til nouqsro L
ostream_iterator<char> /* type itrateur sur un flot dentre de caractres */ ostream_iterator<char> flcar(cout) ; /* flcar est un itrateur sur un flot de */ /* caractres connect cout */ *flcar = x ; l1 l2 l2 l2 l3

: i s n i a r es o p m o c d es t u e p

: em margorp tnedcrp ud noitcurt -sni elpmis al ,rotareti_tresni essalc enud ecnetsixel ecnediv ne ertte m tneit nol iS

noitresnid ruetarti nud noitasilitud elpmexE


i n s e r t _ i t e r a t o r r r a t i n s e r t _ i t e r a t o r

598

1.5 Itrateur de flot


Les algorithmes standard CHAPITRE 27
insert_iterator<list<char> > ins = inserter(l2, l2.begin()) ; copy (l1.begin(), l1.end(), ins ) ; copy (l1.begin(), l1.end(), inserter(l2, l2.begin())) ;

1.5.1 Itrateur de flot de sortie

e uqrameR

initiale : e initiale : x apres copie usuelle : r apres copie inser : e apres copie inser : e

s x r s s

s x a s s

a i x t a i a i

i n s e r t _ i t e r a t o r

: ceva ,elp mexe rap ; tne mugra snas ruetcurtsnoc nud noitasilitul ,riovas ,ni f al tnatnesrper ne ruetarti nu eriurtsnoc ed tnatte mrep noitnevnoc enu etsixe li ,eriaf e c r u o P . ni f a l r e t c et d n e d t il i bi ss o p al t n a d n e p e c t n et iss e c n e r t n e d t o l f e d sr u et ar ti s e L .trevuo tnemelbanevnoc sop -pus ,hcif tol f ua tcennoc ,sreitned ertned tol f nu rus ,tnilf mmon ,ruetarti nu tini fd no : ce va , er i na m e m m a l e D . n i c t c e n n o c ,sr e i t n e d e rt n e d t ol f n u r us , t n i l f m m o n r u e t a r t i n u t i n i f d n o : c e v a , e l p m e x e r a P . n i s i o v s r t d c or p n u t n a v i u s , e rt n e d t o l f ed sruetarti sed rini fd tuep no ,eitros ed tol f ed sruetarti sed rini fd tuep nouq em m eD .e mlborp nucua sulp tiaresop en euqnocleuq erianib reihci f nu noitacilppal ,ehcnaver nE .tnadnopserroc etxet reihci f el snad uo egahc -if fal noitaraps ruel ed emlborp el tiaresop rahc euq ertua ep yt ed snoita mro fnid n oi t a si li t ul ,s n oi ti d n o c s e c s n a d ; dr a d n a ts ei tr o s a l t i a u q il p p a s e l p m e x e ert o n , i c I
1.5.2 Itrateur de flot dentre
istream_iterator<int> flint(cin) ; ifstream fich("essai", ios::in) ; istream_iterator<int> flint(fich) ;

istream_iterator<int> fin ; /* fin est un itrateur reprsentant une fin */ /* de fichier sur un itrateur de flot dentiers */

e uqrameR

eitros ed tolf ed ruetarti nud noitasilitud elpmexE


x-:essai iterateur de flot #include <iostream> #include <list> using namespace std ; main() { char t[] = {"essai iterateur de flot"} ; list<char> l(t, t+sizeof(t)-1) ; ostream_iterator<char> flcar(cout) ; *flcar = x ; *flcar = - ; flcar++ ; flcar++ ; /* pour montrer que lincrementation est inoperante ici */ *flcar = : ; copy (l.begin(), l.end(), flcar) ; }

: erid ed snonev suon euq ec tna musr elpmexe nu icioV


599

1 - Notions gnrales

: noitresnid ruetarti nud siaib el rap ,snoitresni sed euq isnia ,selleusu seipoc sed resilar ruop ypoc tnasilitu em margorp ed elpmexe nu icioV .slennoitceridib ert tneviod stnadnopserroc sruetarti sel ,erdnetta ys tuep no em moc ,sac ec snaD .tneml reinred el rap tnane mmoc ne erid--tsec ,ypoc ed esrevni erdrol snad eipoc al edcorp iuq dra wkcab_ypoc emhtirogla nu tnemelag etsixe lI : el p m e x e r a p ,t i ar i dr e t n i n neir ,ehcnaver nE .reipoc ellavretnil sap enneitrappan eipoc eri merp al ed noitisop al euq tse sruetarti sed sruelav xua esopmi tios iuq )euqigol( etniartnoc elues a L .)(nigeb.v ne )(nigeb.l reipocer rap neib ecne mmoc nouq riovas ,sop mi tse eipoc al ed snes e L : sreitned ruetcev nu v te sreitned etsil enu tse l is ,elpmexe raP .semm sel tneios stneml sed sep yt sel euq uep ruop ,ertua enu snad ecneuqs enu reipocer tuep no ,sesirper srueisulp uv jd al no e mmoC
copy (l.begin(), l.end(), v.begin()) ; /* recopie les lments de la */ /* liste l dans le vecteur v, partir de son dbut */ copy (v.begin()+1, v.begin()+10, v.begin()); /* recopie v[1] dans v[0] */ /* v[2] dans v[1]... v[9] dans v[8] */

.stne ml sruel ed riap ep yt ed erutan al ed etpmoc rinet ed te noitresnid ruetarti nu resilitud snio m ,s fitaicossa sruenetnoc xua stpada sap tnos en sli ,em m erutan ruel rap eD .ecalpmer cnod tse ruelav al tnod ,ecneuqs enud tnatsixe stne ml sed sruelav sed rennod ed tnette mrep semhtirogla sec suoT

: ei p o c a l e d t a tl us r el er i u d ort n i y r u o p n oi tr e s n i d ruetarti nu snosilitu suon te ediv etsil enu snorc suon ,ici ; etsil enu snad reihci f nud snoit -amro fni sel reipocer ruop ertned tol f ed ruetarti nu resilitu tne mmoc ,elpmexe rap ,icioV
600
Les algorithmes standard CHAPITRE 27

2.1 Copie dune squence dans une autre

2 Algorithmes dinitialisation de squences existantes

#include <iostream> #include <vector> #include <list> #include <algorithm> using namespace std ; list<int> l ; ifstream fich("essai", ios::in) ; istream_iterator<int, ptrdiff_t> flint(fich), fin ; copy (flint, fin, inserter(l, l.begin())) ;

2 - Algorithmes dinitialisation de squences existantes

601

main() { int t[5] = { 1, 2, 3, 4, 5 } ; vector<int> v(t, t+5) ; /* v contient : 1, 2, 3, 4, 5 */ list<int> l(8, 0) ; /* liste de 8 elements egaux a 0*/ list<int> l2(3, 0) ; /* liste de 3 elements egaux a 0 */ void affiche(vector<int>) ; void affiche(list<int>) ; cout << "liste initiale : " ; affiche(l) ; copy (v.begin(), v.end(), l.begin()) ; cout << "liste apres copie 1 : " ; affiche(l) ; l = l2 ; /* l contient maintenant 3 elements gaux 0 */ copy (v.begin(), v.end(), l.begin()) ; /* sequence trop courte : deconseille */ cout << "liste apres copie 2 : " ; affiche(l) ; l.erase(l.begin(), l.end()) ; /* l est maintenant vide */ /* on y insere les elem de v */ copy (v.begin(), v.end(), inserter(l, l.begin())) ; cout << "liste apres copie 3 : " ; affiche(l) ; } void affiche(list<int> l) { list<int>::iterator il ; for (il=l.begin() ; il!=l.end() ; il++) cout << *il << " " ; cout << "\n" ; } liste liste liste liste initiale : 0 apres copie 1 : 1 apres copie 2 : 5 apres copie 3 : 1 0 2 2 2 0 0 0 0 0 0 3 4 5 0 0 0 3 3 4 5

2.2 Gnration de valeurs par une fonction


: leppal ,elp mexe raP .tne mugra nucua tioer en noitcnof ellet enU .ellavretni nud tneml euqahc reubirtta ruelav al renimretd ruop arelleppa liuq )erianidro noitcno f enud rigas cnod tuep li( noitcno f tejbo nu ,tne mugra ne ,tinruo f iul nO .ruetarng e mhtirogla nu tnevuos emmon nouq ec riovas ,te ffe tec larng zessa lituo nu er ffo dradnats euqhtoilbib a L .luclac nud tnatlusr sruelav sed rap ruenetnoc nu resilaitinid nioseb tia nouq tneuqr f tse lI

generate (v.begin(), v.end(), suite) ;

: erianidro noitcno f enu leppa tnasia f elpmexe rei merp nu icioV .))(dne.v ,)(nigeb.v[ ellavretnil rap ein -ifd ecneuqs al ed stneml sed nucahc ruelav enu rennod ruop etius noitcno f al aresilitu

#include <iostream> #include <vector> #include <algorithm>

noitresni ceva seipoc ed te selleusu seipoc ed elpmexE

602

Les algorithmes standard CHAPITRE 27

using namespace std ; main() { int n = 10 ; vector<int> v(n, 0) ; /* vecteur de n elements initialises a 0 */ int suite() ; /* fonction utilisee pour la generation dentiers */ void affiche(vector<int>) ; cout << "vecteur initial : " ; affiche(v) ; generate (v.begin(), v.end(), suite) ; cout << "vecteur genere : " ; affiche(v) ; } int suite() { static int n = 0 ; return n++ ; } void affiche (vector<int> v) { unsigned int i ; for (i=0 ; i<v.size() ; i++) cout << v[i] << " " ; cout << "\n" ; } vecteur initial : 0 0 0 0 0 0 0 0 0 0 vecteur genere : 0 1 2 3 4 5 6 7 8 9

: t n a v i us el p m e x e l ert n o m e l e m m o c etnassertni ervas noitcnof essalc ed noiton al euq tne msicrp l tseC .tne mugra ne risiohc al ed elbissop sap tsen li ,reilucitrap ne ; e m m-elle noitcno f al snad tnaxi f al neuq t n e m er t u a , s er b m o n e d et i us a l el a it i n i r u e l a v e n u r es o p mi d el i c i f fi d ts e l i u q et at s n o c n O
#include <iostream> #include <vector> #include <algorithm> using namespace std ; class sequence /* classe fonction utilisee pour la generation dentiers */ { public : sequence (int i) { n = i ;} /* constructeur */ int operator() () { return n++ ; } /* ne pas oublier () */ private : int n ; /* valeur courante generee */ } ; main() { int n = 10 ; vector<int> v(n, 0) ; /* vecteur de n elements initialises a 0 */ void affiche(vector<int>) ;

erianidro noitcnof enu rap sruelav ed noitarnG

.t n e m l ti t e p sulp el uo dnarg sulp el revuort ed tnattemrep erdrod noitaler enu rus sdno f se mhtirogla sel ; eri a n u t a ci d r p n u r us u o t il a g e n u r us s d n o f s e m ht ir o g l a s e l : eugnitsid nO .tnelliavart sli elleuqal rus ecneuqs al sap tnei fido m en semhtirogla seC

)ruelav ,sioFbN ,noitisop( lli f )r u e l a v , ni f ,t u b d( l li f : s t n e m l d n n o d e r b m o n n u u o e c n e u q s e n u d s t n e m l s e l s u o t e n n o d r u e l a v enu retce f fad temrep llif e mhtiro glal ,trap ert uaD .tnem ugra ne seu vrp sr uela v ed e r b m o n n u e r n g i u q , e t a r e n e g e l b ar a p m o c , n _ e t a r e n e g , e m h t ir o g l a er t u a n u e t s i x e l I 2 . e c ne r f f i d e t t e c e d e tp m o c r i n e t s a p a n e t a r e n e g e m h t ir o g l a l , )( r u e t ar p o l i n i f d r u s t n e m e l b a n e v n o c a r e i n r e d e c e m m o c , s i a M . e c n e u q e s e p y t e d t e j b o n u e c n er f r a l t s e ) 0 ( e c n e u q es , d n o c e s e l s n a d e u q s i d n a t , n o i t c n o f e n u e c n er f r a l ts e e t i u s , s a c r e i m er p e l s n a d , e u q e t a ts n o c n o : dnoces ud ertual ,elpmexe reimerp ud nul ,stnavius sleppa xued sel erapmoc nol iS 1
generate (v.begin(), v.end(), suite) ; generate (v.begin(), v.end(), sequence(0)) ;

noitcnof essalc enu rap sruelav ed noitarnG


vecteur initial : 0 0 0 0 0 0 0 0 0 0 vecteur genere 1 : 0 1 2 3 4 5 6 7 8 9 vecteur genere 2 : 4 5 6 7 8 9 10 11 12 13

3 Algorithmes de recherche
se uqrameR
void affiche (vector<int> v) { unsigned int i ; for (i=0 ; i<v.size() ; i++) cout << v[i] << " " ; cout << "\n" ; } } cout << "vecteur initial : " generate (v.begin(), v.end(), cout << "vecteur genere 1 : " generate (v.begin(), v.end(), cout << "vecteur genere 2 : " ; affiche(v) sequence(0)) ; affiche(v) sequence(4)) ; affiche(v) ; ; ; ; ;

3 - Algorithmes de recherche

603

: )sr u o j u o t t n e tsi x e s e h cr e h c er sr u e l a v s e l e u q s n os o p p u s s u o n , n o it a c i f -ilp mis ed icuos rap( stilibissop sec ed trapulp al tnartsulli em margorp ed elp mexe nu icioV .tnedcrp nolbuod el evuort es o tnemecalpmel ed led -ua ,ehcrehcer al recnem mocer tnemelpmis tios ,sevuort sruelav sed enul remirppus tios tuep no ,snolbuod sertua sel rehcrehc ruoP .euqilpud ruelav al sap esopmin nol o eruse m al snad ,n_hcraes ed reilucitrap sac nu sap tsen ec ,noitnettA .)nif ,tubd( dnif_tnecajda rap ,etius ed sio f xued tnassiarappa sruelav sel erid--tsec , snolbuod sel rehcrehcer tuep nO .non uo ini fdrus ,== ruetarpol rus esab es no ,erocne L .ruelav emm enu sio FbN ed etius enu rehcrehcer ed temrep )ruelav ,sio FbN ,nif ,tubd( n_hcraes ,e m m eD .)2_nif ,2_tubd ,1_nif ,1_tubd( hcraes rap )2_nif ,2_tubd[ ecneuqs ertua enud etlp moc noitirappa erimerp al ,)1_nif ,1_tubd[ ecneuqs enu snad ,rehcrehcer tuep nO .tne mugra ne inruo f erianu tacidrp ua tnasia fsitas ruelav erimerp al ed ehcrehcer al esirotua )tacidrp ,nif ,tubd( fi_dnif e mhtiroglaL .srueisulp i mrap ruelav enu rehcrehcer ed temrep fo_tsrif_dnif euq sidnat ,ennod ruelav enu rehcrehcer ed te mrep dnif e mhtiroglaL .ituoba a ehcrehcer al is riovas ed ne yom lues el eutitsnoc iuq ,ruoter ed ruelav al e d ts e t e l s n a d s e u qr a m er s e c e d e t p m o c r i n e t ar d u a f lI . e ni m a x e e c n e u q s a l e d l e d - u a e u tis r u e l a v e n u r u s r u e t ni o p n u r i n et b o t u e p n o ,sr u e t ni o p s e d t n os s si l it u sr u e t ar t i s e l o s a c el s n a D . n oi ts e u q n e e h cr e h c er a l c e v a ri o v n eir t n a y a n t n e m l n u r us e d il a v r u e t - ar ti n u r i n e t b o t u e p n o , n o ni S . n i f as u qs uj d n et s t e r u e n e t n o c n u t n ei tr a p p a e nr e c n o c ecneuqs al is euq )(dne elag tsen ruelav ettec ,sac reinred ec snad ; nonis ,ecneuqs al ed ni f al rus ruetartil te ,etsixe lis ,hcrehcer tne mll rus ruetarti nu suot tnessinruo f slI . eri a n u t a c i d r p n u d e mr o f s u os e i nr u o f n oi t i d n o c e n u r a p ti os ; n o n u o i n i f dru s ti os l iuq , == r u et arp ol rap etiudni tilagd noitaler al rus ednof es nouq tiaf ne ei fingis alec ; tne meticilpxe tios :sesopmi tnos iuq sruelav e d s eir s e d u o sr u e la v e d e c nerr uc c o er i m er p a l r e h cre h cer e d t n et te mre p s e m h tir o gl a s e C

604

3.1 Algorithmes fonds sur une galit ou un prdicat unaire

Les algorithmes standard CHAPITRE 27

#include <iostream> #include <vector> #include <algorithm> using namespace std ; main() { char *ch1 = "anticonstitutionnellement" ; char *ch2 = "uoie" ; char *ch3 = "tion" ; vector<char> v1 (ch1, ch1+strlen(ch1)) ; vector<char> v2 (ch2, ch2+strlen(ch2)) ; vector<char>::iterator iv ; iv = find_first_of (v1.begin(), v1.end(), cout << "\npremier de uoie en : " ; for ( iv = find_first_of (v1.begin(), v1.end(), cout << "\npremier de uo en : " ; for (

v2.begin(), v2.end()) ; ; iv!=v1.end() ; iv++) cout << *iv ; v2.begin(), v2.begin()+2) ; ; iv!=v1.end() ; iv++) cout << *iv ;

3 - Algorithmes de recherche

605

v2.assign (ch3, ch3+strlen(ch3)) ; iv = search (v1.begin(), v1.end(), v2.begin(), v2.end()) cout << "\ntion en : " ; for ( ; iv!=v1.end() iv = search_n(v1.begin(), v1.end(), 2, l ) ; cout << "\nl 2 fois en : " ; for ( ; iv!=v1.end() iv = adjacent_find(v1.begin(), v1.end()) ; cout << "\npremier doublon en : " ; for ( ; iv!=v1.end() } premier de uoie en premier de uo en tion en l 2 fois en premier doublon en : : : : : iconstitutionnellement onstitutionnellement tionnellement llement nnellement

; ; iv++) cout << *iv ; ; iv++) cout << *iv ; ; iv++) cout << *iv ;

3.2 Algorithmes de recherche de maximum ou de minimum


: )sruojuot tnetsixe sehcrehcer sruelav sel euq snosoppus suon ,noitaci filpmis ed icuos rap( leusu uaelbat nu semhtirogla sec snouqilppa suon leuqel snad elpmexe nu icioV . l a i c ur c s ni o m sr o l a ts e r u ot er e d r u e l a v al e d n e m a x el euq etros ed ,tacidrp erporp nos tisiohc nouqsrol uo ediv ecneuqs enu cevauq ici eriudorp es tuep en noitautis erinred ettec siaM .nucua etsixe nen lis ,ecneuqs al ed ni f al rus ruetar -ti nu tios ,srueisulp etsixe ne lis xue ertned reimerp el rus uo tnadnopserroc tne mll rus ruetarti nu tios ruoter ne tnessinruo f sli ,stnedcrp semhtirogla sel em moC .erianib tacidrp n u d e mr o f s u os , n o i t a l er er p or p as r es o p m i d el b iss o p t n e m e l a g t s e l i s i a m , < r u et ar p ol rap etiudni noitaler al rus tua fd rap tneiuppas slI .ecneuqs enud tneml titep sulp el uo dnarg sulp el renimretd ed tnettemrep tnemele_nim te tnemele_xam se mhtirogla xued se L

#include <iostream> #include <algorithm> #include <functional> // pour greater<int> using namespace std ; main() { int t[] = {5, 4, 1, 8, 3, 9, 2, 9, 1, 8} ; int * ad ; ad = max_element(t, t+sizeof(t)/sizeof(t[0])) ; cout << "plus grand elem de t en position " << ad-t << " valeur " << *ad << "\n" ; ad = min_element(t, t+sizeof(t)/sizeof(t[0])) ; cout << "plus petit elem de t en position " << ad-t << " valeur " << *ad << "\n" ; ad = max_element(t, t+sizeof(t)/sizeof(t[0]), greater<int>()) ; cout << "plus grand elem avec greater<int> en position " << ad-t << " valeur " << *ad << "\n" ; }

ehcrehcer ed semhtirogla sed noitasilitud elpmexE

: el p m e x e r a p ; n o it i d n o c enu tnasia fsitas ruelav enud secnerrucco sel setuot recalpmer tnemelag tuep nO : elp mexe rap ; == ruetarpol rus tnadno f es ne ,ruelav ertua enu rap ennod ruelav enud secnerrucco sel setuot recalp mer tuep nO
replace (l.begin(), l.end(), 0, -1) ; /* remplace toutes les occurrences */ /* de 0 par -1 */

. s e i f i d o m s a p sr o l a t n at n s er i nr e d s e c , e ll i a t e m m e d s e c n e u q s x u e d u o e c n e u q s e n u n oi t -amro fsnart ed noitcno f enu tnauqilppa ne ecneuqs enu esilaitini ,erdnetne ressial tiarruop mon nos euq ec tnemeriartnoc ,iuq mrofsnart mmon e mhtirogla nu etsixe li ,sruellia raP .s t ne m l sr ue l ed riap ep yt ed erutan al ed etp moc rinet ed te noitresnid ruetarti nu resilitud ,siofetuot noitidnoc ,s fitaicossa sruenetnoc sed reuqilppas ,xue tnauq ,tnevuep ypoc_xxxx emro f al ed se mhtirogla seC .ypoc ceva e mmoc ,retsixe srola tneviod stneml sel tnod ecneuqs ert u a e n u s n a d u n e t b o t a t l u s r el ei p o c el l e u q t e e n i gir o d e c n e u q s al s u l p e i fi d o m e n elleuq etnatrop mi ecner ffid ettec ceva ,xxxx euq tnemetiart emm el esilar ypoc_xxxx nois -r e v al ,s ac e c s na d ; y p o c _ r a p e x i f f us n o isre v e n u d t nes o ps i d s e m h tir o gl a se c e d p u oc ua e B . n oi ti tr a p ; sr u e l a v e d n oi t a t u mr e p ; sruelav ed tne mecalp mer : semhtiroglad seirogtac siort reugnitsid tuep nO .euqsnirtni noa f ed sopmi tse erdrol sleuqsel ruop ,sfitaicossa sruenetnoc xua selbacilppa sap tnos en slI .stne mld erbmon el rei fido m ne snas ,erdro ruel uo ecneuqs enud sruelav sel tnei fidom iuq se mhtirogla sed tigas lI

tnemele_nim ed te tnemele_xam ed noitasilitud elpmexE


plus grand elem de t en position 5 valeur 9 plus petit elem de t en position 2 valeur 1 plus grand elem avec greater<int> en position 2 valeur 1

606

4.1 Remplacement de valeurs

4 Algorithmes de transformation dune squence

Les algorithmes standard CHAPITRE 27

replace_if (l.begin(), l.end(), impair, 0) ; /* remplace par 0 toutes les */ /* valeurs satisfaisant au prdicat */ /* unaire impair quil faut fournir */

148 418 184 814 481 841 : selbissop snoitatumrep sel setuot ed ennodro etsil al iciov ,< erdrod noitaler al te 8 ,4 ,1 sruelav siort sel erdisnoc nol is ,elpmexe raP .ecneuqs ettec ed sruelav sed selbissop snoitatumrep setnerf fid sel rennodrod elbissop tse li ,R erdrod noitaler enu rap ennodro tse ecneuqs enuuq srol sD etator ed noitasilitud elpmexE
vecteur initial : 1 2 3 4 5 6 7 8 vecteur decale de 3 : 4 5 6 7 8 1 2 3

: elp me xe nu iciov nE .noitisop erimerp ne rinev tiod tne ml leuq tnauqidni ne siam ,erbmon nu rap sap non ,riovas ,noitatu mrep al ed ruelp mal esicrp no tnod erina m al ed unet etpmoc ,esrevni erialucric noitatu mrep ed stilibissop sed euq esopsid en nouq areton nO .ecneuqs enud sruelav sed erialucric noitatu mrep enu reutcef fed te mrep etator emhtiroglaL
4.2.1 Rotation

4.2 Permutations de valeurs

4.2.2 Gnration de permutations


#include <iostream> #include <vector> #include <algorithm> using namespace std ; main() { void affiche (vector<int>) ; int t[] = {1, 2, 3, 4, 5, 6, 7, 8} ; int decal = 3 ; vector<int> v(t, t+8) ; cout << "vecteur initial : " ; affiche(v) ; rotate (v.begin(), v.begin()+decal, v.end()) ; cout << "vecteur decale de 3 : " ; affiche(v) ; } void affiche (vector<int> v) { unsigned int i ; for (i=0 ; i<v.size() ; i++) cout << v[i] << " " ; cout << "\n" ; }

4 - Algorithmes de transformation dune squence

607

: )s n o i t a t u mr e p s e d e tsi l al s n a d e g a l c u o b n u ut c e f f e a nol is riovas ed te mrep semhtirogla sed eslaf uo eurt ruoter ed ruelav al( elp mexe nu icioV .se mhtirogla sec ed ypoc_ setnairav ed sap etsixen li ,tne melleutcA .erianib tacidrp nud emro f suos esop mi noitaler enu tios ,< ruetarpol ,tua fd rap ,tios resilitu tuep nO .etned -crp noitatu mrep al rap uo etnavius noitatumrep al rap tnemevitcepser ennod ecneuqs enu recalp mer ed tnette mrep noitatumrep_verp te noitatumrep_txen se mhtirogla se L .eri merp al tse erinred al tnadcrp noitatumrep al euq te ,eri m -erp al tse erinred al tnavius noitatumrep al euq erdisnoc no ,emlborp tuot retiv ruoP .1 ,8 ,4 tiares etnavius noitatumrep al euq sidnat 4 ,8 ,1 ecneuqs al tiares 8 ,1 ,4 ecneuqs al ed etnedcrp noitatu mrep al ,sussed-ic elpmexel snaD .sennod sruelav ed ecneuqs enud etnedcrp uo etnavius noitatu mrep al ed relrap ed elbissop tse li ,snoitidnoc sec snaD
608
Les algorithmes standard CHAPITRE 27

vecteur initial permutation 1 permutation 1 permutation 1 permutation 0 permutation 1 permutation 1 permutation 1 permutation 1 permutation 1

#include <iostream> #include <vector> #include <algorithm> using namespace std ; main() { void affiche (vector<int>) ; int t[] = {2, 1, 3} ; int i ; vector<int> v(t, t+3) ; cout << "vecteur initial : " ; affiche(v) ; for (i=0 ; i<=10 ; i++) { bool res = next_permutation (v.begin(), v.end()) ; cout << "permutation " << res << " : " ; affiche(v) ; } } void affiche (vector<int> v) { unsigned int i ; for (i=0 ; i<v.size() ; i++) cout << v[i] << " " ; cout << "\n" ; }

: : : : : : : : : :

2 2 3 3 1 1 2 2 3 3

1 3 1 2 2 3 1 3 1 2

3 1 2 1 3 2 3 1 2 1

4 - Algorithmes de transformation dune squence

609

permutation 0 permutation 1

: 1 2 3 : 1 3 2

4.2.3 Permutations alatoires

: el p m e x e n u i c i o v n E . e c n e u q s enud sruelav sed eriotala noitatumrep enu reutce ffed temrep elffuhs_modnar emhtiroglaL
#include <iostream> #include <vector> #include <algorithm> using namespace std ; main() { void affiche (vector<int>) ; int t[] = {2, 1, 3} ; int i ; vector<int> v(t, t+3) ; cout << "vecteur initial : " ; affiche(v) ; for (i=0 ; i<=10 ; i++) { random_shuffle (v.begin(), v.end()) ; cout << "vecteur hasard : " ; affiche(v) ; } } void affiche (vector<int> v) { unsigned int i ; for (i=0 ; i<v.size() ; i++) cout << v[i] << " " ; cout << "\n" ; } vecteur vecteur vecteur vecteur vecteur vecteur vecteur vecteur vecteur vecteur vecteur vecteur initial hasard hasard hasard hasard hasard hasard hasard hasard hasard hasard hasard : : : : : : : : : : : : 2 3 2 1 1 3 3 3 3 2 2 2 1 2 3 2 3 1 2 1 2 3 3 3 3 1 1 3 2 2 1 2 1 1 1 1

noitatu mrep_verp ed te noitatu mrep_txen ed noitasilitud elpmexE e l f f u h s _ m o d n a r e d n oi t a si l i t u d e l p m e x E

.noitresnid ruetarti nu tnaruocer ne ,ruenetnoc nud sac el snad ,rinevrap y siofetuot tuep no ; ecneuqs enu snad tneml nu rersni egatnavad sap tuep en emhtirogla nU .1

.ruenetnoc nud ecneuqs enu eria ffa a nol o sac el snad ,evomer euq ellet erb me m noitcnof enu tnasilitu ne snrecnoc stne ml sed evitce ffe nois -serppus enu ,e mhtirogla let nu leppa riova srpa ,reutcef fed ehcpmen neir ,udnetne neiB .tubd ud seni mil t tno iuq sellec tneios ruenetnoc ed ni f ne tnassiarappa sruelav sel euq niatrec tuot ud sap tsen li ,etnetta etuot tnemeriartnoc ,trap ertuaD . sap etsixen noisserppus ed noiton al elleuqal ruop )leusu uaelbat nuuq ec-tiares en( ruenetnoc nuuq ertua erutcurts enu uqilppa ertd euqsir liuq nosiar elpmis te ennob al ruop ,ecneuqs enud stneml sed remirppus tuep en e mhtirogla nucuauq riov tuaf li ,t i a f n E . vr es n o c n o n t n e m l r e i m er p el r u s r u e t ar t i n u r u o t er n e r i nr u o f e d t e n oi t a n i m il d noitidnoc al rap snrecnoc non stne ml sel ecneuqs ed tubd ne repuorger ed tnetnetnoc es s li ; s tn a d nops erro c st n e m l se l sap t ne mirpp us e n sl i , t ne m es ue ir uc z ess a ,s ia M . er tir c niatrec nu tnadnopr stneml sel ecneuqs enud reni mild tnettemrep se mhtirogla seC
1

.tnemugra ne inruo f erianu tacidrp nud ritrap noititrap ellet enu reni mretd ed tnettemrep noititrap_elbats te noititrap semhtirogla se L .selbats tnos snoitatumrep seri merp xued sel selues ,elpmexe erton snaD .vresnoc tse tacidrp ua tnasia fsitas stneml sed fitaler erdrol is elbats tse eunetbo noititrap al euq tid nO /* 2 el ici arengisd ruetartil */ 8 4 2 11 7 1 3 /* 2 el ici arengisd ruetartil */ 4 8 2 7 11 3 1 /* 4 el ici arengisd ruetartil */ 8 2 4 7 11 3 1 : )t ne m l e m irt auq e l are n gis d r ue tar t il ,s ac s el s uo t sn a d( s elb iss op snoititrap sed iciov ,)nonis xua f te riapmi erbmon nu ruop iarv soppus( riapmi tacidrp el te 8 7 2 11 4 3 1 : e c n e u q s al c e v a , e l p m e x e r a P . n o i ti d n o c e ti d a l t n e i fir v t n a d -crp el stneml sel suot euq let tneml nu tnangisd ruetarti nu rap ini fd ecneuqs ettec ed tnemegnarrar nu ,nnod erianu tacidrp nu tnavius ecneuqs enud noititrap em mon nO

.s eri o t a l a serbmon ed ruetarng nos resopmid tnatte mrep elffuhs_modnar ed noisrev enu etsixe lI

610

5 Algorithmes dits de suppression


4.3 Partitions
e uqrameR
Les algorithmes standard CHAPITRE 27

: ) el b ats s a p ts e n li u q sr u el li a d tnemerialc euqra mer no tnod( fi_ypoc_evomer ceva ecneuqs enu snad snoitresni sed sirpmoc y ,seuqov stilibissop selapicnirp sel tnartnom em margorp ed elpmexe nu icioV .ecneuqs ellevuon enu rerc ed erttemrep tnevuep sli ,noitresnid ruetarti nu ceva tnemet - ni o j n o c s si li t U .s e n i m il n o n sr u e l a v s e l u es s el e c n e u q s ert u a e n u s n a d e g n ar i u q t e , e n i g -irod ecneuqs al sap ei fido m en iuq ypoc_ ceva noisrev enud tnesopsid semhtirogla seC .erdro niatrec nu tnavius ennodro tios ecneuqs al euq tnemellun esop min lI .nnod erianib tacidrp nu tnadnopr uo )== ed snes ua( selag sruelav ed eirs enud ruelav eri merp al euq revresnoc en ed temrep euqinu emhtiroglaL .seni mil non sruelav sed fitaler erdrol evresnoc liuq erid--tsec ,elbats tse e mhtirogla rei merp el lueS .nnod erianib tacidrp nu rus edno f es iuq ,fi_evomer noisrev enu etsixe lI .== ruetarpol rus tnasab es ne ,euqidni ruelav al tna ya stneml sel suot renimild te mrep )ruelav ,nif ,tubd( evomer emhtiroglaL
611

#include <iostream> #include <list> #include <algorithm> using namespace std ; main() { void affiche(list<int>) ; bool valeur_paire (int) ; int t[] = { 4, 3, 5, 4, 4, 4, 9, 4, 6, 6, 3, 3, 2 } ; list<int> l (t, t+sizeof(t)/sizeof(int)) ; list<int> l_bis=l ; list<int> l2 ; /* liste vide */ list<int>::iterator il ; cout << "liste initiale : " ; affiche(l) ;

l = l_bis ; il = remove_if(l.begin(), l.end(), valeur_paire) ; cout << "liste apres remove pairs : " ; affiche(l) ; cout << "elements places en fin : " ; for (; il!=l.end() ; il++) cout << *il << " " ; cout << "\n" ; l = l_bis ; il = unique (l.begin(), l.end()) ; cout << "liste apres unique : " ; affiche(l) ; cout << "elements places en fin : " ; for (; il!=l.end() ; il++) cout << *il << " " ; cout << "\n" ; il = remove(l.begin(), l.end(), 4) ; /* different de l.remove(4) */ cout << "liste apres remove(4) : " ; affiche(l) ; cout << "element places en fin : " ; for (; il!=l.end() ; il++) cout << *il << " " ; cout << "\n" ;

5 - Algorithmes dits de suppression

.noitseuq ne tne mll engisd ueilim te )nif ,ueilim ,tubd( tnemele_htn emro f al suos etnesrp es leppal ,erocne l ; ecneuqs al etuot irt tiava nol is tiarevuort ys iuq tnemll noitisop ettec snad recalp ed erid--tsec ,tneml emi-n el tnemelues renimretd ed elbissop tse li ,tnemele_htn ceva ,ni fnE .irt non tneml rei merp el tnangisd ueilim ruetartil rap eini fd tse irt ud edutilpmal te )nif ,ueilim ,tubd( tros_laitrap e mro f al suos etnesrp es leppal ,sac ec snaD .stne mld erbmon niatrec nuuq rennodron ed tnetnetnoc es iuq erid--tsec ,sleitrap sirt sed ,tros_laitrap ceva ,tne m -elag reutce ffe tuep nO .edipar sulp ,elbats non e mhtirogla nu uo tros_elbats elbats e mhtir -ogla nu ertne risiohc tuep no ,sac ec snaD .ecneuqs enud stelp moc sirt sed resilar tuep nO .)tros erb mem noitcno f as ed esopsid tsil ruenetnoc el siam( setsil sed selbacilppa sap tnos en sliuq etros ed ,tcerid s cc a sr u et ar ti se d tn et iss ec n se m ht ir og la se c e d trap ulp al , t ic ac i f fe d s n oi ts euq se t -nedivd ruoP .resop mi ruel tiarduov nouq iulec te enretni erdro ruel ertne srola tiartarappa i u q ti l f n o c u d u n et e t p m o c , f it ai c oss a r u e n et n o c n u r e u q il p p as s a p t n e v u e p e n s l I . n n o d erianib tacidrp nu rap tios ,< ruetarpol rap tios ,tcirts elbia f erdrod noitaler enu ini fd t a li selleuqsel ruop erid--tsec ,selbannodro secneuqs sed tneuqilppas se mhtirogla seC

noisserppus ed semhtirogla sed noitasilitud elpmexE


3 4 9 4 6 6 3 3 2 6 3 3 2 3

612

6 Algorithmes de tri
Les algorithmes standard CHAPITRE 27
liste initiale liste apres remove(4) element places en fin liste apres unique elements places en fin liste apres remove pairs elements places en fin liste avec remove_copy_if paires } void affiche(list<int> l) { list<int>::iterator il ; for (il=l.begin() ; il!=l.end() ; il++) cout << (*il) << " " ; cout << "\n" ; } bool valeur_paire (int n) { return !(n%2) ; } /* elimination de valeurs par copie dans liste vide l2 */ /* par iterateur dinsertion */ l = l_bis ; remove_copy_if(l.begin(), l.end(), front_inserter(l2), valeur_paire) ; cout << "liste avec remove_copy_if paires : " ; affiche(l2) ; : : : : : : : : 4 3 6 4 6 3 4 3 3 5 6 3 3 5 9 3 5 9 3 5 3 9 4 9 4 6 3 4 2 3 6 5 4 4 9 4 6 6 3 3 2 6 3 3 2 6 6 3 3 2 2 9 4 6 3 2 6 3 3 2

7 - Algorithmes de recherche et de fusion sur des squences ordonnes

613

7 Algorithmes de recherche et de fusion sur des squences ordonnes


.tcirts elbiaf erdrod noitaler enu rap sennodro sesoppus secneuqs sed tneuqilppas semhtirogla seC

: irt ed semhtirogla xuapicnirp sed noitasilitul tnartnom elpmexe nu icioV


#include <iostream> #include <vector> #include <algorithm> using namespace std ; main() { void affiche (vector<int>) ; bool comp (int, int) ; int t[] = {2, 1, 3, 9, 2, 7, 5, 8} ; vector<int> v(t, t+8), v_bis=v ; cout << "vecteur initial : " ; sort (v.begin(), v.end()) ; cout << "apres sort : " ; v = v_bis ; partial_sort (v.begin(), v.begin()+5, cout << "apres partial_sort (5) : " ; v = v_bis ; nth_element (v.begin(), v.begin()+ 5, cout << "apres nth_element 6 : " ; nth_element (v.begin(), v.begin()+ 2, cout << "apres nth_element 3 : " ; } void affiche (vector<int> v) { unsigned int i ; for (i=0 ; i<v.size() ; i++) cout << v[i] << " " ; cout << "\n" ; } vecteur initial apres sort apres partial_sort (5) apres nth_element 6 apres nth_element 3 : : : : : 2 1 1 2 2 1 2 2 1 1 3 2 2 3 2 9 3 3 5 3 2 5 5 2 5 7 7 9 7 7 5 8 7 8 8 affiche(v) ; affiche(v) ; v.end()) ; affiche(v) ; v.end()) ; affiche(v) ; v.end()) ; affiche(v) ; 8 9 8 9 9

irt ed semhtirogla sed noitasilitud elpmexE

: semhtirogla sec ed noitasilitud elpmexe nu icioV .selanigiro secneuqs xued sed ecalp al erdnerp tneiv iuq elues enu ne sevitucsnoc secneuqs xued ed noisu f al temrep iuq egrem_ecalpni ; sertua xued ed noisu f rap ecneuqs e misiort enud noitarc al temrep iuq egrem : s e m ht ir o g l a x u e d et s i x e l I . s l c sel tnavius tnemeuqinu snnodro tnos sreinred sec euq ec ed unet etpmoc ,etsilar erug tsen pamitlum uo pam ep yt ed sruenetnoc sed noitacilppa ruel ,ehcnaver ne ; tesitlum uo tes ep yt ed sruenetnoc sed reuqilppas tnevuep sli ,erocne L .erdro e m m el tnavius ennodro ecneuqs e misiort enu ne rinur sel etsisnoc sennodro secneuqs xued ed noisu f a L

.eriap enud emro f suos setnedcrp snoita mro fni xued sel tinruo f egnar_lauqe ; elbissop noitisop erin -red al tinruof dnuob_reppu euq sidnat ,elbissop noitisop eri merp al tinruo f dnuob_re wol : erdro niatrec nud unet etpmoc ,ennod ruelav enu ruop elbissop tnemecalpmel resilacol t u e p n o ,sr u el li a r a P .) e nr e c n o c er dr o d n o it al er al r a p e ti u d ni e c n e l a v i u q l e d s n es u a( e t n e l -aviuq ruelav enu ecneuqs al snad etsixe lis riovas ed te mrep hcraes_yranib e mhtiroglaL .hcraes_yranib ruop tpecxe ,ici sni m - a xe se m ht ir o g la x ua t na la vi u q ser b m e m s n oi tc n o f e d j d t n es o psi d s f it ai c ossa sr u e n e t n o c sel ,tios ne liuq iouQ ...slc sel tnemelues siam ,snnodro tnos iuq stne ml sruel sap tnos en ec ,larng ne ,euqsiup elbaegasivne erug tsen pamitlum te pam sep yt sed noitacilppa ruel ,ehcnaver nE .tesitlum uo tes ep yt ed sruenetnoc sed reuqilppas ,eiroht ne ,cnod tnevuep sl i t e e nr ec n oc e c ne u q s al s a p t ne i fi d o m e n se m h tir o g la s ec , erd n et ta ys t u e p n o e m m o C . se ll ei t ne uq s s e hcre h cer se lp m is ed e uq se t -namrofrep sulp )erianib uo( euqimotohcid ehcrehcer ed sedohtm sed resilitud temrep ruel iuq ec tseC .tnemeticilpxe inruo f tacidrp nud uo ,< ruetarpol ed tua fd rap essigas liuq , e s il it u ar es i u q t cir ts el b i a f er dr o d n o it a l er a l t n a vi us e n n o dr o t n e m e l b a n e v n o c t i os e nr e c -noc ecneuqs al euq tnesoppus ici stnesrp se mhtirogla se L .sennodro tne meriassecn non secneuqs sed tneiauqilppas 3 ehpargarap el snad stnesrp ehcrehcer ed semhtirogla se L

614

7.2 Algorithmes de fusion

7.1 Algorithmes de recherche binaire

Les algorithmes standard CHAPITRE 27

#include <iostream> #include <vector> #include <algorithm> using namespace std ; main() { void affiche (vector<int>) ; int t1[8] = {2, 1, 3, 12, 2, 18, 5, 8} ; int t2[5] = {5, 4, 15, 9, 11} ; vector<int> v1(t1, t1+8), v2(t2, t2+6), v ; cout << "vecteur 1 initial : " ; affiche(v1) ;

8 - Algorithmes caractre numrique

615

sort (v1.begin(), v1.end()) ; cout << "vecteur 1 trie cout << "vecteur 2 initial sort (v2.begin(), v2.end()) ; cout << "vecteur 2 trie

: " ; affiche(v1) ; : " ; affiche(v2) ; : " ; affiche(v2) ;

merge (v1.begin(), v1.end(), v2.begin(), v2.end(), back_inserter(v)) ; cout << "fusion des deux : " ; affiche(v) ; random_shuffle (v.begin(), v.end()) ; /* v nest plus ordonne */ cout << "vecteur v desordonne : " ; affiche(v) ; sort (v.begin(), v.begin()+6) ; /* tri des premiers elements de v */ sort (v.begin()+6, v.end()) ; /* tri des derniers elements de v */ cout << "vecteur v trie par parties : " ; affiche(v) ; inplace_merge (v.begin(), v.begin()+6, v.end()) ; /* fusion interne */ cout << "vecteur v apres fusion : " ; affiche(v) ; } void affiche (vector<int> v) { unsigned int i ; for (i=0 ; i<v.size() ; i++) cout << v[i] << " " ; cout << "\n" ; } vecteur 1 initial vecteur 1 trie vecteur 2 initial vecteur 2 trie fusion des deux vecteur v desordonne vecteur v trie par parties vecteur v apres fusion : : : : : : : : 2 1 5 2 1 5 2 1 1 3 12 2 18 5 8 2 2 3 5 8 12 18 4 15 9 11 2 4 5 9 11 15 2 2 2 3 4 5 5 8 12 9 2 2 15 2 5 2 5 9 12 15 1 2 2 2 2 3 4 5 5 8

9 1 3 9

11 12 15 18 18 3 8 11 4 4 5 8 11 18 11 12 15 18

8 Algorithmes caractre numrique


.)0 tisiohc no ,larng ne( tne mugra ne einruo f elait -ini ruelav enu tatlusr el tnetuoja semhtirogla xued sec euq tia f ua edrag ardnerp nO .elliat em m ed secneuqs xued ed erialacs tiudorp el eutcef fe tcudorp_renni euq sidnat ,ecneuqs enud stneml sed e mmos al tia f etalumucca e mhtiroglal ,erdnetta ys tuep no em moC .eirporppa erianib noitcno f enu essinruo f elleuq uo suluov sruetarpo sel ini fdrus tnemelbanevnoc tia erinred ettec euq uep ruop essalc ep yt ed stneml sed reuqilppas snio mnan tnevuep sli ,euqirmun tne mevitce ffe ep yt nud stneml sed ,iroirp a ,snitsed ttulP .* uo - ,+ sruetarpo sel rus sedno f seuqirmun snoitarpo sed ,ecneuqs e n u d s t n e m l s e l r us , t n e ut c e f f e i u q s e m ht ir o g l a s e l e u qir b ur et t e c s n a d ss al c s n o v a s u o N

noisuf ed semhtirogla sed noitasilitud elpmexE

seuqita mhta m snoiton xua troppar rap ecner ffid erimerp enu eutitsnoc iuq ec ,sennodro tne melbanevnoc tneios selleuq tnadnepec tua f li ; seuqnocleuq secneuqs sed reuqilppas eir o h t n e t n e v u e p , x u e t n a u q , i u q x u ar n g s e m h tir o gl a s e d e tsi x e l i , e h c n a v er n E . s e u q -issalc setsilb mesne snoitarpo sel resilar ed tnattemrep erbmem noitcno f enucuad tnesop -s i d e n tes i tlu m t e tes sr ue ne t n oc se l ,t n e d crp ert ipa hc e l sn a d r et ats n o c e l up a n o e m m o C

: se mhtirogla stner ffid sec ed noitasilitud elpmexe nu icioV .)gnahcni tnatser tne ml rei merp el( s fitucsnoc stneml x u e d e d s e c n er f f i d s e d e mr o f e ll i a t e m m e d e c n e u q s e n u , e c n e u q s e n u d ri tr a p , e r c ecnereffid_tnecajda emhtiroglal ,ni fnE .cte ,dnoces ud te reimerp ud em mos al tse dnoces el ,gnahcni tse tne ml reimerp el : erimerp al ed sruelav sed sleitrap slu muc sed emro f elliat emm ed ecneuqs ellevuon enu ,ecneuqs enud ritrap ,erc mus_laitrap e mhtiroglaL
616
Les algorithmes standard CHAPITRE 27

9 Algorithmes caractre ensembliste


seuqirmun semhtiroglad noitasilitud elpmexE
3 7 8 -4 5 -3 -1 4 1 1 -3 2 vecteur v1 : vecteur v2 : somme des elements de v1 : produit scalaire v1.v2 : sommes partielles de v 1 : differences ajdacentes de v1 : 1 3 2 5 3 16 1 4 1 2 #include <iostream> #include <numeric> // pour les algorithmes numeriques using namespace std ; main() { void affiche (int *) ; int v1[5] = { 1, 3, -1, 4, 1} ; int v2[5] = { 2, 5, 1, -3, 2} ; int v3[5] ; cout << "vecteur v1 : " ; affiche(v1) ; cout << "vecteur v2 : " ; affiche(v2) ; cout << "somme des elements de v1 : " << accumulate (v1, v1+3, 0) << "\n" ; /* ne pas oublier 0 */ cout << "produit scalaire v1.v2 : " << inner_product (v1, v1+3, v2, 0) << "\n" ; /* ne pas oublier 0 */ partial_sum (v1, v1+5, v3) ; cout << "sommes partielles de v 1 : " ; affiche(v3) ; adjacent_difference (v1, v1+5, v3) ; cout << "differences ajdacentes de v1 : " ; affiche(v3) ; } void affiche (int * v) { int i ; for (i=0 ; i<5 ; i++) cout << v[i] << " " ; cout << "\n" ; }

. t e s e p y t e d sr u e n e t n o c s e d n o it a c il p p a ruel riovas ,se mhtirogla sed tnaruoc sulp el egasul tnadnopserroc elpmexe nu icioV .retresni euq ert arruop en noitresnid ruetarti tec ,ni f ne uo tubd ne noitresnid tnesopsid en tesitlum in tes in emmoc ,sulp eD .rerc ecneuqs al ruop noit -resnid ruetarti nu riruocer cnod ardua f li ,sac ec snaD .snoitresni sel uo snoisserppus sel tnemelues sia m stneml sruel ed sruelav sed noitaci fidom al sap tnesirotuan iuq tesitlum uo tes ep y t ed sr ue n et n oc s ed c e va e m lborp n u t n e m ets e fi n a m es op i uq ec ,s t na ts ix e st ne m l s e d s n a d ,sr u o j u o t e m m o c ,t n o f el e c n e u q s e l l e v u o n e n u t n a r c s e m ht ir o g l a s e l ,sr u e ll i a r a P . t il a g l r a p s e ti u d ni tnos iuq sellec ceva tnedicnoc tcirts elbia f erdrod noitaler al rap etiudni ecnelaviuqd sessalc sel euq eriassecn tse li ,tne msicrp sulp ; setnadnopserroc secneuqs sel rennodro ivres tna ya noitaler al ceva elbitapmoc tios tilagd noitaler ettec euq eriassecn srola tse li ,tne melbanevnoc tnennoitcno f se mhtirogla sel euq ruoP .tnemeticilpxe inruo f erianib tacidrp nu rus ,tne melleutnev ,uo == ruetarpol rus edno f es stneml xued ertne tilagL .ruelav em m ed stneml srueisulp ed ecnesrp al retpecca erina m ed ,segan ma uep euqleuq ert d tno setsilb mesne snoiton sec ,sulp eD .tnesba tnemetse finam tse erdrol tnod ,selleusu
617

#include <iostream> #include <set> #include <algorithm> using namespace std ; main() { char t1[] = "je me figure ce zouave qui joue du xylophone" ; char t2[] = "en buvant du whisky" ; void affiche (set<char> ) ; set<char> e1(t1, t1+sizeof(t1)-1) ; set<char> e2(t2, t2+sizeof(t2)-1) ; set<char> u, i, d, ds ; cout << "ensemble 1 : " ; affiche (e1) ; cout << "ensemble 2 : " ; affiche (e2) ; set_union (e1.begin(), e1.end(), e2.begin(), e2.end(), inserter(u, u.begin())) ; cout << "union des deux : " ; affiche (u) ; set_intersection (e1.begin(), e1.end(), e2.begin(), e2.end(), inserter(i, i.begin())) ; cout << "intersecton des deux : " ; affiche (i) ; set_difference (e1.begin(), e1.end(), e2.begin(), e2.end(), inserter(d, d.begin())) ; cout << "difference des deux : " ; affiche (d) ; set_symmetric_difference (e1.begin(), e1.end(), e2.begin(), e2.end(), inserter(ds, ds.begin())) ; cout << "difference_symetrique des deux : " ; affiche (ds) ; }

9 - Algorithmes caractre ensembliste

.gnarra tnemelbanevnoc )tcerid scca ruetarti nud einum ecneuqs enu cnod( uaelbat nu te erbra let nu ertne euqovinuib ecnadnopserroc enu rilbat tuep nO .nielp erianib erbrad ellec rus ednof tse sat ed noiton aL .1
#include <iostream> #include <algorithm> using namespace std ;

: stilibissop setner ffid sec tnartsulli stelpmoc semmargorp ed selp mexe seuqleuq icioV .sat ud ruelav erinred al srpa etsuj ertar -appa tiod ruelav etteC .sat nu ruelav enu retuojad te mrep paeh_hsup emhtiroglal ,nifnE . n u t s e n e r u e l a v er i nr e d ) el l e v u o n( as e d e virp e cn e uqs a l e l ues ; s at n u su lp sro la tse n er i t ne e c ne uq s al ; ec ne uq s e d n i f ne ecalp tse ic-ellec ; sat nud ruelav erimerp al reriter ed temrep paeh_pop e mhtiroglaL .)sat nu sulp srola tsen tatlusr el( sat nu reirt ed temrep paeh_tros e mhtiroglaL .sat nud emro f suos ecneuqs enu tnemelbanevnoc regnarrar ed temrep paeh_ekam emhtirogla nU .s er t u a s e l s et u o t er u eir p us t s e r u el a v er i m er p as e u q ts e s a t n u d stirporp sed enU .ruelav enud noisserppus al uo tuojal ,irt el ruop secna mro frep sennob ed rinetbod te mrep iuq ecneuqs enud )euqinu( erilucitrap noitasinagro enu tse sat nU .tcerid scca ruetarti nud te t c irt s e l bi a f er dr o d n oi t a l er e n u d s ei n u m s e c n e u q s s e d t n e u qi l p p as s l I .s l e u q s l e t s el b a s - il i t u s ni o m n a n t n e ts er i u q si a m u a e v i n t u a h s ul p e d s e m ht ir o g l a s er t u a d n o i t a t n e m l p mi l ruop selbasilitu tnemelleutnev ,uaevin sab zessad se mhtiroglad tia f ne tigas lI .)sialgna ne paeh( sat ed noiton al rus sdno f semhtirogla seuqleuq etropmoc dradnats euqhtoilbib a L
1

tes epyt ed ruenetnoc nu ceva et si l b m e s n e e r t c a r a c s e m ht i r o g l a d n o i t a s il i t u d e l p m e x E


o u p m p v q o q r s t u v w x y z y r x z p q r s t w x z

618

10 Algorithmes de manipulation de tas


Les algorithmes standard CHAPITRE 27
ensemble 1 : a c d e f g ensemble 2 : a b d e h i union des deux : a b c d e f intersecton des deux difference des deux difference_symetrique des deux void affiche (set<char> e ) { set<char>::iterator ie ; for (ie=e.begin() ; ie!=e.end() ; ie++) cout << *ie << " " ; cout << "\n" ; } h k g : : : i j l m n s t u h i j k a d e c f g j b c f g n v l h l j o w m i m k p y n n o l q r u v x y z

10 - Algorithmes de manipulation de tas

619

main() { int t[] = { 5, 1, 8, 0, 9, 4, 6, 3, 4 } ; void affiche (int []) ; cout << "sequence t initiale : " ; affiche (t) ; make_heap (t, t+9) ; // t est maintenant ordonne en tas cout << "tas t initial : " ; affiche(t) ; sort (t, t+9) ; // t est trie mais nest plus un tas cout << "sequence t triee : " ; affiche(t) ; sort (t, t+9) ; // resultat incoherent car t nest plus un tas cout << "sequence t triee 2 fois : " ; affiche(t) ; make_heap (t, t+9) ; // t est a nouveau ordonne en tas cout << "tas t nouveau : " ; affiche(t) ; } void affiche (int t[]) // voir remarque paragraphe 2.4 du chapitre 25 { int i ; for (i=0 ; i<9 ; i++) cout << t[i] << " " ; cout << "\n" ; } sequence t initiale tas t initial sequence t triee sequence t triee 2 fois tas t nouveau : : : : : 5 9 0 0 9 1 5 1 1 8 8 8 3 3 6 0 4 4 4 4 9 1 4 4 4 4 4 5 5 5 6 6 6 6 3 3 3 8 8 1 4 0 9 9 0

#include <iostream> #include <algorithm> using namespace std ; main() { int t[] = { 5, 1, 7, 0, 6, 4, 6, 8 , 9 } ; void affiche (int *, int) ; cout << "sequence t complete : " ; affiche (t, 9) ; make_heap (t, t+7) ; // 7 premiers elements de t ordonnes en tas cout << "tas t (1-7) initial : " ; affiche (t, 7) ; push_heap (t, t+8) ; // ajoute t[7] au tas precedent cout << "tas t (1-8) apres push : " ; affiche (t, 8) ; push_heap (t, t+9) ; // ajoute t[8] au tas precedent cout << "tas t (1-9) apres push : " ; affiche (t, 9) ; sort_heap (t, t+9) ; // trie le tas cout << "tas t (1-9) trie : " ; affiche (t, 9) ; } void affiche (int *t, int nel) { int i ; for (i=0 ; i<nel ; i++) cout << t[i] << " " ; cout << "\n" ; }

ecneuqs enud sat rap irT

620

Les algorithmes standard CHAPITRE 27

sequence t complete tas t (1-7) initial tas t (1-8) apres push tas t (1-9) apres push tas t (1-9) trie

: : : : :

5 7 8 9 0

1 6 7 8 1

7 6 6 6 4

0 0 6 7 5

6 1 1 1 6

4 4 4 4 6

6 5 5 5 7

8 9 0 0 6 8 9

#include <iostream> #include <algorithm> using namespace std ; main() { int t[] = { 5, 1, 7, 0, 6, 4, 6, 8 , 9 } ; void affiche (int *, int) ; cout << "sequence t complete : " ; affiche (t, 9) ; make_heap (t, t+9) ; // 9 elements de t ordonnes en tas cout << "tas t (0-8) initial : " ; affiche (t, 9) ; pop_heap (t, t+9) ; // enleve t[0] au tas precedent cout << "tas t (0-7) apres pop : " ; affiche (t, 8) ; cout << " valeurs t[8] : " << t[8] << "\n" ; pop_heap (t, t+8) ; // enleve t[0] du tas precedent cout << "tas t (0-8) apres pop : " ; affiche (t, 7) ; cout << " valeurs t[7-8] : " << t[7] << " " << t[8] << "\n" ; sort_heap (t, t+7) ; // trie le tas t[0-6] cout << "tas t1 (0-6) trie : " ; affiche (t, 7) ; } void affiche (int *t, int nel) { int i ; for (i=0 ; i<nel ; i++) cout << t[i] << " " ; cout << "\n" ; } sequence t complete tas t (0-8) initial tas t (0-7) apres pop valeurs t[8] : 9 tas t (0-8) apres pop valeurs t[7-8] : 8 tas t1 (0-6) trie : 5 1 7 0 6 4 6 8 9 : 9 8 7 5 6 4 6 1 0 : 8 6 7 5 0 4 6 1 : 7 6 6 5 0 4 1 9 : 0 1 4 5 6 6 7

s a t n u d r u e l a v e r i m e r p a l e d n oi s s e r p p u S

sat nu snad noitresnI

.gnirtsw emmon ,rachw epyt el ruop esilaicps noisrev enu tnemelag etsixe lI .1

.secidnid sruelav sed sertua sel ,sleusu sruetarti sed leppa tnasia f senu sel ,setnadnoder s t i li b iss o p s e ni atr e c e d e c n es r p a l e il t l u ci f f i d et i t e p e n u r e t o n t n a d n e p e c t u a f l I . t n e m - e v ir b z ess a r e t n es r p s e l e d ar tt e mr e p s u o n i u q e c , el l er ut a n s rt n o a f e d er v u n e t n e t t e m es stilannoitcno f sec ,elarng erina m enuD .sertuad neib tne melag sia m ,)gnirts ruop >rahc<rotcev tne msicrp sulp( rotcev essalc al ed stilannoitcno f sed puocuaeb tnemel -ues non edssop elleuq arrev nO ...senahc-suos ed noisserppus uo snoitresni ,senahc-suos ed ehcrehcer ,noitantacnoc ,noitatceffa ,stnadnopserroc stnemecalpme sed etnerapsnart euq - i m a n y d n o it s e g : e p yt l e t n u d er d n e tt a t u e p n o u q s e ll e n n o i ti d ar t s ti l a n n o it c n o f s el t n ar f f o ne sertcarac ed senahc ed noitalupina m ed elpuos srt erdac nu esoporp gnirts essalc a L . t l u c i f fi d e n u c u a ,snoa f setuot ed ,etnesrp en gnirts_cisab noitasilarng al ; esilitu sulp al niol ed tse iuq essalc ettec ed stirporp sed nemaxel snoretimil suon suon ,icI . >rahc<gnirts_cisab emmoc eini fd tse iuq gnirts e mmon nortap ec ed esilaicps noisrev enu enu etsixe li siaM .stne ml sed ep yt el rap rt marap gnirts_cisab nortap ud tigas lI .rahc ep yt ed ,reilucitrap ne ,cnod euqnocleuq ep yt ed sruelav ed setius sed erid--tsec ,sesilarng senahc sed relupinam ed tnattemrep sessalc ed nortap nud esopsid dradnats euqhtoilbib a L .. .ses o h c s el e m m -ios tnarg neuq redcca y tuep en no ,euqiman yd noitseg ed stilibissop xua tnauq ; sap etsixen noitatcef fal euq elanab issua noitarpo enu e m m ,isniA .eritne trap enahc ep yt nu sap tneiassinruo f en selleuq uqilpxe jd snova suon te C el ys ed senahc sel m mon s n o va s u o n e u q e c t n ei at n esr p e u q s t ne i n v n oc ni se l ri o v e d n ois ac c ol ue s n o v a s u o N
1

La classe string

28

: n o n u o s et n ats n o c , se l -leusu senahc ed ritrap ,noitcurtsnoc as ed srol enahc enu resilaitinid tnette mrep sertuaD
string ch1 ; /* construction dune chane vide : ch1.size() == 0 string ch2 (10, *) ; /* construction dune chane de 10 caractres /* gaux * ; ch2.size() == 10 string ch3 (5, \0) ; /* construction dune chane de 5 caractres /* de code nul ; ch2.size() == 5 */ */ */ */ */

: ruetcev nud sruet -curtsnoc xua tnednopserroc sniatrec ; sruetcurtsnoc ed puocuaeb ed esopsid gnirts essalc a L

.)(dner , )(nigebr ,)(dne ,)(nigeb serilucitrap sruelav sed euq isnia ,rotareti_esrever te rotareti tcerid scca sruetarti sed esopsid nO .ez is er t e e vr eser s n oi tc n o f x ua rir u oc er tu e p n o ; eri o m m n o it a c o ll a e ll e v u o n e n u r e d c or p e d n i o s e b ti os li u q s n as , eri u d ort n i y arr u o p n o u q s er t - c a r a c e d l a m i x a m e r b m o n e l t i n r u o f yt i c a p a c n o i t c n o f a l ; ) s a c e l t i a t a l e c i s e m m o c e s s a p es tuot ,snio m ud ,uo( eriomm ed colb lues nud e mrof suos vresr tse tne mecalpme noS . e z i s e u q e l r e m m el t n a u o j ) ( h t g n e l e m m o n n o it c n o f er t u a e n u t i ni f d g n i r t s essalc al euq reton ; )(ezis erbmem noitcno f al rap einruo f etnaruoc elliat enu edssop lI .][ e d sa c el sap ts e n iuq ec ,tcerrocni ecidnid sac ne )egnar_fo_tuo( noitpecxe enu erng ta euq snoleppar ; 0 ecid -nil dnopserroc ertcarac rei merp el ,sleusu xuaelbat sel uo sruetcev sel ceva e mmoc ; ta erb me m n o it c no f al c e va uo ][ r u et arp ol c e va er ia f e s t uep st n at si xe s t ne m l x ua s cc a L : senu mmoc stilannoitcno f ed erbmon niatrec nu sruelliad edssop li te >rahc<rotcev ep yt ed ruenetnoc nu cnod elbmesser tejbo let nU .sesirper srueisulp tnemelleutnev ,enahc al ed nies ua ertarappa tuep lun edoc ed ertcarac ec te sulp etsixen enahc ed ni f ed ertcarac e d n o it o n a l , C el y ts e d s e n a h c s e l r u o p s e s il it u s n oi t n e v n o c x u a t n e m eri art n o C . e m m ar g or p u d n oi t u c x el e d li f u a t n e m e u qi m a n y d r e ul o v t u e p e l li at a S .s e u q n o c l e u q s er t c ar a c e d e u q -nocleuq erbmon nud emro f etius enu ,nnod tnatsni nu ,tneitnoc gnirts ep yt ed tejbo nU

622

2 Construction

1 Gnralits

La classe string CHAPITRE 28

string s1 ; ..... string s2(s1) /* ou string s2 = s1 ; construction de s2 par recopie de s1 */ /* s2.size() == s1.size() ou s2.length == s1.length() */ string // char * string // mess1 ("bonjour") ; /* construction chane de longueur 7 : bonjour */ ou string mess1 = "bonjour" ; adr = "salut" ; mess2 (adr) ; /* construction chane de 5 caractres : salut */ ou string mess2 = adr ;

: leusu eipocer rap ruetcurtsnoc nud esopsid no ,udnetne neiB

.engil ed ela mixa m rueugnol enu rini fd ed eriassecn sulp tsen li ,zetatsnoc el suov emmoC .reivalc ua sertne sertcarac ed sengil sed tiahci ffa iuq 22 ertipahc ud 3.2 ehpargarap ud em margorp el erircr tne mmoc iciov ,elpmexed ertit .)(ezis.hc uo )(htgnel.hc rap eunetbo ert arruop eutitsnoc isnia enahc al ed rueugnol a L .hc tejbol snad sgnar ert tnoruop iuq sertcarac ed erb mon el rus esp en noitcirtser enucuA
// // getline (cin, ch, x) ; // // lit une suite de et la range dans lit une suite de et la range dans caractres lobjet ch caractres lobjet ch termin par une fin de ligne (fin de ligne non comprise) termine par le caractre x (caractre x non compris)

: isnia esilitus iuq enilteg tne melag em mon ,etnad -nepdni noitcno f enu etsixe li ,sio fetuoT .C el yts ed senahc sel ruop enilteg ed elr el gnirts ep yt ed stejbo sel ruop tnauoj edohtm ed maertsi essalc al snad sap etsixen li ,ehcnaver nE .) e n gi l e d n i f enu uo ecapse nu reilucitrap ne( cnalb ecapse nu tnatrop moc enahc enu eril ed tilibissopmil od ,C el yts ed senahc sel ruop euq sruetaraps ed snoitnevnoc se mm sel ,tua fd rap ,esilitu >> te gnirts ep yt el ruop sini fdrus tnos >> te << sruetarpo sel ,dnetta ys no em moC .seuq -ihpargocixel snosiarap moc sed euq isnia ,pa ws te ngissa snoitcnof sel ,noitatce ffal riovas ,sruetcev sel ruop sertnocner jd selabolg snoitarpo sed tne mellerutan tuot esopsid nO

: >rahc<tsil ep yt ed tse l is ,elpmexe rap ,sertcarac ed ecneuqs enud ritrap enahc enu eriurtsnoc tnemelag tuep no ,timil trtni nud euq neiB
623

3 Oprations globales

main() { string ch ; // pour lire une ligne int lg ; // longueur courante dune ligne do { getline (cin, ch) ; lg = ch.length() ; cout << "ligne de " << lg << " caracteres :" << ch << ":\n" ; } while (lg >1) ; } #include <iostream> using namespace std ; string ch ; getline (cin, ch) ; string chl (l.begin(), l.end()) ; /* construction dune chane en y recopiant */ /* les caractres de la liste l */

3 - Oprations globales

ruelav enu tneitbo no ,sap tituoban ehcrehcer al is ; nrecnoc ertcarac rei merp ua tnadnop -serroc ecidnil ruoter ne tneitbo no ,silacol t a ertcarac let nu uo enahc ellet enuuqsro L .snnod sertcarac ed etius enu sap tnanetrappan ertcarac nud ,snnod sertcarac ed etius enu tnanetrappa ertcarac nud ,snnod ertcarac nud uo enahc enud ecnerrucco erinred al uo eri merp al revuorter ed tnette mrep snoitcno f seC

: er tc ara c n u te e ll e us u e n a h c enu uo selleusu senahc xued rentacnoc ed elbissop sap tsen liuq tnadnepec areton nO
string ch1 ("bon") ; string ch2 ("jour") ; string ch3 ; ch3 = ch1 + ch2 ; /* ch3 = ch1 + ; /* ch3 += ch2 ; /* ch3 += " monsieur" /* /* ch1.length() == 3 */ /* ch2.length() == 4 */ /* ch3.length() == 0 */ ch3.length() == 7 ; ch3 contient la chane "bonjour" */ ch3.length() == 4 */ ch3.length() == 8 ; ch3 contient la chane "bon jour" */ ch3 contient la chane "bon jour monsieur" */

: selp mexe seuqleuq icioV .etnati mocnoc noa f ed ini fd tse =+ ruetarpoL .er dr o le u q et -ropmin snad icec te ,ertcarac nu ceva uo elleusu enahc enu ceva gnirts ep yt ed tejbo nud ; g n i r t s e p y t e d st ej b o x u e d e d : noitantacnoc al erttemrep erina m ed ini fdrus t a + ruetarpoL

enilteg etnadnepdni noitcnof al ed noitasilitud elpmexE


ligne de 0 caracteres ::

624

5 Recherche dans une chane 4 Concatnation


La classe string CHAPITRE 28
char c1, c2 ; ch3 = ch1 + c1 + ch2 + c2 ; /* correct */ ch3 = ch1 + c1 + c2 ; /* incorrect ; mais on peut toujours faire : */ /* ch3 = ch1 + c1 ; ch3 += c2 ; */ bonjour ligne de 7 caracteres :bonjour: 9 fois 5 font 45 ligne de 16 caracteres :9 fois 5 font 45: nimporte quoi <&"(-_))= ligne de 29 caracteres :nimporte quoi <&"(-_))=:

sap tnanetrappan ertcarac nud ecnerrucco erimerp al ehcrehcer fo_ton_tsrif_dnif noitcnof a L .ecnerrucco erinred al ehcrehcer ne fo_tsal_dnif euq sidnat ,)elleusu uo gnirts( enahc ertua enud sertcarac sed nul ed ecnerrucco eri merp al ehcrehcer fo_tsrif_dnif noitcno f a L

.er t cara c n u d u o e n a h c ert ua enud ecnerrucco erinred al rehcrehcer ed temrep dnifr noitcno f al ,elbalbmes erinam eD
*/ > ch.size() */ */ */ */ ici, la recherche dbute ch[5] */ > ch.size() */

: selp mexe seuqleuq icioV .nnod gnar ed ertcarac nu retubd eria f al tuep no siam ,enahc al ed tubd ua ecnem moc ehcrehcer al ,tua fd raP . n n o d er t car ac n u d ; elleusu enahc enu rap tios ,gnirts ep yt ed tejbo nu rap tios einruo f )enahc-suos ed tnevuos elrap no( enahc ertua enud : e c nerr uc co erimerp al ,ennod enahc enu snad ,rehcrehcer ed temrep dnif erb me m noitcno f a L

.ruelav as ed nemaxel elici ffid uep euqleuq dner iuq ec ,enahc al ruop sesimrep setimil sed srohed ne ecidnid
625

5.2 Recherche dun caractre prsent ou absent dune suite 5.1 Recherche dune chane ou dun caractre
string ch = "anticonstitutionnellement" ; string mot ("on"); char * ad = "ti" ; int i ; i = ch.rfind ("elle") ; /* i == 17 */ i = ch.rfind ("elles") ; /* i <0 ou i > ch.size() */ i = ch.rfind (mot) ; /* i == 14 */ i = ch.rfind (ad) ; /* i == 12 */ i = ch.rfind (n) ; /* i == 23 */ i = ch.rfind (n, 18) ; /* i == 16 */ string ch = "anticonstitutionnellement" string mot ("on"); char * ad = "ti" ; int i ; i = ch.find ("elle") ; /* i == 17 i = ch.find ("elles") ; /* i <0 ou i i = ch.find (mot) ; /* i == 5 i = ch.find (ad) ; /* i == 2 i = ch.find (n) ; /* i == 1 i = ch.find (n, 5) /* i == 6 , car i = ch.find (p) ; /* i <0 ou i ;

5 - Recherche dans une chane

. n n o d er t car ac n u si o f sr u e is ul p u o e n u ; ni f ed ruetarti nu te tubd ed ruetarti nu rap eini fd ,rahc ep yt ed stnemld ecneuqs enu : ruetarti nu rap eini fd ennod noitisop enu ; nnod ertcarac nu siof ed erbmon niatrec nu ; r u eu g n o l enu rap eini fd elleusu enahc ed eitrap enu uo )* rahc ep yt( elleusu enahc enu ; r u e u g n o l el l e u t n e v e n u t e t u b d ed ecidni nu rap eini fd enahc ed eitrap enu uo )gnirts ep yt ed tejbo( enahc ertua enu : e ci d ni n u r a p ei n i f d , e n n o d n o it is o p e n u : r e r s n i d t e m r e p t r e s n i n o it c n o f a L

.t n e m e u q it a m t s y s e tr e f f o s a p t n a d n e p e c t n a t n ti li b -issop erinred ettec ,ruetarti rap tios ,ecidni rap tios ,enahc-suos enu rinifd trap ertuad ; s e r t c a r a c s e d u o ) * r a h c( selleusu senahc sed issua siam ,gnirts ep yt ed stejbo sed tnemelues non ,resilitu trap enud : tuep nol o eruse m al snad ,tne melleitrap tnepuocer es selle sia m ,seuqissalc tne mevitaler tnos stilibissop seC

: selp mexe seuqleuq icioV .erinred al ehcrehcer ne fo_ton_tsal_dnif euq sidnat ,enahc ertua enu
626
La classe string CHAPITRE 28

6.1 Insertions

6 Insertions, suppressions et remplacements


string ch = "anticonstitutionnellement" char * ad = "oie" ; int i ; i = ch.find_first_of ("aeiou") ; i = ch.find_first_not_of ("aeiou") ; i = ch.find_first_of ("aeiou", 6) ; i = ch.find_first_not_of ("aeiou", 6) i = ch.find_first_of (ad) ; i = ch.find_last_of ("aeiou") ; i = ch.find_last_not_of ("aeiou") ; i = ch.find_last_of ("aeiou", 6) ; i = ch.find_last_not_of ("aeiou", 6) i = ch.find_last_of (ad) ; /* /* /* /* /* /* /* /* /* /* ; i i i i i i i i i i == == == == == == == == == == 0 1 9 6 3 22 24 5 6 22 */ */ */ */ */ */ */ */ */ */

6 - Insertions, suppressions et remplacements

627

6.2 Suppressions
: selp mexe seuqleuq icioV .tubd ed ruetarti nu rap ini fd nnod ertcarac nu ; r ue u g no l e n u te t ub d e d ec i dn i n u rap tios ,ni f ed ruetarti nu te tubd ed ruetarti nu rap tios eini fd ,enahc enud eitrap enu : remirppus ed temrep esare noitcno f a L

#include <iostream> #include <string> #include <list>

enahc enu snad snoitresnid elpmexE

: selp mexe seuqleuq icioV


#include <iostream> #include <string> #include <list> using namespace std ; main() { string ch ("0123456") ; string voy ("aeiou") ; char t[] = {"778899"} ; /* insere le caractere a en ch.begin()+1 */ ch.insert (ch.begin()+1, a) ; cout << ch << "\n" ; /* insere le caractere b en position dindice 4 */ ch.insert (4, 1, b) ; cout << ch << "\n" ; /* insere 3 fois le caractere x en fin de ch */ ch.insert (ch.end(), 3, x) ; cout << ch << "\n" ; /* insere 3 fois le caractere x en position dindice 6 */ ch.insert (6, 3, x) ; cout << ch << "\n" ; /* insere la chaine voy en position 0 */ ch.insert (0, voy) ; cout << ch << "\n" ; /* insere en debut, la chaine voy, a partir de position 1, longueur 3 */ ch.insert (0, voy, 1, 3) ; cout << ch << "\n" ; /* insertion dune sequence */ ch.insert (ch.begin()+2, t, t+6) ; cout << ch << "\n" ; } 0a123456 0a12b3456 0a12b3456xxx 0a12b3xxx456xxx aeiou0a12b3xxx456xxx eioaeiou0a12b3xxx456xxx ei778899oaeiou0a12b3xxx456xxx

628

La classe string CHAPITRE 28

using namespace std ; main() { string ch ("0123456789"), ch_bis=ch ; /* supprime, a partir de position dindice 3, ch.erase (3, 2) ; cout << "A ch = ch_bis ; /* supprime, de begin()+3 begin()+6 */ ch.erase (ch.begin()+3, ch.begin()+6) ; cout << "B /* supprime, a partir de position dindice 3 ch.erase (3) ; cout << "C ch = ch_bis ; /* supprime le caractere de position begin()+4 ch.erase (ch.begin()+4) ; cout << "D } A B C D : : : : 01256789 0126789 012 012356789

pour une longueur de 2 */ : " << ch << "\n" ;

: " << ch << "\n" ; */ : " << ch << "\n" ; */ : "<< ch << "\n" ;

6.3 Remplacements
: selp mexe seuqleuq icioV .ni f ed ruetarti nu te tubd ed ruetarti nu rap eini fd ,rahc ep yt ed stnemld ecneuqs ertua enu rap ellavretni nu rap eini fd enahc enud eitrap enu recalp mer tuep no ,ertuo nE .nnod ertcarac nu sio f ed erb mon niatrec nu ; ennod rueugnol ed eitrap enu uo )* rahc ep yt( elleusu enahc enu ; r ue u g n ol e n u ,t n e m el l e u t n e v , t e t u b d e d e ci d n i n u r a p e i ni f d e n a h c er t u a e n u d ei tr a p e n u ; ) g n i r t s e p y t e d t ej b o( e n a h c ert u a e n u : rap ,ruetartid ellavretni nu rap tios ,rueugnol enu te ecidni nu rap tios ,einifd enahc enud eitrap enu recalp mer ed te mrep ecalper noitcno f a L

#include <iostream> #include <string> using namespace std ; main() { string ch ("0123456") ; string voy ("aeiou") ; char t[] = {"+*-/=<>"} ; char * message = "hello" ; /* remplace, a partir de indice 2, sur longueur 3, par voy ch.replace (2, 3, voy) ; cout /* remplace, a partir de indice 0 sur longueur 1, par voy, /* a partir de indice 2, longueur 3

enahc enu snad snoisserppus ed selpmexE


*/ << ch << "\n" ; */ */

7 - Les possibilits de formatage en mmoire

629

ch.replace (0, 1, voy, 1, 2) ; cout << ch << "\n" /* remplace, a partir de indice 1 sur longueur 2, par 8 fois * */ ch.replace (1, 2, 8, *) ; cout << ch << "\n" /* remplace, a partir de indice 1 sur longueur 2, par 5 fois # */ ch.replace (1, 2, 5, #) ; cout << ch << "\n" /* remplace, a partir de indice 2, sur longueur 4, par "xxxxxx" */ ch.replace (2, 4, "xxxxxx" ) ; cout << ch << "\n" /* remplace les 7 derniers caracteres par les 3 premiers de message */ ch.replace (ch.size()-7, ch.size(), message, 3) ; cout << ch << "\n" /* remplace tous les caracteres, sauf le dernier, par (t, t+5) */ ch.replace (ch.begin(), ch.begin()+ch.size()-1, t, t+5) ; cout << ch << "\n" } 01aeiou56 ei1aeiou56 e********aeiou56 e#####******aeiou56 e#xxxxxx******aeiou56 e#xxxxxx******hel +*-/=l

; ; ; ; ; ;

7 Les possibilits de formatage en mmoire


.maertsgnirtso te maertsgnirtsi ep yt ed stol f sed ,sio f ettec ,tnasilitu ne ,etrop moc alec euq segatnava sel suot ceva ,)gnirts ep yt ed stejbo( senahc seiarv xua ehcra md ettec resopsnart ed ici snosoporp suov suoN .maertsrtso ,maertsrtsi sessalc sel rus te C el yts ed senahc sel rus esab ,edoht m enu tnes - r p sr o l a s n oi v a s u o v s u o N . st o l f s e d s e n it s e d t n e m el ar n g s n o it ar p o s e l er i o m m e n o z enu reuqilppad tnemelpmis tuot tigas lI . eriom m ne egatamro f ed snoitarpo sed tnev -uos e mmon nol euq ec reutce ffe tnem moc uv snova suon ,22 ertipahc ud 7 ehpargarap uA

7.1 La classe ostringstream


: s er t c ar a c s e c e d e n a t n a ts ni e i p o c e n u tnanetnoc )gnirts ep yt ed tejbo( enahc enu rinetbod temrep rts erbmem noitcnof a L .eitros ed tol f nuuq ertit em m ua ,sertcarac sed riovecer tuep maertsgnirtso essalc ed tejbo nU

ostringstream sortie ; ..... sortie << ... << ... << ... ; // on envoie des caractres dans sortie ..... // comme on le ferait pour un flot string ch = sortie.str() ; // ch contient les caractres ainsi engrangs ..... // dans sortie sortie << ... << ... ; // on peut continuer engranger des // dans sortie, sans affecter ch

enahc enu snad stnemecalpmer ed selpmexE

630

La classe string CHAPITRE 28

7.2 La classe istringstream


7.2.1 Prsentation

: hc tejbo emm el tnerc selpmexe siort sec ,isniA .gnirts ep yt ed tejbo nud uo etnatsnoc enahc enud ,sertcarac ed uaelbat nud ritrap rc ert tuep maertsgnirtsi essalc ed tejbo nU

istringstream entree ("123 45.2 salut") ; string ch = "123 45.2 salut" ; istringstream entree (ch) ; char ch[] = {"123 45.2 salut"} ; istringstream entree (ch) ;

: euq sellet selleusu snoitcurtsni sed rap hc tolf ud sertcarac sed eriartxe srola tuep nO

ch >> ..... >> ..... >> ..... ;

maertsgnirtso essalc al ed noitasilitud elpmexE

: stilibissop sec tnartsulli elp mexe titep nu icioV


#include <iostream> #include <sstream> using namespace std ; main() { ostringstream sortie ; int n=12, p=1234 ; float x=1.25 ; sortie << "n = " << n << " p = " << p ; // on envoie des caractres dans // sortie comme on le ferait pour un flot string ch1 = sortie.str() ; // ch1 contient maintenant une copie // des caractres engrangs dans sortie cout << "ch1 premiere fois = " << ch1 << "\n" ; sortie << " x = " << x ; // on peut continuer engranger des caractres // dans sortie, sans affecter ch1 cout << "ch1 deuxieme fois = " << ch1 << "\n" ; string ch2 = sortie.str() ; cout << "ch2 } ch1 premiere fois = n = 12 p = 1234 ch1 deuxieme fois = n = 12 p = 1234 ch2 = n = 12 p = 1234 x = 1.25 // ch2 contient maintenant une copie // des caractres engrangs dans sortie = " << ch2 << "\n" ;

.)r ut u f el s na d er t araps id eleppa ,maertsrtsi essalc al tnasilitu ne( 22 ertipahc ud 2.7 ehpargarap ua noitaroil ma enu soporp snoiva suon tnod te 5 ertipahc ud 2.6.2 ehpargarap ua tnesrp emmargorp ud noitat -padal ed tia f ne tigas lI .dradnats ertnel rus erutcel al ed sac el snad ertcarac siavuam nud eppar f al rap srdnegne se mlborp sel erduosr tnem moc tnartnom elp mexe nu icioV . e rt n e d t o l f el s n a d edilavni ertcarac nud ecnesrp ed sac ne egalcuob ed te egacolb ed seuqsir sel re mirppus ; eitros al te ertnel ertne noitasinorhcn ysd ed e mlborp el relgr : )5 ert -ipahc ud 6.2 ehpargarap tne melleutnev ze yover( ruop esilitu ert tuep retiolpxel ed tnava eriomm ne engil enu eril etsisnoc iuq ehcra md al ,elarng erinam enud ,euq tiov nO maertsgnirtsi essalc al ed noitasilitud elpmexE
n = 123 x = 45.2 s = salut fin flot entree

7.2.2 Utilisation pour fiabiliser les lectures au clavier

#include <iostream> #include <sstream> using namespace std ; main() { int n ; bool ok = false ; char c ; string ligne ; // pour lire une ligne au clavier #include <iostream> #include <sstream> using namespace std ; main() { string ch = "123 45.2 salut" ; istringstream entree (ch) ; int n ; float x ; string s ; entree >> n >> x >> s ; cout << "n = " << n << " x = " << x << " s = " << s << "\n" ; if (entree >> s) cout << " s = " << s << "\n" ; else cout << "fin flot entree\n" ; }

: stilibissop sec tnartsulli elp mexe titep nu icioV


631

7 - Les possibilits de formatage en mmoire

632

La classe string CHAPITRE 28

do { cout << "donnez un entier et un caractere :\n" ; getline (cin, ligne) ; istringstream tampon (ligne) ; if (tampon >> n >> c) ok = true ; else ok = false ; } while (! ok) ; cout << "merci pour " << n << " et " << c << "\n" ; } donnez un entier bof donnez un entier x 123 donnez un entier 12 bonjour merci pour 12 et et un caractere : et un caractere : et un caractere : b

.5 ertipahc ud 3.6.2 ehpargarap ua soporp e mmargorp ud noitaroilma enu tnemelag icioV .edilavni ertcarac nu tinruo f ruetasilitul euqsrol sulp esop es en e mlborp nucua ,zetatsnoc el suov em moC .)ertcarac nud siup reitne nud etamro f erutcel ici( erutcel ed snoitarpo son snouqilppa suon leuqel rus maertgnisrtsi ep yt ed tejbo nu ,enahc ettec ceva ,etiusne snosiurtsnoc suoN .)engil ed ni f al ed noitpecxel ,sruetar -aps sertcarac sel suot eril riovuop ruop( enilteg noitcno f al ed edial ,sertcarac ed enahc enud e mro f suos ,engil enu etuot ruop eudnetta noitamro fnil drobad tuot snosil y suoN
#include <iostream> #include <sstream> using namespace std ; main() { int n ; bool ok = false ; string ligne ; // pour lire une ligne au clavier do { ok = false ; cout << "donnez un nombre entier : " ; while (! ok) do { getline (cin, ligne) ; istringstream tampon (ligne) ; if (tampon >> n) ok = true ; else { ok = false ; cout << "information incorrecte - donnez un nombre entier : " ; } } while (! ok) ; cout << "voici son carre : " << n*n << "\n" ; } while (n) ;

)1( dradnats ertnel rus tirucs etuot ne eril ruoP

7 - Les possibilits de formatage en mmoire

633

} donnez un nombre entier : 4 voici son carre : 16 donnez un nombre entier : & information incorrecte - donnez un nombre entier : 7 voici son carre : 49 donnez un nombre entier : ze 25 8 information incorrecte - donnez un nombre entier : 5 voici son carre : 25 donnez un nombre entier : 0 voici son carre : 0

)2( dradnats ertnel rus tirucs etuot ne eril ruo P

; eludom : sba : es a b e d s n o it c n o f s e l ; )...=- ,=+ e mmoc esopmoc uo erianidro( noitatce f fal ; / ,* ,- ,+ : selleusu seuqitmhtira snoitarpo sel : etr op m oc lI .elbuod gnol uo elbuod , taolf ,tnattol f ep yt leuq etropmin rap rtmarap ert tuep lI .sex - e l p m o c s er b m o n s e d n o it al u pi n a m e d sl it u o s e h cir s rt e d er f f o x el p m o c ess al c e d n ort a p e L

.stirporp sruel ed seniatrec ed tnesopsid selle is emm ,eritne trap sruenetnoc sed sap tnos en ertipahc ec snad setircd sessalc sel euq neib areton nO .stib ed setius sed tnemecacif fe relupinam ed tnattemrep testib sessalc ed esopsid no ,trap ertuaD .se i c oss a s ess al c s e d te yarra lav sess a lc se d ; x e l p m o c sess a lc se d : tne melleitnesse tigas lI .selllarap uo sleirotcev sruetaluc -lac sed rus noitasilitu nos resirova f te 09 nartroF ed sellec ed senisiov stilibissop ed ++C retod erinam ed ,sruetcev sel rus te sexelp moc serbmon sel rus selleusu seuqita mhtam snoitarpo sel retilica f snitsed sessalc ed snortap seuqleuq er ffo dradnats euqhtoilbib a L

1 La classe complex

Les outils numriques

29

636

Les outils numriques CHAPITRE 29

: stilibissop sec ed trapulp al ed noitasilitud elpmexe nu icioV .t n e m u gra n os e d t e el u d o m n o s e d ri tra p e xe l p m oc erbmon nu eriurtsnoc ed te mrep iuq )ep yt nu rap rtmarap( ralop snoitcnof ed nortap el .gol ,pxe ; hnat ,hnis ,hsoc ; nata ,nisa ,soca ; nat ,nis ,soc : "s et n a d n e cs n art " s n o i t c n o f s el . u g u j n oc e xe l p m oc : j n o c ; eri a ni g a m i ei tr a p : g a m i ; el le r ei trap : l a e r ; tn e m u gra : g r a
#include <iostream> #include <complex> using namespace std ; main() { complex<double> z1(1, 2), z2(2, 5), z, zr ; cout << "z1 : " << z1 << " z2 : " << z2 << "\n" ; cout << "Re(z1) : " << real(z1) << " Im(z1) : " << imag(z1) << "\n" ; cout << "abs(z1) : " << abs(z1) << " arg(z1) : " << arg(z1) << "\n" ; cout << "conj(z1) : " << conj(z1) << "\n" ; cout << "z1 + z2 : " << (z1+z2) << " z1*z2 : " << (z1*z2) << " z1/z2 : " << (z1/z2) << "\n" ; complex<double> i(0, 1) ; // on definit la constante i z = 1.0+i ; zr = exp(z) ; cout << "exp(1+i) : " << zr << " exp(i) : " << exp(i) << "\n" ; zr = log(i) ; cout << "log(i) : " << zr << "\n" ; zr = log(1.0+i) ; cout << "log(1+i) : " << zr << "\n" ; double rho, theta, norme ; rho = abs(z) ; theta = arg(z) ; norme = norm(z) cout << "abs(1+i) : " << rho << " arg(1+i) : " << " norm(1+i) : " << norme << "\n" ; double pi = 3.1415926535 ; cout << "cos(i) : " << cos(i) << " sinh(pi*i): << " cosh(pi*i) : " << cosh(pi*i) << "\n" z = polar<double> (1, pi/4) ; cout << "polar (1, pi/4) : " << z << "\n" ; } ; << theta " << sinh(pi*i) ;

1 iv

.tuafd rap ruetcurtsnoc ud leppa rap ssilaitini tnores sreinred sec ,stejbo sed tnos stneml sel tnod sruetcev ed sac el snaD .0 ssilaitini tnores stneml ses ,euqitats essalc ed tse ruetcev el is ,rueugir etuot nE .2 .euqirmun epyt nu selbacilppa snoitcnof sel setuot ed te sruetarpo sel suot ed tod te noitatcef fad ruetarpo nud ,ruetcurtsed nud ,eipocer rap ruetcurtsnoc nud inum essalc epyt tuot nortap ud epyt ed ertmarap emmoc resilitu tuep no ,tiaf nE .1
yarralav

: noitcurtsnoc ed selp mexe seuqleuq icioV . xelpmoc ep yt nud uo elbuod ,taolf ,tni ,rahc ,loob esab ed ep yt nud tnos stne ml sel tnod sruetcev sed eriurtsnoc tuep nO
1

.)sulp uo xued( snoisne mid srueisulp xuaelbat ed noitalupinam al tnet -ilica f selle ertned seniatrec ; sruetcev ed snoitces sed relupinam ed tnette mrep seriatilitu ses -salc seuqleuq ,ertuo nE .09 nartroF euq let euqifitneics egagnal nu snad evuort nouq sellec selbarapmoc leirotcev luclac ed stilbissop sed reilucitrap ne er ffo lI .seuqirmun xuaelbat ed erid--tsec ,)emret ud euqita mhtam snes ua( sruetcev ed noitalupina m al tpada neib tnemerilucitrap yarralav sessalc ed nortap nud esopsid dradnats euqhtoilbib a L

sexelpmoc serbmon ed noitasilitud selpmexE


z1 : (1,2) z2 : (2,5) Re(z1) : 1 Im(z1) : 2 abs(z1) : 2.23607 arg(z1) : 1.10715 conj(z1) : (1,-2) z1 + z2 : (3,7) z1*z2 : (-8,9) z1/z2 : (0.413793,-0.0344828) exp(1+i) : (1.46869,2.28736) exp(i) : (0.540302,0.841471) log(i) : (0,1.5708) log(1+i) : (0.346574,0.785398) abs(1+i) : 1.41421 arg(1+i) : 0.785398 norm(1+i) : 2 cos(i) : (1.54308,0) sinh(pi*i): (0,8.97932e-011) cosh(pi*i) : (-1,0) polar (1, pi/4) : (0.707107,0.707107)

2.1 Constructeurs des classes valarray

2 La classe valarray et les classes associes

#include <valarray> using namespace std ; ..... valarray<int> vi1 (10) ; /* vecteur de 10 int non initialiss2 valarray<float> vf (0.1, 20) ; /* vecteur de 20 float initialiss 0.1 int t[] = {1, 3, 5, 7, 9} ; valarray <int> vi2 (t, 5) ; /* vecteur de 5 int intialis avec les /* 5 (premires) valeurs de t valarray <complex<float> > vcf (20) ; /* vecteur de 20 complexes valarray <int> v ; /* vecteur vide pour linstant

2 - La classe valarray et les classes associes

*/ */

*/ */ */ */

637

: elp mexe r aP . g nar e m m e d s t ne m l s e d n uc a hc r ue tar po te c t na uq ilppa ne u ne tbo r ue tc e v el tatlusr ne tinruo f elliat em m ed sruetcev xued uqilppa erianib ruetarpo nu ; stneml ses ed nucahc ruetarpo tec tnauqilppa ne unetbo ruetcev el tatlusr ne tinruo f ruetcev nu uqilppa erianu ruetarpo nu : seuqirmun snoitcno f sed te sruetarpo sed elr el tnasilarng ne leirotcev luclac ed selleusu snoitarpo sed reutce ffed tnette mrep yarralav sessalc se L

: ruetcev nud elliat al rei fidom ed temrep eziser erbmem noitcno f a L

: e p yt e m m e d s a p t n os e n s t n e m -l sel is elbissop sap tsen noitatce ffal ,ehcnaver nE .stne mld erb mon e m m el sap tnon slis e m m ,elbissop tse ep yt emm ed tnos stneml sel tnod sruetcev ertne noitatce ffaL

. e ci d ni e m m o c e s il it u r u el a v a l r us e u v r p ts e n n oi t c et or p e n u c u A
valarray <int> vi (5) ; int n, i ; ..... v[3] = 1 ; n = v[i] + 2 ;

: snad em moc ,][ ruetarpol t n a s i l i t u n e e u qi s s a l c n o a f e d s t n e m l s e s r e d c c a t u e p n o , ti u r t s n o c r u e t c e v n u s i o f e n U

.)2iv ed sac el snad em moc( leusu ruetniop nu rap etircd ellec tse ecneuqs ettec is fuas ,ecneuqs enud ritrap ep yt ec ed tejbo nu tne metcerid eriurtsnoc ed elbis -sop sap tsen li ,reilucitrap ne ; ruenetnoc iarv nu sap tsen yarralav essalc al euq areton nO
638
Les outils numriques CHAPITRE 29

2.4 Calcul vectoriel 2.3 Affectation et changement de taille 2.2 Loprateur []


vf3.resize (6) ; vf1.resize(15) ; valarray <float> vf1 (0.1, 20) ; /* vecteur de 20 float gaux 0.1 */ valarray <float> vf2 (0.5, 10) ; /* vecteur de 10 float gaux 0.5 */ valarray <float> vf3 ; /* vecteur vide pour linstant */ valarray <int> vi (1, 10) ; /* vecteur de 10 int gaux 1 */ ..... vf1 = vf2 ; /* OK vf1 et vf2 sont deux vecteurs de 10 float gaux 0.5 /* les anciennes valeurs de vf1 sont perdues vf3 = vf2 ; /* OK ; vf3 comporte maintenant 10 lments vf1 = vi ; /* incorrect : on peut faire : /* for (i=0 ; i<vf1.size() ; i++) vf1[i] = vi [i] ; /* /* /* /* vf1 comporte maintenant 15 lments : les 10 */ premiers ont conserv leur valeur */ vf3 ne comporte plus que 6 lments (leur */ valeur na pas chang) */ */ */ */ */ */

.inifdrus t riova srola tiod iuq

< rotarepo

esilitu no ,stejbo sed tnos stneml sel euqsroL .1

: ser ia l ucr ic se g al ac d s ed ruetce ffed temrep tfihsc erbmem noitcno f al ,ni fnE .orz tnos setnartne sruelav sel ,seud -r e p t n o s s e t n a tr os sr u e l a v s e L .)s e v it a g n sr u e l a v s el r u o p e t i or d al sr e v ,s e vi tis o p sr u el a v sel ruop ehcuag al srev( tne mugra euqinu nos rap uqidni snoitisop ed erbmon nud slacd t tno stne ml sel leuqel snad ,leppa tna yal tejbol euq elliat em m ed ruetcev nu tinruof ellE .ruetcev nud stne ml sed segalacd sed reutce ffed te mrep tfihs erbmem noitcno f a L
int vmax, vmin, t[] = { 3, 9, 12, 4, 7, 6} ; valarray <int> vi (t, 6) ; ..... vmax = max (vi) ; /* vmax vaut 12 */ vmin = min (vi) ; /* vmin vaut 3 */

: r ue tc ev n u d t n e m l ti t e p s ul p el u o d n ar g s ul p e l ri n e t b o d t n e tt e mr e p n i m t e x a m s n o it c n o f s e L
1

: s ne l o o b e d r ue tc e v nu tatlusr ne tnessinruo f iuq te stne mld erb mon e mm ed )yarralav ep yt ed( sednarpo xued tneuqilppas iuq )...=< ,< ,=! ,==( nosiarap moc ed sruetarpo sed tnemelag evuort nO : taolf nu tna yov -ner te taolf nu tnavecer noitcno f enu tse tcf is ,elp mexe raP .ylppa erb me m noitcno f al tnas -ilitu ne ruetcev nud stne ml sel suot xiohc nos ed noitcno f enu reuqilppa em m tuep nO
valarray<float> v1(5), v2(5), v3(5) ; ..... v3 = -v1 ; /* v3[i] = -v1[i] pour i de 0 v3 = cos(v1) ; /* v3[i] = cos(v1[i]) pour i de v3 = v1 + v2 ; /* v3[i] = v2[i] + v1[i] pour i v3 = v1*v2 + exp(v1) ; /* v3[i] = v1[i]*v2[i] + 4 */ 0 4 */ de 0 4 */ exp(v1[i]) pour i de 0 4 */ v3 = v1.apply(fct) ; /* v3[i] = fct (v1[i]) pour i de 0 4 */

int t[] = { 3, 9, 12, valarray <int> vi (t, ..... vig = vi.shift (2) ; vid = vi.shift (-3) ; vic = vi.cshift (3) ;

int dim = ... ; valarray<float> v1(dim), v2(dim) ; valarray<bool> egal(dim), inf(dim) ; ..... egal = (v1 == v2) ; /* egal[i] = (v1[i] == v2[i]) pour i de 0 dim-1 */ inf = (v1 < v2) ; /* inf[i] = (v1[i] < v2[i]) pour i de 0 dim-1 */

4, 7, 6} ; 6), vig, vid, vic ;

/* vi est inchang - vig contient : 12 4 7 6 0 0 */ /* vi est inchang - vid contient : 0 0 0 3 9 12 */ /* vi est inchang - vic contient : 4 7 6 3 9 12 */

2 - La classe valarray et les classes associes

639

640

Les outils numriques CHAPITRE 29

2.5 Slection de valeurs par masque


: snoitaralcd sec ed esopsid nol euq elpmexe rap snosoppuS .tnadnopserroc tne mll )eslaf( non uo )eurt( ennoitcels nol is esicrp stne ml sed nucahc leuqel snad >loob<yar - r a l a v e p y t e d r u e t c e v n u e r i d - - t s e c , e u q s a m n u es il it u n o , er i a f e c r u o P . e l a g u o er u e ir f n i elliat ed ruetcev nu reutitsnoc ed nifa ruetcev nud sruelav sed seniatrec rennoitcels tuep nO
valarray <bool> masque(6) ; /* on suppose que masque contient : /* true true false true false true valarray <int> vi(6) ; /* on suppose que vi contient : /* 5 8 2 7 3 9 */ */ */ */

: elpmexe raP .)9 ,7 ,8 ,5( sreitne ertauq ed ruetcev nud cnod tigas li ,icI .eurt ruelav al a euqsam ed tnadnopserroc tne mll sleuqsel ruop iv ed stne ml slues sed mro f ruetcev nu engisd ]euqsam[iv noisserpxeL
valarray <int> vi1 ; ..... vi1 = vi[masque] ; /* vecteur vide pour linstant */ /* vi1 est un vecteur de 4 entiers : 5, 8, 7, 9 */

: sussed-ic euq snoitaralcd se mm sel tnas - il i t u s el p m e x e x u e d i c i o v n E . e u l a v l e m m o c e l b a s il i t u e t s er n oi t a t o n el l e t e n u , t s e s u l p i u Q


vi[masque] = -1 ; /* place la valeur -1 dans les lments de vi pour /* lesquels la valeur de llment correspondant de masque est true valarray<int> v(12, 4) ; /* vecteur de 4 lments vi[masque] = v ; /* recopie les premiers lments de v dans les /* lments de vi pour lesquels la valeur de /* llment correspondant de masque est true */ */ */ */ */ */

: stilibissop setner ffid sec tnartsulli telpmoc e mmargorp ed elpmexe nu icioV


#include <iostream> #include <valarray> #include <iostream> #include <iomanip> #include <valarray> using namespace std ; main() { int i ; int t[] = { 1, 2, 3, 4, 5, 6} ; bool mt[] = { true, true, false, true, false, true} ; valarray <int> v1 (t, 6), v2 ; // v2 vide pour linstant valarray <bool> masque (mt, 6) ; v2 = v1[masque] ; cout << "v2 : " ; for (i=0 ; i<v2.size() ; i++) cout << setw(4) << v2[i] ; cout << "\n" ; v1[masque] = -1 ; cout << "v1 : " ; for (i=0 ; i<v1.size() ; i++) cout << setw(4) << v1[i] ; cout << "\n" ;

2 - La classe valarray et les classes associes

641

valarray <int> v3(8) ; /* il faut au moins 4 elements dans v3 */ for (i=0 ; i<v3.size() ; i++) v3[i] = 10*(i+1) ; v1[masque] = v3 ; cout << "v1 : " ; for (i=0 ; i<v1.size() ; i++) cout << setw(4) << v1[i] ; cout << "\n" ; } v2 : v1 : v1 : 1 2 -1 -1 10 20 4 6 3 -1 3 30

5 -1 5 40

2.6 Sections de vecteurs


: is n ia ra lc d tse v is , elp me xe raP .ruetcev nud tiassigas lis emmoc relliavart tuep no leuqel rus ruetcev nud stne ml sed elb mesne-suos nu isnia e mmon no ; sruetcev ed snoitces sed rini fd ed elbissop tse lI

valarray <int> v(12) ;

: eulavl em moc elbasilitu tse noitaton ellet enu ,erocne L .)2 ed sap rap tnassergorp ne ,sruelav 4 erdisnoc no ,0 ed trap no( 6 te 4 ,2 ,0 gnar ed stnem -l sel euq v ed tnardisnoc en ne unetbo ruetcev el engisd ])2 ,4 ,0(ecils[v noisserpxel

v1 [slice(0, 4, 2)] = 99 ;

: stilibissop sec tnartsulli telp moc em margorp ed elpmexe nu icioV

#include <iostream> #include <iomanip> #include <valarray> using namespace std ; main() { int i ; int t [] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ; valarray <int> v1 (t, 10), v2 ; cout << "v1 initial : " ; for (i=0 ; i<v1.size() ; i++) cout << setw(4) << v1[i] ; cout << "\n" ; v1[slice(0, 4, 2)] = -1 ; // v1[0] = -1, v1[2] = -1, v1[4] = -1, v1[6] = -1 cout << "v1 modifie : " ; for (i=0 ; i<v1.size() ; i++) cout << setw(4) << v1[i] ; cout << "\n" ; v2 = v1[slice(1, 3, 4)] ; // on considre v1[1], v1[5] et v1[9] cout << "v2 : " ; for (i=0 ; i<v2.size() ; i++) cout << setw(4) << v2[i] ; cout << "\n" ; }

seuqsam ed noitasilitud elpmexE


/* place la valeur 99 dans les lments */ /* v1[0], v1[2], v1[4] et v1[6] */

: isnia sralcd tnos fv te secidni sruetcev sel is ,elp - mexe raP . secidnid ruetcev nu e mmon nol euq ec tnaruocer ne seuqnocleuq snoitces s e d ri n et b o is s u a t u e p n O .s er t u a s e d s n u s el s c a ps e t n e m er i l u g r t n os s n n oi t c e l s s t n e m -l sel o erusem al snad ,serilugr setid tnos ecils rap seunetbo sruetcev ed snoitces se L

. e c il s ed ecalp al ecilsg tnasilitu ne seunetbo ,selpitlum snoitces ed noiton al riruocer tne m - el a g t u e p n o ,s a c r e i nr e d e c s n a D .s n o is n e mi d x u e d e d s ul p x u a e l b a t s e d iss u a s i a m ,secirta m sed tnemelues non relupinam ed erttemrep tuep ruetcev ed noitces ed noiton a L

: t a m e c irt a m a l e d j e n n o l o c a l s n a d v r u et c e v el r e i p o c er : t a m e c irt a m a l e d j e n n o l o c al s n a d 5 1 r u el a v a l r e c al p : tam ecirtam al ed i engil al snad 21 ruelav al recalp : s n o it c e s ed noitasilitul rap setilica f snoitarpod selpmexe seuqleuq iciov , tam ruetcev el snad ecirtam erton ed stneml sel regnar ruop C ud snoitnevnoc sel resilitud tneivnoc nol iS
#define NLIG 5 #define NCOL 12 ..... valarray <float> v(NLIG) ; valarray <float> mat (NLIG*NCOL) ; /* vecteur de NLIG lments */ /* pour reprsenter une matrice */ mat [slice (i*NCOL, NCOL, 1)] = 12 ; mat [slice (j, NLIG, NCOL)] = 15 ;

: s e n n o l o c L O C N e d t e s e n gi l G I L N e d e c i r t a m e n u r e t n e s r p e r r i v r e s t n e v u e p s t n e m l L O C N * G I L N s e l t n o d r u et c e v n u ts e t a m selleuqsel snad snoitaralcd sec snordisnoC .secirtam sed reilucitrap ne te snoisne mid xued xuaelbat sed relupinam ruop selitu rervas tnevuep sruetcev ed snoitces sel euq areton nO
sruetcev ed snoitces ed noitasilitud elpmexE
v1 initial : v1 modifie : v2 : 0 -1 1 1 2 1 -1 5 9 3 4 3 -1 5 6 5 -1 7 7 8 8 9 9

642

2.7 Vecteurs dindices

Les outils numriques CHAPITRE 29

valarray <float> vf(12) ; valarray <int> indices (5) ; /* on suppose que indices contient les */ /* valeurs : 1, 4, 2, 3, 0 */ mat [slice (j, NLIG, NCOL)] = v ;

e uqrameR

.sesimrep setimil sel snad sap tsen ednarpo dnoces nos is egnar_fo_tuo n oi t p e c x e e n u e h c n e l c d l i ; ][ r u et ar p ol e d e di al et i us a l e d t i b n u r e d c c a t u e p n O .sre it n e s e d s uq ilpp a sr ue tar po s e m m s el e m m oc t n e nn o it -cno f iuq =! ,== ,=~ ,=>> ,=<< , =| ,=& ,~ ,| ,& sruetarpo sed edial stib sed elabolg noital -upinam ed seuqissalc snoitarpo sed tne mmaton esopsid nO .elliat e m m ed setius ertneuq elbissop cnod tsen noitatcef faL .nortap ud )noisserpxe( ertmarap ne tarappa N elliat al tnod stib ed setius sed tne mecaci ffe relupinam ed temrep >N<testib sessalc ed nortap e L

.)sio f xued i fidom tse tne ml emm nu ,euqitarp ne( ni mretdni tse e mmargorp ud tnemetropmoc el ,sac ec snad : ecidnid ruetcev el snad sio f xued erugi f en ecidni e m m nuuq retiv tua f li ,erdnetta ys tuep no em moc ,ehc -naver nE .)2fv euq stnemld sniom retropmoc tuep ecidnid ruetcev el( snnoitne m secidni sel rap snrecnoc tneios 2fv ed stne ml sel suot euq eriassecn sap tsen liuq areton nO
secidnid sruetcev ed noitasilitud elpmexE
1 5.4 4 1.25 2 5.2 3 8.3 0 2.5

: stilibissop sec tnartsulli telp moc em margorp ed elpmexe nu icioV .eulavl emmoc esilitu ert tuep noitaton ettec ,erocne L .0 ,3 ,2 ,4 ,1 ici erid--tsec ,secidni secidnid ruetcev el rap nnoitnem erdrol tnavius 2fv ed stneml sel tnardisnoc ne unetbo ruetcev el engisd ]secidni[v noisserpxel
643

3 La classe bitset
} #include <iostream> #include <iomanip> #include <valarray> #include <cstdlib> // pour size_t using namespace std ; main() { size_t ind[] = { 1, 4, 2, 3, 0} ; float tf [] = { 1.25, 2.5, 5.2, 8.3, 5.4 } ; int i ; valarray <size_t> indices (ind, 5) ; // contient 1, 4, 2, 3, 0 for (i=0 ; i<5 ; i++) cout << setw(8) << indices[i] ; cout << "\n" ; valarray <float> vf1 (tf, 5), vf2(5) ; vf2[indices] = vf1 ; // affecte vf1[i] vf2 [indices[i]] for (i=0 ; i<5 ; i++) cout << setw(8) << vf2[i] ; cout << "\n" ;

3 - La classe bitset

644

Les outils numriques CHAPITRE 29

: sessalc ed snortap sec ed stilannoitcno f sed trapulp al tnartsulli elpmexe nu icioV .s n oisr e v n o c e d s t il i bis s o p x u a e c r g ) e t n a ts n o c e n u t n e m - maton( elleusu enahc enu resilitu issua tuep no ; )gnirts( sertcarac ed enahc enud ritrap ; t ne m ugr al snad unetnoc erianib fitom ua tnadnopserroc etius al tneitbo no : gnol dengisnu nud ritrap ; s l u n st i b e d et i u s e n u t n ei t b o n o : t n e m u gr a s n as : sr ue tc urt sn o c s i ort e tsi x e l I
#include <iostream> #include <bitset> using namespace std ; main() { bitset<12> bs1 ("1101101101") ; long n=0x0FFF ; bitset<12> bs2 (n) ; bitset<12> bs3 ; cout << "bs1 = " << bs1 << "\n" ; cout << "bs2 = " << bs2 << "\n"; cout << "bs3 = " << bs3 << "\n" ; if (bs3 != bs1) cout << "bs3 differe de bs1\n" ; bs3 = bs1 ; // affectation entre bitset de mme taille cout << "bs3 = " << bs3 << "\n" ; if (bs3 == bs1) cout << "bs3 est maintenant egal a bs1\n" ; cout << "bit de rang 3 de bs3 : " << boolalpha << bs3[3] << "\n" ; bs3[3] = 0 ; cout << "bit de rang 3 de bs3 : " << boolalpha << bs3[3] << "\n" ; try { bs3[15] = 1 ; // indice hors limite --> exception } catch (exception &e) { cout << "exception : " << e.what() << "\n" ; } cout cout cout cout cout << << << << << bs3 << " & " << bs2 << " = " ; bs3 &= bs2 ; cout bs3 << " | " << bs2 << " = " ; bs3 |= bs2 ; cout "~ " << bs3 << " = " << ~bs3 << "\n" ; "dans " << bs3 << " il y a " << bs3.count() << " bs3 << " decale de 4 a gauche = " << (bs3 <<= 4) << bs3 << "\n" ; << bs3 << "\n" ; bits a un\n" ; << "\n" ; // bitset initialise par une chaine // bitset initialise par un entier // bitset initialise a zero bitset<14> bs4 ; // bs4 = bs1 ; serait incorrect car bs1 et bs4 nont pas la mme taille }

3 - La classe bitset

645

bs1 = 001101101101 bs2 = 111111111111 bs3 = 000000000000 bs3 differe de bs1 bs3 = 001101101101 bs3 est maintenant egal a bs1 bit de rang 3 de bs3 : true bit de rang 3 de bs3 : false exception : invalid bitset<N> position 001101100101 & 111111111111 = 001101100101 001101100101 | 111111111111 = 111111111111 ~ 111111111111 = 000000000000 dans 111111111111 il y a 12 bits a un 111111110000 decalle de 4 a gauche = 111111110000

testib sessalc ed nortap ud noitasilitud selpmexE

. st na d n o pserr oc s el o b m ys se l r esi l it u t ne m m oc te s m o n e d s ec a pse x u ae v u o n sr u ei s u l p u o n u r er c t n e m m o c rer t n o m s u o v s n ol la s u o n , i cI

.s e m y no n a s m on ed secapse sel te gnisu noitcurtsnil ed tivitisnart al ,s mon ed secapse sed noitacirb mil tnan -recnoc seriatne mlp moc snoita mro fni seuqleuq snoretroppa suon ,ni fnE .smon ed secapse s e d s et i m il s el t i h c n ar f s n oi t c n o f s e d n oi t i n i f dr us a l t n e m m o c e ti us n e s n or er t n o m s u o N .) d t s e c a p s e m a n g n i s u c e v a t n e m el l e u t c a s e ti a f e l s u o v e m m o c( e m m-i u l s m o n e d e c a ps el t n at i c ne tios ,snrecnoc selobm ys sel sio f elues enu tnatic ne tios ,snoitaton sel rei filpmis ed temrep gnisu noitcurtsnil tne mmoc snorrev suon siuP .tneitnoc liuq selob m ys sel rengisd tnem - m o c t e s m o n e d ec a pse le v u o n n u ri n i f d t n e m m o c r ert n o m s u o v r a p s nor ec n e m m o c s uo N . fidrat issua raps ertipahc nu snad elliatd noitatnesrp as eif -itsuj iuq ec tseC .seuqhtoilbib ed uo se mmargorp sorg ed tnemeppolevd ed erdac el snad trtni nu tuotrus etnesrp noiton etteC .stner ffid s mon ed secapse xued tnenneitrappa selleuq uep ruop )essalc enu elpmexe rap ,esohc e m m enud setnerf fid snoisrev xued uo( setner ffid sesohc xued rengisd ruop ruetaci fitnedi emm el resilitud elbissop isnia tneived lI .snrecnoc selob m ys sel rei filauq ruop esilitu nouq mon nu rap rper tnat elbmesne euq -ahc ,sruetaci fitnedid stniojsid selb mesne sed rini fd ed te mrep elle ,elarng erina m enuD .++C ud dradnats euqhtoilbib al tnemelbanevnoc resilitud erttemrep suov ed ni fa ,2 ertipahc ud 9.1 ehpargarap ua tnemetcniccus etnesrp t a smon ed ecapsed noiton a L

1 Cration despaces de noms

Les espaces de noms

30

648

Les espaces de noms CHAPITRE 30

1.1 Exemple de cration dun nouvel espace de noms


: s n oi t c ur ts ni s e c s n or d is n o C
namespace A // les symbole dclars partir dici // appartiennent lespace de noms nomm A

{ int n ; double x ; class point { int x, y ; public : point (int abs=0, int ord=0) : x(abs), y(ord) {} } ; } // fin de la dfinition de lespace de noms A

: selp mexe seuqleuq icioV .::A irporppa exifrp nud noitasilitul tnanne yo m euq colb ec ed rueir -txel selbasilitu tnores en stnadnopserroc selob m ys sel ,ehcnaver nE .erirc sel ed erina m al sap ei fido m en smon ed ecapse nu snad tnerugi f snoitaralcd sec euq tia f e L .)tniop( essalc ed noitini fd ed te )x te n( selbairav ed sep yt ed ici ,selleusu snoitaralcd sed evuort no

.n::A te n sruetaci fitnedi sel tnemetniojnoc resilitu snovuop suon euq elgr ettec ecrg sruelliad tseC .ecruos reihci f emm el snad evuort es nol is emm ,A smon ed ecapsel ed noitini fd al ed etrop al ed srohed ne tse nouq srol sd eriassecn tse ::A exi frp el euq neib areton nO

: i ci u qs uj t i a f s n o v al s u o n e m m o c ,s m o n e d e c a ps e t u ot e d sr oh e d ne sra lc d s el o b m ys se d c e va e m l b or p s na s re ti ba h o c t n ev u e p se l o b m ys s e C

: c olb u d ru eir t n il A
namespace A { ..... } // la dfinition de A est suppose connue ici main() { A::x=2.5 ; // utilise la variable globale x dclare dans A A::point p1 ; // on utilise le type point de A A::point p2 (1, 3) ; // idem A::n = 1 ; // on utilise la variable globale n dclare dans A } // la dfinition de A est suppose connue ici long n ; // variable globale n, sans rapport avec A::n ; main() { double x ; // variable x, locale main, sans rapport avec A::x A::x = 2.5 ; // utilise toujours la variable globale x dclare dans A point p ; // incorrect : le type point nest pas connu A::n = 12 ; // utilise la variable globale n dclare dans A n = 5 ; // utilise la variable globale n dclare en dehors de A }

.tugibma enu revel ruop esilitu tuotrus ares emrof etteC .2 .)7 ehpargarap ua etnesrp( emynona ecapsed ellec ceva labolg ecapsed noiton ettec sap ardnofnoc en nO .1
main() { A::point pA1(3) ; // OK : utilise le type point de A B::point pB1 ; // OK : utilise le type point de B B::point pb2 (3) ; // erreur : pas de constructeur un argument // dans le type point de B A::x = 2.5 ; // utilise la variable globale x de lespace A B::x = 3.2 ; // utilise la variable globale x de lespace B }

: B te A s m - m o n s m o n e d se ca ps e x ue d t na si li t u te t n assi n i f d s n o it c urts n i s ec t n a n e t n ia m s n or d is n o C

.t n a d n o ps err o c e x i f r p el r es il i t u ri o va d t na ti v ne ,s m o n e d s ec a pse se d s na d s i ni f d se l o b m ys e d n oi ta si li t ul r ei f il p mis ed tnettemrep gnisu noitcurtsnil ed se mro f xued sel euq 2 ehpargarap ua snorrev suoN

. n : : u o x : : e mr o f al suos sngisd issua ert sruelliad tneiarruop selob m ys seC . labolg ecapsel tnenneit -ra p pa sl i u q s m o n e d e ca ps e t u ot e d sr o h e d ne s ra lc d x u o n e m m o c se l o b m ys s e d t i d n O
2 1

1.2 Exemple avec deux espaces de noms

namespace B // dbut dfinition espace de noms B { float x ; class point { int x, y ; public : point () : x(0), y(0) {} } ; } // fin dfinition espace de noms B namespace A // dbut dfinition espace de noms A { int n ; double x ; class point { int x, y ; public : point (int abs=0, int ord=0) : x(abs), y(ord) {} } ; } // fin dfinition espace de noms A

e uqrameR

1 - Cration despaces de noms

649

.reuqirbmis tnevuep smon ed secapsed snoitinifd sel euq 4 ehpargarap ua siofetuot snorrev suoN .1

: t n a y o v r p n e , n o it i ni f d r u e l e d s n oi t -cno f sed te sessalc sed noitaralcd al reicossid ed elbar frp tnadnepec tse li ,sac ec snaD
namespace A // dbut dfinition espace de noms A { class point { int x , y ; public : point () ; // dclaration constructeur void affiche () ; // dclaration fonction membre affiche } ; point::point() { // dfinition du constructeur de A::point } void point::affiche() { // dfinition de la fonction affiche de A::point } void f (int n) { // dfinition de f } } // fin dfinition espace de noms A main() { intx ; namespace A { ..... } ..... }
1

: elp me xe t ec s na d e m m oc ,s ess al c ed uo snoitcno f ed snoitinifd sed re mre fner tuep s mon ed ecapse nu ,dnetta ys no e mmoC
// incorrect

: n o it c n o f e n u d uo essalc enud nies ua reutce ffel ed si mrep sap )tnemesuerueh( tsen lI . labolg uaevin nu ueil sruojuot a smon ed ecapse nud noitini fd al euq reuqra mer drobad tuot tua f lI

: r uerr e e n u ari u d n oc e vi tc eri d e tt ec e d ec n es ba l ,srolauq neib areton no ; edulcni# evitcerid enu rap tne meuqissalc areroprocni nouq ett-ne reihci f nu snad arerugi f smon ed ecapse nud noitini fd al : isnia siamaj tnemeuqitarp ari nen liuq ios ed av lI .ecruos reihci f e m m el snad tneiavuort es stnadnopserroc selob m ys sed noit -asilitul te smon ed ecapsel ed noitini fd al ,noitcudortnid selp mexe stnedcrp son snaD

650

1.4 Instructions figurant dans un espace de noms 1.3 Espace de noms et fichier en-tte
Les espaces de noms CHAPITRE 30
main() { A::x = 2 ; // si la dfinition de lespace de noms A na pas t // compile ce niveau, on obtiendra une erreur ..... }

1 - Cration despaces de noms

651

1.5 Cration incrmentale despaces de noms


: e l p m e x e r a P .s i o f sr u e is ul p n e s m o n e d e c a ps e e m m n u r i n i f d e d el b iss o p ti a f t u o t ts e lI
namespace A { int n ; } namespace B { float x ; } namespace A { double x ; }

: s es s a l c s e d t e s n oi t c n o f sed snoitaralcd xua etimil ,s mon ed ecapsel ed noitini fd al tnanetnoc ett-ne reihci f nu
// fichier en-tte A.h // dclaration des symboles figurant dans lespace A namespace A // dbut dfinition espace de noms A { class point { int x , y ; public : point () ; // dclaration constructeur void affiche () ; // dclaration fonction membre affiche } ; void f (int n) ; // dclaration de f } // fin dfinition espace de noms A

: s n o it c n o f se d t e s ess al c s e d n oi ti n i f d al t n a ne t n o c ecr u os r ei hc i f n u
// dfinition des symboles figurant dans lespace A #include "A.h" // incorporation de la dfinition de lespace A void A::point::point() { // dfinition du constructeur de A::point } A::point::affiche() { // dfinition de la fonction affiche de A::point } void f (int n) { // dfinition de la fonction f }

etnelaviuq ici tse noitini fd etteC


namespace A { int n ; double x ; } namespace B { float x ; }

: el p m e x e n u i ci o v n E .) e u n n o c e s o p p u s ts e n o i ti ni f d al tnod( smon ed ecapse nu tnanetrappa elob m ys nu retic ed te mrep gnisu noitaralcd a L


2.1.1 Prsentation gnrale

.dnoces el snad gnisu evitcerid ed te sac reimerp el snad gnisu noitaralcd ed tnevuos elrap no ; etner ffid erina m ed sia m ,gnisu lc tom el tnesilitu xued sel setuoT .e m m-iul s mon ed ecapsel retic ed etnetnoc es nol o ertual ; r es il i t u er is d n o u q s e l o b m y s s e d n u c a h c si o f e n u e m m o n n ol o e n ul : erutircl regrbad snoa f xued er ffo ++C ,tia f nE .e mmargorp s or g n u s na d s m o n e d s ec a pse x u a t ne me u qi ta m ts ys tr u oc er n o u qsr o l es ue i di tsa f ri n e v e d sio fetuot tuep edohtm etteC .)x::A snad e mmoc( ecapsel ed mon el rap tne meticilpxe tnai fil -auq el ne s mon ed ecapse nu snad ini fd elob m ys nu resilitu tne mmoc riov ed snonev suoN

...ertua enu eroprocni ne >rotcev< edulcni# evitcerid enu ; dts smon ed ecapsel ed elleitrap noitini fd enu tia f ne eroprocni >maertsoi< edulcni# euq ellet evitcerid enU .dts smon ed ecapsel snad sini fd tnos selob m ys sel tnod dradnats euqhtoilbib al ceva t i u d or p es i u q e c t n e m et c a x e sr u e ll i a d ts e C .s e li t u s n oi t i n i f d s el u es s el e u q er i u d or t n i n isnia tuep ruetasilituL .elb mesnel ruop smon ed ecapse lues nuuq tnasilitun ne tuot ,setnad -nepdni tnemevitaler seitrap srueisulp ne repuocd al ed temrep elle ,te ffe nE .euqhtoilbib enud sac el snad etnassertni tnememrtxe ervas elatnemrcni noitarc ed tilibissop etteC
namespace A { int n ; } namespace B { float x ; } double A::x ; // erreur

: er i n a m e m m e tt e c e d r u e t a c i f i t n e di l e v - u o n n u r er al c d e d el b iss o p s a p ts e n l i ,) 4. 1 e h p ar g ar a p ri o v( r u eir t x el i ni f d ert e ti us n e tuep smon ed ecapse nu snad ralcd ruetaci fitnedi nu is euq relangis tua f li ,soporp ec
652
Les espaces de noms CHAPITRE 30

2.1 La dclaration using pour les symboles

2 Les instructions using

namespace A { int n ; double x ; class point { int x, y ; public : point (int abs=0, int ord=0) : x(abs), y(ord) {} } ; }

2 - Les instructions using

653

using A::x ; // dornavant, x est synonyme de A::x using A::point ; // dornavant, point est synonyme de A::point long n ; // variable globale n, sans rapport avec A::n ; main() { x = 2.5 ; // idem A::x = 2.5 n = 5 ; // n dsigne la variable globale, sans rapport avec A::n A::n = 10 ; // correct point p1 (3) ; //idem A::point p1 (3) ; }

: smon ed secapse srueisulp tnasilitu elpmexe ertua nu icioV .labolg uaevin nu sini fd sruojuot tnos s mon ed secapse sel euqsiup xuabolg selob m ys sed euq enrecnoc en elle ,elacol tse gnisu euqsrol emm ,udnetne neiB

: e l p m e x e t e c s n a d e m m o c , e l a c o l ert t u e p g n i s u n oi tar al c d a L
namespace A { int n ; double x ; } long n ; // variable globale n, sans rapport avec A::n main () { using A::n ; ..... // ici, n est synonyme de A::n } void f (...) { ..... // ici n nest plus synonyme de A::n, mais de ::n } namespace A { int n ; double x ; class point { int x, y ; public : point (int abs=0, int ord=0) : x(abs), y(ord) {} } ; } namespace B { float x ; class point { int x, y ; public : point () : x(0), y(0) {} } ; } using A::n ; // n sera synonyme de A::n using B::x ; // x sera synonyme de B::x

654

Les espaces de noms CHAPITRE 30

main() { using B::point ; n = 2 ; x = 5 ; A::x = 3 ; point pB1 ; A::point pA1(3) ; } void f() { using A::point ; // using A::x ; // point p (2); // }

// // // // // //

point sera (localement) synonyme de B::point idem A::n = 2 ; idem B::x = 5 ; correct idem B::point pB1 ; correct

point sera (localement) synonyme de A::point x sera (localement f) synonyme de B::x idem A::point p (2) ;

2.1.2 Masquage et ambiguts

: s n a d e m m o c , t u g -ibmad rerc sap tiod en e m ynon ys nud noitaralcd al ,etrop emm enu snad ,ehcnaver nE

. se lob m y s s e d e ppo l ev d noitaton al tnaruocer ne evel ert sruojuot tuep tugibmad erneg ec euq neib areton nO

. n o it i ni f dr us e d s ti li b iss o p s e l r e vr es r p e d ni f a ,s n oi t c n o f s e d sa c el s n a d s a p are tsi x e n t u g i b m a d n oi t o n et te c , 3 e h par gar a p u a arre v e l n o e m m o C

: e t na b ol g ne e tr o p e n u d ert u a n u r e h ca c n e t u e p e m y n o n ys n u , d ne t ta ys n o e m m o C
// les dfinitions des espaces de noms A et B sont supposes connues ici using A::x ; ..... // ici x est synonyme de A::x main() { using B::x ; ..... // ici x est synonyme de B::x ; on peut toujours utiliser A::x } using A::x ; ..... using B::x ; // x est synonyme de A::x // x ne peut pas galement tre synonyme de B::x // dans la mme porte

e uqrameR

: snad uo

void g() { float x ; using A::x ; // incorrect : on change la signification de x ..... }

: elp me xe tec ze yoV .ugibma elob m ys nud noitasilitud evitatnet al ed srol euq )noitalipmoc ed( ruerre enu tituoban no ,sio f ettec ,euq reton tnadnepec tua f lI .tugib mad sac ne regatrapd sel ed ettemrep en tiroirp euqnocleuq enuuq snas ,tnelumuc es gnisu sevitcerid setner ffid se L
namespace A { int n ; double x ; } float x ; main () { using namespace A ; ..... // ici, n est synonyme de A::n } void f (...) { // ici, x est synonyme de ::x }

: elpmexe rei merp nu icioV . n oi tc e ls e d r er p o s u l p arr u o p e n no ,rs neib ,sia m ,smon ed ecapse nud selob m ys sel suot resilitu riovuop av no ,gnisu evit -cerid elues enu cevA .elob m ys rap noitcurtsni enu resilitud eriassecn tse li sia m ; smon ed ecapse nu snad resilitu etiahuos nouq selobm ys sel risiohc tuep no ,gnisu noitaralcd al cevA

2.2 La directive using pour les espaces de noms

namespace A { int n ; double x ; class point { int x, y ; public : point (int abs, int ord) : x(abs), y(ord) {} // constructeur 2 arg } ; } namespace A { int n ; double x ; class point { int x, y ; public : point (int abs=0, int ord=0) : x(abs), y(ord) {} } ; } using namespace A ; // tous les symboles dfinis dans A peuvent tre // utiliss sans A:: main() { x = 2.5 ; // idem A::x = 2.5 n = 5 ; // idem A::n = 5 A::n = 10 ; // toujours possible point p1 (3) ; //idem A::point p1 (3) ; }

: e l a c o l e r t t u e p g n i s u e v i t c e r i d a l , g n i s u n o it a r a l c d a l e m m o C

2 - Les instructions using

655

: c e v a , i s n i a ; er d r o l r e sr e v n i n e s a p e n e dr a g er d n er p n e i b t u a f l I : s n o i t c u r ts n i x u e d s e c t n e s i l i t u s e m m ar g or p e d s e l p m e x e s o n e d t r a p u l p a l e u q z e t o N 2 .)ruetcurtsnoc( noitcno f enud mon el rus sap non te ,tniop essalc ed mon el rus tiatrop tugib mal ,tnedcrp elpmexel snad ,euq soporp e c ar et o n n O . n oi ti n i f dr us e d s t i li b iss o p s el r e vr e s r p e d ni f a ,s n o i t c n o f s e d s a c e l s n a d sap aretsixen tugib mad noiton ettec ,3 ehpargarap ua arrev el no emmoc te ,erocne L 1
#include <iostream> using namespace std ;

: tnemmedcrp euq B te A s mon ed secapse semm sel ceva ,elpmexe raP .etlpmoc al elle ; etnabolgne etrop enud evitcerid enu sap eutitsbus es en ennod etrop enu snad eutis evitcerid enU .sulp etsixen egauqsa m ed noiton al ,gnisu evitcerid al cevauq areton nO : elp mexe rap ,snrecnoc selobm ys sel tne meticilpxe tnaxi frp ne revel al ed elbissop sruojuot etser li ,udnetne neiB .tugibma y li ,B te A snad sio f al sini fd tnat x te tniop selob m ys sel ,ehc - n a v er n E . A e c a ps el s n a d e u q i n i f d ts e n li r a c , t u g i b m a e n u c u a e t n e s r p e n n e l o b m y s e L
namespace B { float x ; class point { int x, y ; public : point () : x(0), y(0) {} // constructeur 0 arg } ; } using namespace A ; using namespace B ; main() { n = 2 ; // idem A::n = 2 ; point p1 (3, 5) ; // ambig : A::point ou B::point x = 5 ; // ambig : A::x ou B::x } A::point p1 (3, 5) ; B::x = 5 ;

656

Les espaces de noms CHAPITRE 30

// mmes dfinitions des using namespace A ; main() { using namespace B ; n = 2 ; point p1 (3, 5) ; x = 5 ; }

using namespace std ; #include <iostream>

se uqrameR

// idem A::n = 2 ; // toujours ambigu : A::point ou B::point // ambigu : A::x ou B::x espaces de noms A et B que prcdemment

.dts rap tuoc te nic stolf ed smon sel rexifrp ed eriassecn srola tse li ,snoitidnoc sec snad ; dts ecapseman gnisu noitcurtsnid silitu sap snovan suon ,tralc ed icuos rap ,icI .1

.)A ecapseman gnisu ceva rs neib ,tiares el elle( f::A gnisu evitcerid e l u e s a l e d s i a i b e l r a p , n i a m s n a d el b iss e c c a t n a t u a r u o p s a p t i ar es e n e l l e , A e c a p s e l s n a d ei n i f d ti at g n oi t c n o f e n u , t n e d c r p el p m e x e l s n a d , is : s ert u a s el s a p ti u d ort n i n m o n e d ecapse nud noitcnof ed mon nud noitcudortnil ,erdnetta ys tuep no em moc ,ehcnaver nE
)1( snoitcnof ed noitinifdrus te smon ed secapsE
f(int) f(char)

: n oi t c n o f et t e c e d s n o it ar a l c d sel setuot tne mnatlu mis tiudortni smon ed ecapse nud noitcno f ed mon nud noitcudortniL

. d t s s m o n e d e c a p s e l e d ) e l l e i tr a p( n oitini fd enu jd tneit noc rotcev ett-ne reihci f el rac ,ruerre d sulp tiardneitb on no
#include <vector> using namespace std ; #include <iostream>

: snoitcurtsni sec ce va ,ehcna ver nE .)maertsoi e m moc ett-ne srei hci f sed n u c a h c s n a d , e l a t n e m r c n i n o a f e d , i n i f d t s e l i( t n a t s i x e n i ) d t s ( s m o n e d e c a p s e n u t i ar e n n o i t n e m g n is u n o i t c u r ts n i l e u q e c e u d n o i t a l i p m o c e d r u er r e e n u t i a r d n e i t b o n o
657

3 Espaces de noms et recherche de fonctions

using A::f ; // on aurait la mme chose ici avec using namespace A main() { int n=10 ; char c=a ; f(n) ; f(c) ; } #include <iostream> namespace A { void f(char c) { std::cout << "f(char)\n" ; } // std car pas de using1 void f(int n) { std::cout << "f(int)\n" ; } }

3 - Espaces de noms et recherche de fonctions

658

Les espaces de noms CHAPITRE 30

.)egatirhl ruop tiudorp es iuq ec tnemeriartnoc( smon ed secapse sel tihcnarf einifdrus noitcno f enud ehcrehcer al euq siofrap tid nO .1

: zerdisnoC .s fitce ffe stne mugra ses ed s mon ed secapse sel retuoja tua f li ,noitcno f ed leppa nud noitulosr al snad srdisnoc ertd selbitpecsus smon ed secapse stner ffid xuA

: l a b o l g e c a ps el s n a d e u q is ni a ,smon ed secapse xued snad eini fd tse f noitcno f al o elpmexe nu icioV . selbissecca jd mon emm ed snoitcno f sertua sel sap euqsa m en noitcno f ed e m ynon ys nud noitcudortniL
#include <iostream> namespace A { void f(char c) { std::cout << "A::f(char)\n" ; } void f(float x) { std::cout << "A::f(float)\n" ; } } namespace B { void f(int n) { std::cout << "B::f(int)\n" ; } } void f(double y) { std::cout << "::f(double)\n" ; } using A::f ; // idem avec using namespace A using B::f ; // idem avec using namespace B main() { int n=10 ; char c=a ; float x=2.5 ; double y=1.3 ; f(n) ; f(c) ; f(x) ; f(y) ; } B::f(int) A::f(char) A::f(float) ::f(double) namespace A { class C { ..... } void f(C) { ..... } main() { using A::C ; // C c ; f(c) ; // // }

)2( snoitcnof ed noitinifdrus te smon ed secapsE

; } ;

introduit la classe C recherche dans espace courant et dans celui de c (A) appelle bien A::f(C) comme si on avait fait using A::f

.tugibma enu tiariudnoc enatlumis noitasilitu ruel ,udnetne neiB .1

.s u qir b mi s e c a ps e s e d s m o n s e l e c i f f o d sap tiudortnin gnisu snad ecapse nud mon el retic ed tia f el euq ertno m elp mexe reinred eC
using namespace A ; // ici x na pas de signification (ni ::x ni A::x nexistent) // B::x dsigne A::B::x using namespace A::B ; // on peut prfixer les symboles par A::B:: // ... ici n dsigne A::B::n using namespace A ; // on peut prfixer les symboles par A:: // ... ici n dsigne A::n using A::n ; // n sera synonyme de A::n using A::B::n ; // n sera synonyme de A::B::n
1

: s na d er oc ne uo : s n ad uo

: snad emmoc ,gnisu sevitcerid sed riruocer arruop no ,erinam e m m al eD : s n o it a r a l c d sec ed enul resilitu arruop no ,emm eD .::B::A uo ::A sexi frp sel tnasilitu ne stnadnop -serroc selob m ys xua rer fr es tnemellerutan tuot arruop no ,snoitaralcd sec ed tnasopsiD
namespace A { int n ; namespace B { float x ; int n ; } float y ; } // dbut dfinition de lespace A // A::n // dbut dfinition de lespace A::B // A::B::x // A::B::n // fin dfinition de lespace A::B // A::y // fin dfinition de lespace A

: elpmexe tec snad em moc ,reuqirb mis tnevuep s mon ed secapsed snoitini fd se L

. se tr op s et n er f f id s ec s na d are f es e hcr eh cer a l ,st n er f f id s m o n e d s ec apse sed tnenneitrappa s fitce ffe stnemgra sel is ,elarng erinam enuD .A smon ed ecapsel erid--tsec ,c fitce ffe tne mugral ini fd tse leuqel snad iulec issua sia m ,)f noitcno f ed sap edssop en iuq ,labolg ecapsel ed euq tigas en li ,ici( snrecnoc secapse sel tnemelues non ,tnanimaxe ne ulosr tse f ed leppaL .A ecapsel ed C elobm ys el euq snosiudortnin suon ,icI
659

4 Imbrication des espaces de noms


4 - Imbrication des espaces de noms

: noitcurtsni elp mis ettec cevA


namespace Win { ..... } // bibliothque pour Windows namespace Unix { ..... } // bibliothque pour Unix namespace Linux { ..... } // bibliothque pour Linux

: s m o n e d s ec a pse s i or t s ec i n i f d s n o y a s u o n euq snosoppus ,elpmexe raP .edoc ud noitaci fidom ed retissecn snas ,seca fretni se m m sel t na d ss op se uq h t oi lbib s et ner f fi d ce va r el l ia var t e d e m m arg orp n u t n e m el a g te mr ep e ll E .elpmexe erton snad tiaf snoval suon e mmoc ,sgnol port uep nu sguj s mon ed secapsed sgrba smon sed rini fd ruop etnassertni ervas tilibissop etteC
namespace mon_espace_de_noms_favoris { // dfinition de mon_espace_de_noms_favoris } namespace MEF mon_espace_de_noms_favoris // MEF est dornavant un synonyme de mon_espace_de_noms_favoris using namespace MEF ; // quivalent using namespace mon_espace_de_noms_favoris

: elp mexe raP .e m ynon ys nu tid tnemertua ,s mon ed ecapse nud saila nu rini fd ed elbissop tse lI

.4 ehparg -arap ua eidut smon ed secapse sed noitacirbmil ceva noitautis ettec sap ardno fnoc en nO : A s n a d si n i f d x u e c t n e m e l a g s i a m , B s n a d tne mevitce ffe sini fd selob m ys xua edcca no ,B ecapseman gnisu evitcerid elues enu cevA
// fin dfinition espace A // dbut dfinition espace B A ; // mme rsultat avec using A::n ; using A::y ; // fin dfinition espace B using namepsace B ; // ici x dsigne B::x, n dsigne A::n et y dsigne A::y

: s n oi ti n i f d s ec e l p m e x e r a p s n or d is n o C .e nre c -noc etrop al snad evitcerid ednoces ettec nnoitnem tnemelag tiava nol is emmoc essap es t u ot , g n i s u e vi tc eri d e n u e m m-i u l t n ei t n oc i u q s m o n e d ec a pse n u e nre c n oc g n i s u e v it c er i d enu is ,tid tnemertuA .evitisnart tse evitcerid ettec euq tias nol is reilucitrap emlborp ed sap esop en iuq ec ,smon ed ecapse nud noitini fd al snad resilitus tuep gnisu evitcerid a L

660

6 Les alias

5 Transitivit de la directive using

Les espaces de noms CHAPITRE 30

namespace Bibli Win namespace A { int n ; float y ; } namespace B { using namepace float x ; }

// dbut dfinition espace A

.)7 ertipahc ud 4.21 ehpargarap el tnemelleutnev zeyover( essalc enu snad seuqitats serbmem ed noitaralcd al tnemellun te ,reihcif nu snad elobmys nu rehcac ruop citats ed noitasilitul enrecnoc aleC .1

: tnabolgne ecapse nu snad uo smon ed ecapse emm el snad revuort es esnec tse enrecnoc essalc al uo noitcnof al ,essalc enu snad erugif itimad noitaralcd enuuqsro L

: snoitaralcd sec arer frp no ,elp mexe raP .emron al ed noitasilautca erutu f enu snad ertarapsid uov ,citats ecner - frp ed tilibissop ettec resilitud sruelliad ednam mocer ISNA timoc e L .ecruos reihcif u a e ti mi l e tr o p s el o b m ys s e d ri n i f d e d t s e s e m y n o n a s e c a ps e s e d n oi t a c o v al ,t i a f n E
1

: s e t n e l a vi u q t n os setnedcrp snoitaralcd sel ,tid tne mertuA .ertua nu ecruos reihci f nud tnerffid sruojuot ert noa f ed isiohc mon nu ecapse tec tiaubirtta ruetalip moc el is e mmoc essap es tuot euq erid tuep nO .ralcd t a li o etrop al snad euq elbasilitu tsen s mon ed ecapse let nU
namespace { ..... } // fin dfinition espace anonyme // dbut dfinition espace anonyme

: sn a d e m m o c ,e ti ci lpx e m on ed sap tnadssop en erid--tsec ,sem ynona s mon ed secapse sed rini fd ed elbissop tse lI

. x x x : : i l b i B e mr o f al suos tnemeticilpxe tnatic sel ne emm uo xxx::ilbiB gnisu elleudividni gnisu noitaralcd enu rap ,ilbiB ecapseman gnisu evitcerid enu rap ,selobm ys xua redccad erinam al tios euq elleuq ,)ilbiB( fitci f mon ed ecapse nu ceva tnalliavart e mmargorp nu erirc arruop no
661

8 Espaces de noms et dclaration damiti 7 Les espaces anonymes


static int globale_cachee ; static void f(float) ; ..... namespace // dclaration des identificateurs cachs dans le fichier source { int globale_cachee ; void f(float) ; // fonction de service non utilisable en dehors du source } ..... namespace nom_unique { ..... } using nom_unique ; // fin dfinition espace nom_unique // dbut dfinition espace nom_unique

: i c- s e l l e c

7 - Les espaces anonymes

662

Les espaces de noms CHAPITRE 30

namespace A { ..... class X { ..... friend void f (int) ; // obligatoirement A::f ..... } } namespace A { ..... namespace B { ..... class X { ..... friend void f (int) ; // A::B::f ou A::f ..... } } }

.stnemugra stnerf fid ses ed smon ed secapse sel snad eutceffes ehcrehcer al ,ei ma noitcno f enud leppal ed srol ,trap ertuaD

sdradnats sessalc uo snoitcnof sed egasu nob el ruop siuqer ett-ne sreihci f sed essigas liuq .euqnocleuq reihci f nu snad tnarugi f etxet el ,noitalipmoc tnava ,reroprocnid temrep ellE

en if ed#

f ed epy t

. ed edial sem ynon ys ed snoitini fd selleutnevd ceva elllarrap n u r e u t c e f f e d t e mr e p ert i p a h c e c s n a d e c a l p as ,) e m m- i ul r u et al i p m o c e l r a p e s il it u n o it - ar al c d e n u ts e euqsiup( ruessecorprp el ceva troppar ed sap tna yan euq neiB .sem - y no n ys s ep y t e d s m o n s ed r in i f d t ne m e ll ei t ness e tr es e ll e , n oi tc ur ts ni l t n auQ . e ll e n n o i ti d n o c n o it al i p m o c a l ; )enifed# evitcerid( sorcam ed te selobm ys ed noitini fd al ; )edulcni# evitcerid( ecruos sreihci f ed noitaroprocnil : riovas ,ruessecorprp el rap setre ffo stilibissop sesrevid sel reidutd ici snosoporp suon suoN . edulcni# silitu jd snova suon ,sevitcerid sec imraP .# ertcarac el rap tnane mmoc sicrp tom nu rap setiudortni sruojuot tnos selle ; em margorp ud etser ud setcnitsid sengil sed rus setirc tnos ,C egagnal ud snoitcurtsni sel ruop tiudorp es iuq ec tnemeriartnoc ,serinred seC .sevitcerid ed erb mon niatrec nud ritrap ecruos reihci f ertov emrofsnart iuq te noitalip moc al tnava tnemeuqitamotua tucxe tse iuq e mmarg -orp nud tigas lI . ruessecorprp nud ecnetsixel reuqov snema t jd snova suoN
fedep yt

1 La directive #include

Le prprocesseur et linstruction typedef

31

: evitcerid enU . e cr u os r ei h ci f u d e ti us a l s n a d ar t ar -appa elobm ys ec euq sio f euqahc alec te ,5 etxet el xambn elob m ys ua reutitsbus ed ednamed : euq ellet evitcerid enU
#define nbmax 5

.ellennoitidnoc noitalip moc ne esilitu nouq se l o b m y s s el p mis e d n oi ti n i f d al r u o p s i mr o h e ll ies n o c d t t u l p tse e l le , + + C n e ,se m -ro f xued sec suos esilitu tro f tiat evitcerid ettec o C ne tiassap es iuq ec tnemeriartnoC .s or c a m e d n oi t i n i f d ; s e l o b m ys e d n oi t i n i f d : s et n er f f i d z ess a s t i li b iss o p x u e d ti a f n e er f f o e ll E

. 3 e h p ar g ar a p u a li at d n e s n or e ni m a x e s u o n e u q s e l l e n n oi t -idnoc sevitcerid ed iolp mel rap tnemelica f tuosr es e mlborp ec ,11 ertipahc ud 2.6 ehparg -arap ua langis jd snoval suon em moC .seuqitnedi snoitaralcd srueisulp ed ecnesrp al seud noitalip moc ed sruerre sed renartne tuep iuq ec ,reihci f em m nud selpitlu m snoisulcni sed eriudnoc tnemelica f tuep ett-ne sreihci f sed noitatroprocnil ed noitacirbmi etteC .tnasilanp siamaj tsen alec ,euqitarp nE .)8 sniom ua( noitacirbmid xuaevin ed lamixa m erbmon ua eti mil enu rexi f tuep emron al ,eir -oht nE .dradnats euqhtoilbib al s fitaler ett-ne sreihcif sniatrec ed sac el tseC . sevitcerid sed ,ruot nos ,retropmoc emm-iul tuep rap r opro c ni r ei hc i f nU . e m m-s u o v z e r c s u o v e u q sr e i h c i f s el r u o p t t u l p ts e l e d n o c es a l e u q si d n at , dr a d n a ts e u q -htoilbib al tnadnopserroc ett-ne sreihci f sel ruop esilitu tse erimerp al ,tnemelarnG .ecruos em margorp el evuort es o iulec euq )eriotrepr ,nimehc( tnemecalp me emm el snad nnoitnem reihci f el ehcrehcer
edu lcn i# edu l cn i#

. n oi ta t ne m -lp mil rap ini fd )eriotrepr ,ni mehc( tnemecalpme nu snad nnoitnem reihci f el ehcrehcer : senisiov sexatn ys xued edssop evitcerid ettec euq snoleppaR .)11 ertipahc ud 6 ehpargarap el tnemelleutnev ze yover( noit -ini fd as ed essalc enud noitini fd al reraps ruop .O.O.P ed etxetnoc nu snad elbasnepsidni tne misauq tiarvas tilibissop ednoces ettec euq uv snova suoN .urc ertov ed sreihci f ed uo
664
Le prprocesseur et linstruction typedef CHAPITRE 31
#include <nom_fichier>

2.1 Dfinition de symboles

2 La directive #define

#define entier int

#include "nom_fichier"

: ceva ,elpmexe rap ,isni A .noitalipmoc ed ruerre enu ariud -noc alec ,larng ne ,ertnoc raP .e mm-iul ruessecorprp el rap etcetd ,rs neib ,ares en ruerre enucua ,enifed# evitcerid enu snad = engis nu ,edrag m rap ,zesiudortni suov iS 1 .etnavius engil al rus tnaviusruop ne te \ rap engil al tnanimret ne ,led-ua regnolorp el ed elb -issop emm tse lI .evitcerid al enimret iuq engil ed ni f al tsec euqsiup ,zetiahuos el suov euq secapsed tnatua rinetnoc tuep ,iul tnauq ,noitutitsbus ed etxet e L .)noitutitsbus ed etxet el te reutitsbus elobm ys el ertne rueti mild ed tres ecapse rei merp el euqsiup( ecapsed rinetnoc tuep en recalp mer elobm ys el euq tia f evitcerid ettec ed exatn ys al ,elarng erinam enuD .eria f el egilbo suon en neir euq sia m ,noitutitsbus ed etxet el snad ni f ed elugriv-tniop el erulcni up snoirua suon euq zetoN : C n oi t c urt -sni enu tom lues nu ne remusr tnemmoc tnartno m suov selp mexe sreinred seuqleuq icioV .lrap jd snova suon tnod ellennoitidnoc noitalip moc al snad tneivretni elleuqsiup tarap y liuq etsisiatna f issua sap tsen tilibissop ellet enu siaM .em margorp el snad sap tneiarugi f en slis em moc cnod aressap es tuoT .ediv etxet nu rap scalpmer tnores e mmargorp ud etius al snad tnarugi f neir selobm ys sel suot
#define bonjour cout << "bonjour" #define affiche cout << "resultat " << a << "\n" #define ligne cout << endl

: e v it c er i d et t e c c e v a ,elp mexe raP .ediv etxet nu elobm ys nu reutitsbus ed redna med ed elbissop e mm tse lI .)noitalip moc srpa( elbarap moc ares tatlusr el ,sesirotua tnos setnatsnoc sel o l setnatsnoc snoisserpxe sel etpecca ruetalipmoc el euq nnod tnat ,siam 6 rap tne metcaxe calpmer sap ares en elliat euq neib zetoN .1+5 rap calpmer tne meuqitamts ys ares e mmargorp ud etius al snad tnassiarappa elliat tom euqahC : s e vi t c eri d s e c c e v a , el p m e x e r a P . i ni f d jd elob m ys nu noitutitsbus ed etxet el snad ertarappa eria f ed redna med ed elbissop tse lI : rap secalp mer tnores : snoitcurtsni sec ,elp mexe rap ,isniA .seritne selbairav ed snoitaralcd sel sianar f ne erircd arttemrep ,em margorp ed tubd ne ecalp
665
entier a, b ; entier * p ; int a, b ; int * p ; #define nbmax 5 .... #define taille nbmax + 1

#define rien

#define N=5

se uqrameR

2 - La directive #define

: r a p e u q n o cl e u q e l o b m ys n u t i a f n e et n es r p er x s l e u q s e l s n a d : e mr o f a l e d s et x et s e l s u o t et i us al s n a d ar e c a l p m er r u es s e c or p r p e l : e vi t c eri d e tt e c c e v a , e l p m e x e r a P . ser t m ara p e d n oi t o n al rinevretni tia f elle siam ,selob m ys ed noitini fd al elb messer sorcam ed noitini fd a L
#define carre(a) a*a carre(x)

: n o t- t i a s i l i t u e t n e d c r p n o i t c u r t - s n i l e d u e i l u a , i s n i A . f i t a i l l a p l u e s e l sr o l a t i a u t i t s n o c e n i f e d # e v i t c er i d a l sr u o c er e L . + + C n e t n os e l s e l l e u q sr o l a , e t n a t s n o c n o is s er p x e e n u s n a d s e l b as i l i t u s a p t n e i a t n : is ni a s e i n i f d s e t n a ts n o c s e L
C nE

tni

.re gasiv ned snonev suo n e uq sellec euq sellet sruerred citsongaid el sia sulp er d -ner tuep tilica f ettec ; lip moc t nemelbatirv ares iuq etxet ud erid--tsec ,ruessecorp - r p e l r a p r n g e t x e t u d e c n a s s i a n n o c r i o v a d t n e tt e m r e p s n o i t a t n e m l p m i s e n i a t r e C 3 .s a c e c s n a d s e l b a l a v t n e ts er s e t n e d c r p s n o i t ar d i s n o c s e L . e l u gr i v- t n i o p n u r a p e vit - c e r i d e n u ) t r o t ( r e n i mr e t e t s is n o c e t n e d c r p a l e u q e t n ar u o c is s u a r u e rr e er t u a e n U 2 . t a c i l d s u l p t n a t u a d ar e s n e r u er r e l e d c i t s o n g a i d e L n o i t c u r ts n i l t n e m m er a p p a t n a nr e c n o c n o i t a l i p m o c e d c i ts o n g a i d n u d e c n es r p n e t n e m e l p m is z er e s s u o v t e r u es s e c or p r p e l r a p r n g e t x e t e l s a p z e r t a n n o c e n s u o v , s p m e t u d tr a p u l p a l , e u q , s i o f e t u o t , n e i b z e t o N . e n orr e t n e m e t s e f i n a m t s e e l l e u q a l
edu l c n i# .] N [ t

: r u e ss e c o r p r p e l r a p t n e m e t i ar t s r p a , ar d n e i v e d : e uq e l l e t n o i t c u r ts n i e n u
666
Le prprocesseur et linstruction typedef CHAPITRE 31
int t[N] ;

2.2 Dfinition de macros

carre(z) carre(valeur) carre(12) x*x define N 5 int t[=5] ;

const int N = 5 ;

deviendra deviendra deviendra

z*z valeur*valeur 12*12

: e lp me x e r aP

: ceva ,isniA .orca m al ed noitini fd al snad seshtnerap sed tnasiudortni ne ulosr tnemelica f ert tuep ,sruetarpo sed sevitaler stiroirp xua il ,emlborp reimerp e L .6+5 reluclac ariudnoc rng isnia e mmargorp ud noitucxel ,5 ruelav al tneitnoc x is ,elpmexe raP .elb -uod nos tnemiarv sap tinruo f en elle ,sulp eD .x elbairav al sio f xued retnemrcni tiudnoc : n o it at o n al , t e f f e n E . drob ed tef fe nu tnevuos e mmon nol euq ec ertarappa tia f li ,e misiort ua tnauQ .ertm -arap ne tnarugif noisserpxel ed elbuod el ,retp mocsel up tiarua no e mmoc ,sap tinruo f en emixued el ,tcerroc tatlusr nu tiudnoc orca m ed leppa reimerp el is ,euq zetatsnoc suoV
a + a/b x+2*y + x+2*y x++ + x++ DOUBLE(x++)

: tnavius el ares ruessecorprp el rap rng etxet e L


#define DOUBLE(x) x + x ..... DOUBLE(a)/b DOUBLE(x+2*y) DOUBLE(x++)

: s n oi tc ur ts ni se c ce va , elp me xe raP .sruetarpo sed rinevretni tia f noitutitsbus ed etxet el euqsrol tne mmaton ,snoituacrp seuqleuq erdnerp ed eriassecn tnevuos tse lI . e d e uq ti ga s e n l i ,s ac sel suot snad ,euq reilbuo sap tua f en li ,evitcerid ettec ed ecnassiup al rgla m ,snio mnaN
et x et ed n o itutitsb us

: rap ,spmet dnoces nu snad ,siup : rap calpmer ,sp met rei merp nu snad ,ares : e t xe t el ,setnedcrp snoitini fd xued sel ceva ,isniA .reuqirbmis tnevuep snoitini fd sel ,erocne L
dif(x,z) dif(valeur+9,n) deviendrait deviendrait x-z valeur+9-n dif(carre(p),carre(q)) dif(p*p,q*q)

: c ev a ,e lp m ex e r aP .se l ugri v se d r ap , t ne me uqi ssa lc , t narap s s e l ne sr ue is ulp r i ne vre t ni eriaf ned elbissop tse li siam ,ert marap lues nud euq tiasopsid en etnedcrp orcam a L
667

#define DOUBLE(x) ((x)+(x)) ... DOUBLE(a)/b DOUBLE(x+2*y) DOUBLE(x++) p*p-q*q define dif(a,b) a-b

2 - La directive #define

. n o isser p x e e n u d r ue la v ; s el o b m ys e d ec n et si xe n i u o ec n ets i xe : noitaroprocnil tigr iuq noitidnoc al ed noitcno f ne seirogtac xued ne tnessalc es sevitcerid seC .ruessecorprp el rap s ylana tse iuq etxet el snad ecruos reihci f ud snoitrop sed erulcxed uo reroprocnid tnette mrep sevitcerid ed erb mon niatrec nU

. dr o b e d s t e f f e s e d u a e vi n u a t n e m m a t o n ,s e u qsir e d s n i o m p u o c -uaeb tnatrop moc ne tuot ,egatnava emm el tnesssinruo f )7 ertipahc ud 41 ehpargarap ua setnesrp( engil ne snoitcno f sel ,++C neuq ios ed av lI .noitucxed sp met ed niag nu rinetbod ni fa ,snoitcno f sed recalpmer ruop sorca m xua tnem meuqr f tiaruocer nO
C nE

: ceva ,elp mexe raP .rini fd orcam al retimild tres ecapse rei merp el ,erocne l ,te ffe nE .sertmarap stner ffid sel te orcam al ed mon el tnai ficps eitrap al snad ecapsed riovrp sap en ed fitarp mi tse li ,orca m enud noitini fd al snaD

: s n o i t c urt s n i s e c c e v a , is ni A .s er t c ar a c e d s e n a h c sed rueirtnil sap tno f es en sertmarap ed snoitutitsbus sel euq riovas tua f li ,sruellia raP . ur a ps i d tnatua ruop sap an e misiort el rap tiudortni drob ed teffel ,udnetne neib ,ertnoc raP .ELB al ed sleppa sreimerp xued sel ruop setnasia fsitas sulp tnemetten tnos sesohc se L
-UOD orcam

668

3 La compilation conditionnelle
: e t x e t e l t i ar er n g r u e s s e c or p r p e l
#define somme (a,b) a+b ... z = somme(x+5) ;

: ares ruessecorprp el rap rng etxet el


#define AFFICHE(y) cout << "valeur de y " << y ... AFFICHE(a) ; AFFICHE(c+5) ;

: ares ruessecorprp el rap rng etxet e L


Le prprocesseur et linstruction typedef CHAPITRE 31

cout << "valeur de y " << a ;

((a)+(a))/b ((x+2*y)+(x+2*y)) ((x++)+(x++))

z = (a,b) a+b(x+5) ;

e uqrameR

.ett-ne sreihcif serporp sov reuqilppas tuep euqinhcet emm a L .)noitalipmoc e d sr u err e s e d er i u d n o c e d t n a u qs ir s n oi t c ur ts ni s e ni atr e c e d n oi t a ci l p u d a l r e t i v d ni f a( s u l c n i t j d s a p a n r e i nr e d e c e u q t n ar u ss as n e , et t- n e r e i h c i f ert u a n u , n n o d et t- n e reihci f nu siuped ,erulcnid tnem maton tnette mrep slI .sdradnats ett-ne sreihci f sel snad sesilitu tne mmeuqr f tnos selobm ys ed snoitini fd sec ,tid jd snoval suon em moC

e uqrameR

. eri art n o c t at l us r u a r it u o b a ruop TNIO PUAESIM enifed# evitcerid al re mirppus ed tiari ffus li ,ehcnaver nE .sap tnores el en 2 snoitcurtsni sel euq sidnat ,ruessecorprp el rap seroprocni tnores 1 snoitcurtsni sel ,icI
#define MISEAUPOINT ..... #ifdef MISEAUPOINT instructions 1 #else instructions 2 #endif #ifndef symbole ..... #else ..... #endif #ifdef symbole ..... #else ..... #endif

: sevitcerid sec ed noitasilitud elpmexe nu icioV .ruessecorprp ud seunnoc sap tnemulosba tnos en ,selle tnauq ,iuq te ,seuqissalc ++C snoitcurtsni sed rap seralcd ert tneiarruop iuq selbairav selleutnevd ceva selob m ys sec sap zedno fnoc en ,tne mmatoN .enifed# evitcerid enud tejbol eria f tiod li ,ruessecorprp el ruop ini fd tne mevitce ffe tios elobm ys let nuuq ruop ,euq neib zetoN .roprocni ares iuq fidne# te esle# ertne tnarugi f etxet el tsec ,eriartnoc sac el snaD .inifd sap tsen uqidni elobm ys el is esle# te fednfi# sengil xued sel ertne tnarugi f etxet el reroprocnid ednamed

: el b ara p m o c n o a f e D .)11 ertipahc ud 2.6 ehpargarap ua nnod elpmexel snad e mmoc( etnesba ert ,tnemel -lerutan ,tuep esle# evitcerid a L .roprocni ares iuq fidne# te esle# ertne tnarugi f etxet el tsec ,eriartnoc sac el snaD .fedfi# ertnocner nol o tne mo m ua ini fd tnemevitce ffe tse uqidni elobm ys el is esle# te fedfi# sengil xued sel ertne tnarugi f etxet el reroprocnid edna med ellE

: etnavius noitcurtsnoc al snordisnoC

3.1 Incorporation lie lexistence de symboles


3 - La compilation conditionnelle

669

: erir cs t ne me la g tiarruop 1.3 noitces al ed ni f al nnod elpmexel ,isniA .)file te fi( ruessecorprp ua sen -itsed snoitidnoc sel snad tnemeuqinu elbasilitu ,denifed ton ruetarpo nu etsixe li ,ertuo nE . + + C e g a g na l n e u q er i n a m e m m a l e d t n e m e t c a x e t n et o n es sr e i nr e d s e C .s e u q i g o l u o s e u q it m h tir a ,sl e n -noitaler sruetarpo sed te ruessecorprp el ruop sini fd selob m ys sleuq etropmin rinevretni eria f tuep file# te fi# sevitcerid sec snad ennoitne m noitidnoc al ,elarng erina m enuD
#define CODE 1 ..... #if CODE == 1 instructions 1 #elif CODE == 2 instructions 2 #endif

: erircs tneiarruop snoitcurtsni setnedcrp son ,elpmexe raP .suqirb mi xiohc sel resnednoc ed temrep iuq file# evitcerid enu tnemelag etsixe liuq zetoN : rap evitcerid eri merp al snoicalpmer suon is 2 snoitcurtsni sed tiarigas li siaM .ruessecorprp el rap seroprocni tnores iuq 1 snoitcurtsni sel tnos ec ,icI
#define CODE 1 ..... #if CODE == 1 instructions 1 #endif #if CODE == 2 instructions 2 #endif #define CODE 2

: n o it asi l it u d el p m e xe n u i ci o v n E . e u qi d n i noitidnoc al ed ruelav al tnavius ,etxet ud seitrap xued sed enul reroprocnid temrep ellE
#if condition ..... #else ..... #endif

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

670

3.2 Incorporation lie la valeur dune expression

Le prprocesseur et linstruction typedef CHAPITRE 31

#define MISEAUPOINT ..... #if defined(MISEAUPOINT) instructions 1 #else instructions 2 #endif

f edepy t

fedep yt

.noitcurtsni ettec ed noitasilitud selpmexe siort reni maxed snosoporp suov suoN .relrap tne merporp ep yt uaev - u o n e d sa p er c e n euq neib areton nO .sep yt ed sem ynon ys sed rinifd ed temrep euq tnevuos tid nO .vird ep yt nud uo ep yt ec ed stejbod noitaralcd al reifilp - m is r u o p e p yt e d r u et a c i fi c ps e m m o c m o n e c r es il i t u d si u p ,l i-t i os e x e l p m o c iss u a , e u q n o c -leuq ep yt nu mon nu rennod ed temrep n o it ara lc d e d n oi tc urt sn il ,t n e m si crP
fed epy t foe zis

: tnavirc ne ,ep yt ed ruetaci ficps nu eriaf ned elbissopmi tse li ,reilucitrap ne ; leuq let silitu ert sap tuep en ep yt ed mon ec ,) uo tsac ed ruetarpo( sreilucitrap sac sniatrec snad fuas siaM . t s e t n a d n o ps err o c e p y t e d m o n e l ,s etr e C . t n i 3 e d u a e l b a t n u ts e v c n o d ; tni ep yt ed tse ]3[v : i s ni a et r pr e t n i s n o it ar a l c d e l l e t e n U
]3 [tn i v

: ruetaci fitnedi nu sruojuot sap tiudr es en ruetaralcd el siaM

: snad em moc ,elbairav al ed ruetaci fnedil dnop -serroc ruetaralcd el ,selpmis sulp sel sac sel snaD .ep yt ed ruetaci ficps nu ruetaralcd nu tnaicossa noitaralcd ed noitcurtsni enu rap tinifd es elbairav enud ep yt el ,++C nE

.ruessecorprp ud selobm ys sed snad s mirpxe srola tnos tnemennorivnel tnassinifd sertmarap se L .stnemennorivne stnerf fid euqinu emmargorp nu retpada ruoP .t n i o p u a ts e e m m ar g or p e l e u qsr o l er i o m m el li at n e r esi l a n p e l s a p e n e d , is ni a t e , t n a d n o ps err o c t ej b o e l u d o m e l s n a d s n o i t c urt s n i s e c ed ecnesbal uo ecnesrp al relrtnoc ed elbissop tse li ,e m m-iul ecruos ud uaevin ua eruen -im noitnevretni enu raP .tnadnopserroc tejbo eludo m ud tnolov re mirppus uo eriudortni isnia arruop nol euq tniop ua esi m ed snoitcurtsni sed ecruos reihcif nu snad eriudortni ruoP : sesueicrp r er v as t n e v u e p n ois s er p x e e n u d r u e l a v al e d ts et e d s e v it c er i d s e l , el ar n g er i n a m e n u D
671

4 La dfinition de synonymes avec typedef

int[3] v ;

int v[3] ; /* le "spcificateur de type" int est associ au "dclarateur" v[3] */

int n ; /* le "spcificateur de type" int est associ au "dclarateur" n, */ /* form, ici, dun simple identificateur de variable */

/* incorrect mme sil semble que v est de type int[3] */

4 - La dfinition de synonymes avec typedef

tn i

tn i

tn i

: ceva ,euqsiup eni fed# ceva tatlusr em m ua rituobad elbissop sap tiares en li ,sio f ettec ,euq neib areton nO . nu rus ruetniop nu rus sruetniop 01 ed uaelbat nu tse ; nu rus ruetniop nu rus ruetniop nu tse ; n u r us r u e t n i o p n u ts e n u r u s r u e t ni o p n u ts e
t ]01 [t ]01[t* ida

tni

: ceva ,elp mexe rap ; ruetaralcd ed etros elleuq etropmin rinevretni tnasiaf noitaralcd enu snad silitu ert tuep fedep yt rap ini fd e m ynon ys el ,tse sulp iuQ : s n ad e m m oc , ep y t ec e d st ejb o se d r era lc d r uop s il i tu er t e ti us n e tuep em ynon ys eC .* tni ep yt ud em ynon ys nu tnat e mmoc tni_rtp ruetaci fitnedil tinifd no : f e d e p yt l c t o m u d n o i t ar a l c d et t e c r e d c r p tia f nol iS .tni sed rus ruetniop ep yt ud elbairav enu em moc tni_rtp ruetaci fitnedil tini fd : e u q e ll et n o i t ar a l c d e n U
int *ptr_int ; typedef int *ptr_int ; ptr_int p1, p2 ; /* p1 et p2 sont des pointeurs sur des int */

.st n asser t n i s u lp selp mexe sed tnanetniam snordisnoC .em ynon ys tse iul iuq ertua nu rap ep yt ed ruetaci f -icps nu recalpmer ed serueirtlu snoitaralcd sel snad tnemelp mis temrep liuqsiup ,esab ed sep yt s ed s ac e l sn a d t i m il ets er e d t r t ni l ,s el p m e x e s e c r us ri o v e l t u e p n o e m m o C
fed ep y t

en if ed#

rap reitne elob m ys el tnassini fd ne elbarapmoc tatlusr nu tiardneitbo no ,tia f nE


entier n, p ; /* n et p sont de type int */ entier *ad1, *ad2 ; /* ad1 et ad2 sont du type pointeur sur int */

: s n a d e m m o c , v ir d e p y t n u d u o e p y t e c e d st ej b o s e d r er a l c d r u o p s il i t u er t e ti us n e t ue p e m y n o n ys e C . e p yt u d e m y n o n ys e d r u et ac i fi t ne d i n u t n a t e m m o c r ei t ne ti n i f d n o
tn i fed epy t

tni

: lc to m ud noitaralcd ettec redcrp tia f nol iS ep yt ed elbairav enu e mmoc reitne ruetaci fitnedil tini fd : e u q e ll et n o i t ar a l c d e n U
int entier ;

672

4.2 Dfinition dun synonyme de int *

4.1 Dfinition dun synonyme de int

Le prprocesseur et linstruction typedef CHAPITRE 31

ptr_int p1, p2 ; #define ptr_int int * ptr_int adi, *t[10] ; #define entier int typedef int entier ;

: n oi t ar al c d a l

: tiasilitu no ,isniA .erutircl ricruocar ruop leppa srola tiasiaf no )dradnats euqhtoilbib al ed snoitaralcd sel tnod( sedoc ed puoc - u a e b s n a D . er u t c urt s e d s n o it ar a l c d s el s n a d er i ot a gi l b o ti at to m el ,C e g a gn al nE
fedep yt tcu rts

gno l

tn i

t roh s

. eri o m m e n o z e l le u q etr o p m i n e d r u e u g n o l al e d n o i t a vr es n o c a l ert t e mr e p n o a f e d , n o i t a t n e m l p mi l t n a vi us i si o h c ) uo , ( r e i t n e e p yt n u d e m y n o n ys n u d n o ps err o c elp m e xe raP . C ud etirh dradnats euqhtoilbib al ed ett-ne sreihci f sel snad silitu etser ,+ + C nE
t_e zis f ed epy t

: t n ei ar d n ei v e d s et n e d c r p s n oi tar al c d s o n
#define vect int [3]

: ceva ,euqsiup etnasia fsitas erug tiares en eni fed# ed noitasilitul icI
vect *ad_v ; /* ad_v est un pointeur sur des tableaux de 3 int */

: s n ad e m m oc , ep y t ec e d st ejb o se d r era lc d r uop s il i tu er t e ti us n e tu ep e m y n on ys eC .sreitne 3 ed uaelbat ep yt ud e m ynon ys nu tnat em moc r u et a c i fi t n e di l t i n i f d n o


t ce v fedep yt

: lc t o m u d n oi tar al c d e tt ec r e d crp ti a f n ol iS .sre it n e 3 e d ua el b at e p yt u d t n at e m m o c ru e ta ci f it ne d il t i ni f d


tc ev

: e u q e ll et n o it ar a l c d e n U

4.3 Dfinition dun synonyme de int[3]

: no i tara l c d al t n auQ

: ,tne metiartrp srpa ,tiariudnoc

int [3] v1, v2 ; int [3] * ad_v ;

vect v1, v2 ;

typedef int vect[3] ;

int vect[3] ;

int * adi, *t[10] ; / t serait un tableau de pointeurs sur un int */

ptr_int adi, *t[10] ;

int * p1, p2 ; /* p1 serait bien un pointeur sur un int, mais p2 serait un int */

struct article { int numero, qte ; float prix ; } ;

C nE

e uqrameR

/* v1 et v2 sont des tableaux de 3 int */

/* incorrecte et sans signification */ /* incorrecte et sans signification */

: s na d e m m uo

: t iar d ne i ve d el le

4 - La dfinition de synonymes avec typedef

673

- i tra t cu r t s

: r er a l c d e t i us n e t i a v u o p n o u q e tr os e d , ep yt ud e m yn on ys nu tnat em moc ruetaci fitnedil tiassini fd n o


elc e l c i t ra_ s

: cevA .

e l c i t ra t cur t s

674

Le prprocesseur et linstruction typedef CHAPITRE 31

typedef struct article { int numero, qte ; float prix ; } s_article ;

m o n e d er u t c ur ts e p y t n u r i n i f d r u o p

s_article art1, art2 ;

Annexes

.leppal ed s fitce f fe stne mugra sel tneutis es sleuqsel snad smon ed secapse sel snad seutis ; )x ici( nnoitne m mon ed ecapsel ed )f ici( mon em m ed snoitcno f sel setuot srola tiudortni no : )f::x gnisu emro f al ed( gnisu noitcurtsni enu rap setiudortni ; )xxx ecapseman gnisu e m r o f a l e d ( g n i s u e v it c er i d e n u r a p st i u d or t ni s m o n e d s e c a ps e s e l s n a d s e ut is ; et n ar u o c e tr o p al s n a d s e ut is : u l u o v m o n el t n a y a s n o it c n o f s e l s e t u o t e d t i g as li ; setadidnac snoitcno f ed etsil enu tilbat no ,noitcno f ed nnod leppa nu erduosr ruoP

.nortap noitcno f enud noitaicnatsnil tne melargtni sap tneuq -ilppas en selgr sec ,stnadnopserroc sertipahc sel snad langis snoval suon em moC .stnemugra srueisulp snoitcno f xua esilarng es li tnem moc riov ed tnava ,tnemugra nu snoitcno f sed reilucitrap sac el drobad tuot tnanimaxe ne ,noitcno f ennob al risiohc ruop silitu emhtiroglal etiusne snorircd suoN . setadidnac snoitcno f sed etsil al tilbats tnem moc riov rap snorecnemmoc suoN .ruetarpo nud uo eini fdrus noitcno f enud leppal ed srol stnemugrad ecnadnopserroc ne esi m al tnadisrp selgr sed elbmesnel icioV
.B.N

1 Dtermination des fonctions candidates

Rgles de recherche dune fonction surdfinie

Annexe A

& t

ed

& t e litalov

te

* t

ed tnemelag eugnitsid no ,rueugir etuot nE .2 .sennod noitalipmoc ed snoitpo sed ruop sniom uD .1
* t eli ta lov
2

. & t r ap * t t ne me lp - mis tnaalpmer ne euqilppas tnedcrp tne mennosiar e L .& t tsnoc ep yt ud )ecner f -r rap tre fsnart nu tnangisd & te euqnocleuq ep yt nu tnat t( & t ep yt el eugnitsid nO .)t n ats n oc n o n e d es o hc e u ql e u q r u o p u v r p tne metiart el tnatsnoc ed esohc euqleuq reuqilppa sap arruop en nouq ei fingis iuq ec( * t ep yt ec ruop etcaxe ecnadnopserroc enu sap eutitsnoc en * t tsnoc ,* t ep yt ua tnad -nopserroc noitcno f enuuq etsixen lis ,ehcnaver nE .)tnatsnoc non ed esohc euqleuq reuqilppas tuep tnatsnoc ed esohc euqleuq ruop uvrp tne metiart el euq tia f el rap eifit -suj es alec ,erocne l( * t tsnoc ruop etcaxe ecnadnopserroc enu emm dnauq eutitsnoc * t ,* t tsnoc ep yt ua tnadnopserroc snoitcno f xued sec ed elues enuuq etsixen liS . n o it c n o f e n n o b al risiohc ed artte mrep tsnoc fitaci filauq ud ecnesbal uo ecnesrp a L .* t tsnoc ep yt el ruop ertual ,* t ep yt el ruop enul ,snoitcno f xued retsixe tuep li ,tnemsicrp sulP .t ep yt ed etnatsnoc ruelav enu rus ruetniop nu erid--tsec ,* t tsnoc e p y t e d r u e t ni o p n u d ) e u q n o c l e u q e p yt n u t n a t t ( * t e p yt e d r u e t ni o p n u e u g n its i d n O : tsnoc r uop s n o i t p e c x e x u e d c e v a , t s n o c t e e l i t a l o v s f it a c i fi l a u q s l e u t n e v s e d e t p m o c s a p t n ei t e n n O .)! sep yt xued sec ed nul tnelaviuq tse rahc , ennod noitatne mlpmi enu snad euq srola( rahc dengisnu ed te rahc dengis ed tnerf fid sio f al tse rahc ,tnemesueiruc zessa ,euq zetoN .)elbuod gnol te elbuod ,taolf( stnattol f sep yt stner ffid sel euq isnia engis ed tubirtta ruel ceva )gnol te tni ,trohs ,rahc( sreitne sep yt stnerf fid sel neib eugnitsid nO : etcaxe ecnadnopserroc enud ehcrehcer al snaD
1

.stnemugra srueisulp snoitcno f xua esilarng es elle tnemmoc snorrev suon ,tnemugra lues nu snoitcno f sel ruop e yolpme ehcramd al tircd riova srpA .setadidnac snoitcno f sed noitani mretd ettec snad sap tnenneivretnin )egtorp ,evirp ,euqilbup( noitcno f al sccad stiord sel euq areton nO
678
Rgles de recherche dune fonction surdfinie ANNEXE A

2.1 Recherche dune correspondance exacte

2 Algorithme de recherche dune fonction un seul argument

* diov

eli ta lov

ua tnednopserroc

.euqnocleuq ruetniop nu tceffa ert sap tuep en epyt ed ruetniop nu ,ISNA C ne essap es iuq ec tnemeriartnoc ,ISNA ++C neuq tiaf el ceva tnerhoc tse aleC .euvrp sap tsen esrevni noisrevnoc aL .3 .sac ec snad yolpme ert sap tiod en fitacifilauq eL .2 .)stib ed erbmon emm nu rillieucca non uo tiffus nuuq noleS .1
tni

te

trohs

euqsrol sap tuep el en li(

trohs dengisnu

tni

.esab ed essalc enu rus ruetniop > evird essalc enu rus ruetniop ; * diov > euqnocleuq ruetniop ; e u q n o c l e u q r u e t ni o p > 0 ; euqirmun > 0 ; euqirmun ep yt ertua nu ne mune ; )udnetta tse tni nu o l ardneivnoc taolf nu ,isnia ; setnadargd snoisrevnoc sed sirpmoc y( euqirmun ep yt ertua nu ne euqir mun ep yt : setnavius dradnats snoisrevnoc sel rinevretni tia f no ,ituoba sap sruojuot an ehcrehcer al iS
3

.euqinu tnemeriotagilbo tse elle ,evuort tse noitcno f enu is ,erocne icI .)& T tsnoc( etnatsnoc enu ecner fr enud tigas lis fuas ,)& T( ecner - fr rap noissi msnart enu seuqilppa ert sap tnevuep en snoisrevnoc sec euq snoleppaR elbuod > taolf tni > mune tni d engisnu u o tni > trohs d engisnu tni > trohs ,rahc dengisnu ,rahc dengis ,rahc : s et n a v i u s s n o i sr e v n o c s el r i n e vr e t ni tnasia f ne ,ehcrehcer ellevuon enu eutce ffe no ,ituoba sap an etnedcrp ehcrehcer al iS
1

.) ) & tni (f t e )tni(f erocne uo )tni tsnoc(f te )tni(f rinifd sia maj zerruop en suov ,elpmexe rap( noitalipmoc ruel ed srol setejer t te ffe ne tneiarua snoitcno f setner ffid sed snoitaralcd sel ,eriartnoc sac el snaD .euqinu tnemeriotagilbo tse noitcno f ellet nu ,uaevin ec uq areton nO .)A ed erb me m non noitcno f enu siuped eleppa ,A essalc enud evirp noitcno f enu ruop sac el sap elpmexe rap tiares en iuq ec( elbissecca tios elleuq noitidnoc ,eleppa tse evuort noitcnof al t e l e t rr as e h cr e h c er a l , e t c a x e e c n a d n o ps err o c e n u t n as il a r n oi t c n o f e n u et si x e li S
679

2.3 Conversions standard 2.2 Promotions numriques


2 - Algorithme de recherche dune fonction un seul argument

.secnadnopserroc sennob sniom ed revuort ruop etiaf tsen ehcrehcer enucua ,reilucitrap ne ; sussecorp ed nif ne ueil a tejer el euq neib areton nO .2 .sac ec snad yolpme ert sap tiod en fitacifilauq eL .1
el italov

.) & tni tsnoc( etnatsnoc enu ecner fr enud tigas lis ,erocne l , fuas ruerre enu tituoba nol te etejer tse elle ,)& tni( ecner fr rap tnemugra tec tioer ennoitcels noitcno f euqinul iS .noitcno f eruellie m al ed ehcrehcer al snad tni nu e mmoc rdisnoc tse li ,stib ed p mahc nu tse fitce ffe tne mugra nuuqsro L
2

.stne mugra srueisulp snoitcno f ed sac el snad trtni nos tuot ardnerp euqramer etteC .reinred neuq enimaxe tsen tilibissop ettec euq neib zetoN .tneivnoc fitce ffe tnemugrad ep yt leuq etropmin ,) ... noitaton( seuqnocleuq sep yt ed stnemugra sed uvrp a noitcno f enuuqsro L

. t u g i b m a n os e d esuac leppal aresu fer ruetalipmoc el ,)seuqov snoitaci filp mis selleutnev sel srpa( tnet -sixe snoisrevnoc ed snosianibmoc srueisulp is ,erocne icI .taolf >- rahc euq erdisnoc en no , taolf >- rahc te taolf > tni > rahc snad ,elpmexe raP .erdisnoc tse erinred ettec elues ,etruoc sulp enahc enu ne eifilp mis ert tuep snoisrevnoc ed enahc enuuqsrol ,siofetuoT .snoisrevnoc sertuad eicossa ert arruop elle sia m ,rinevretni arruop .U.D.C elues enU . ). U . D. C ( r u et a s il it u l rap seini fd snoisrevnoc sel rinevretni are f no ,tneivnoc en noitcnof enucua iS

. & A ne n o isr e v n o c a l e r f r p t s e i u q & B n e & C n oi sre v n o c a l r u o p e m m e d a v ne l i ; * A n e n o isr e v n o c a l e r f r p ts e * B n e * C n o isr e v n o c al , A e d e vir d B t e B e d e vir d C is ; * diov ne noisrevnoc al er frp tse esab ed essalc enu rus ruetniop nu ne evird essalc enu rus ruetniop nud noisrevnoc al : s n oi ta u tis s e n ia tre c s n a d tpecxe ,tugib ma srola a y lI .tnenneivnoc snoitcno f srueisulp euq elbissop tse li ,sio f etteC .)& T tsnoc( etnatsnoc enu ecner fr enud tigas lis fuas ,)& T( ecner fr rap noissimsnart enu seuqilppa ert sap tnevuep en snoisrevnoc sec ,erocne icI
1

680

2.6 Exception : cas des champs de bits 2.5 Fonctions arguments variables 2.4 Conversions dfinies par lutilisateur
Rgles de recherche dune fonction surdfinie ANNEXE A

.essalc epyt ed eticilpmi tnemugra nucua etropmoc en euqitats erbmem noitcnof enU .2 .tneml nu tnemetcaxe retropmoc tiod noitcesretni etteC .tnemugra euqahc ruop ecnadnopserroc eruelliem al tnasilar snoitcnof sed smrof selbmesne stnerffid sed noitcesretnil erdisnoc nouq ,setsilbmesne semret ne ,erid tneiver aleC .1

. e l i t a l o v t u b irt t a l e u q il p p as e u qr a m er e m m a L . ess u a f r s n ei b tse euqorpicr al ; stnatsnoc non stejbo sed rus riga sruojuot tuep etnatsnoc erbmem noit -cno f enU .stnatsnoc non stejbo sed rus tnassiga erbmem noitcno f enud stnatsnoc stejbo sed rus tnassiga erbmem noitcno f enu reugnitsid ed elbissop tse li : elitalov te tsnoc stubirtta sed ; e ga tir h d e m si n ac m u d : tn e m el le u t ne v e tp m oc tnanet ne ,releppa erbmem noitcno f al eni mretd iuq ep yt nos tsec ,te ffe nE .ici snolrap suon tnod ecnadnopserroc ed selgr xua simuos sap tsen tnemugra tec ,sio fetuoT .leppal utce ffe a iuq tejbol ed ep yt el tna ya fitce ffe tnemugra nu etuojas leuqua ,erianidro noitcnof e n u d l e p p a n u e m m o c r d is n o c ert t u e p ) e u q it ats n o n( er b m e m n o i tc n o f e d l e p pa n U
2

.stnemugrad tnassiorc erbmon nu ceva seini fd t tneiava setner ffid snoitcno f srueisulp is e mmoc setiart tnos tua fd rap stne mugra srueisulp uo nu tnatropmoc snoitcno f se L

. sertua sed ellec erueirpus uo elag tse tnemugra euqahc ed ecnadnopserroc al elleuqal ruop ellec erid--tsec ,ecnadnopserroc eruelliem al esil -ar iuq ,euqinu tse elle is te etsixe elle is ,ellec enimretd ruetalip moc el ,sennoitcels isnia s n o it c n o f s e l s et u ot i mr a p , et i us n E .) ar d n e i v n o c e n n o it c n o f e n u c u a u q r s j d t s e n o , n n o d tnemugra nu ruop ennoitcels tsen noitcno f enucua is ,sio fetuot( etiaf erocne sap tsen noit -cno f ennob al ed elani f noitani mretd al rac srueisulp riova ne y tuep li ,sio f etteC .ecnadnop -serroc eruelliem al tnasilar snoitcno f srueisulp uo enu ,tne mugra euqahc ruop ,rennoitcels tiudnoc el iuq ec ,stne mugra sed nucahc setnedcrp ehcrehcer ed selgr sel euqilppa li ,eria f ec ruoP .sertua sel setuot euq eruelliem noitcnof enu ehcrehcer ruetalipmoc e L
1

4 Fonctions membres
e uqrameR

3 Fonctions plusieurs arguments


3 - Fonctions plusieurs arguments

681

.nrecnoc yrt colb el srpa ,etiusruop enud tnemelpmis siam ,noitucxel ed esirper enud tnemelbatirv sap tigas en liuq siofetuot snoleppaR .1

a L .noitaerc_tcev te tcev sessalc se m m sel rus edno f es li ; 32 ertipahc ud 1.3 ehpargarap u d e l p m e x e l e d f n oi t c n o f al e d n o i t a c i f i d o m e n u d t i g as l I . n o it p e c x e e n u d n o it c e t d s r p a noitucxel ed etiusruop al resop tnevuep euq semlborp sel tnartno m elp mexe titep nu icioV

.)rtp_otua( s t n e g il l e t ni sr u e t n i o p s e d t n ar u o c er n e , s a c s ni atr e c s n a d , u o n oi t a si l a it i ni r a p s e cr u o s -ser sed noitseg ed etid euqinhcet enu tnasilitu ne erduosr sel tne mmoc snorrev suon ,resop tuep alec euq semlborp sel rtsulli riova srp A .tne meuqi man yd suolla stne mecalpme sel uo stejbo sel ruop etsixen etros ettec ed noitseg enucua ,sniomnaN .etrop ed sroh tnenneived slis )ruetcurtsed ruel ed leppa ceva( stiurtd tne melbanevnoc tnos noitpecxel ed noitcetd al ed tnemo m ua stiurtsnoc tnemeritne seuqitamotua stejbo sel : etpmoc ne sesirp tnemelbanevnoc tnos tnemetiart nos ed iulec noitpecxel ed tnemehcnelcd ed tniop ud tre fsnart el rap seuqovorp scolb ed seitros setner ffid sel srolauq uv a nO . noitpecxe enud tnemetiart el srpa em margorp ud noitucxel erviusruop ed temrep snoitpecxe sed noitseg al ruop ++C rap soporp emsinac m el ,32 ertipahc ua ni maxe snoval suon em moC
1

1 Les problmes poss par les objets automatiques

Complments sur les exceptions

Annexe B

secruosser sel rerbil essiup no ,tios elleuq elleuq ,noitpecxed sac neuq eriassecn tse li ,erbil tnemelbanevnoc tios e mmargorp nu snad esiuqca ecruosser etuot euq etiahuos nol iS .tnatsid ruetasilitu nu ceva noitacinu mmoc ed noisses enud erutrevuo ; b e w e ti s n u c e v a e l p m e x e r a p , n o i x e n n o c e n u d t n e m es si l b a t ; er u tir c n e re i hc i f n u d e g al l iu orre v ; reihcif nud erutrevuo ; eriom m tne mecalp me nud euqi man yd noitacolla ; t e j b o n u d e u qi m a n y d n oi t a r c : e uq s esr e v i d i ss u a s n o it c a s e d r e v u or t y t u e p n O .s n o i t ar p o s e d e ti usr u o p e n n o b al r u o p er i ar t n o c n o it c a e n u et iss e c n i u q n o i t c a et u ot e cr u os s er e d n o it isi u q c a d e mr et e c s u os e g n ar n O . e si l -ar ert sap en tuep noitarbil al tnod ecruosser ed noitisiuqcad emlborp nu esop noitpecxe enud tnemetiart srpa noitucxel ed etiusruop al euq erid tuep no ,elarng erina m enuD

. l a c o l eri a n n o it s e g n u d sa c el s n a d e m m ,s ti ur t d er t t n e vi o d st ej b o s le u q r s p u oc r i o v as e d e l bis s o p sr u oj u ot s a p ares en li te selpmis issua tnemerar tnores sesohc sel ,euqitarp nE .worht rap noitpecxel rehc - n e l c d e r , n o i t c u r t s e d e t t e c s r p a , e m m t i a r r u o p n O . ) e t i m i l _ t c e v ( h c t a c er i a n n oi ts e g e l s n a d eri a f e l e d r i o v r p er o c n e t i arr u o p n o , e ts il p mis el p m e x e t e c s n a d , u d n e t n e n e i B . e h c n e l c d t a e t i m i l _ t c e v e p y t e d n o i t p e c x e e n u u q s r o l s d t i u r t d s a p t s e n 1 v t e j b o l e u q t i o v n O
void f(int) { try { v1 = new vect(5) ; // allocation dynamique dun objet v1 de type vect // de 5 lments v1[n] = 0 ; // OK pour 0 <= n < 5 ; exception vect_limite sinon delete v1 ; // v1 sera convenablement dtruit en cas de fin // normale du bloc try } catch (vect_limite vl) { ..... // instructions de gestion de lexception vect_limite } ..... // instructions excutes dans tous les cas : ..... // sil ny a pas eu exception v1 a t dtruit ..... // sil y a eu exception, v1 na pas t dtruit }

: t ce v e p y t e d t e j b o n u t n e m e u q i m a n y d e u ol l a y f n oi t c n o f al e u q e c e d t n e i v e c n er f f i d el a pi c n ir p
684
Complments sur les exceptions ANNEXE B

2 La technique de gestion de ressources par initialisation

.)noitazilaitinI sI noitisiuqcA ecruosseR( .I.I.A.R ed sialgna ne ,tnevuos elrap nO .1


class ressource1 { public : ressource1 (...) : acquis_ressource1 (...) { // traitement raliser aprs lacquisition de ressource } } ; class ressource1 { public : ressource1 (...) { // acquisition de la ressource 1 } ~ressource1 () { // libration de la ressource 1 } } ;

: elp me xe te c s na d e m m o c , te j b o-s u os n u s n a d ecr u oss er e d n oi ti si u qc al r el os i r e h cre h c sr ol a t u a f lI .ecruosser enu riruqcauq sulp tiaf ecruosser enu icossa ruetcurtsnoc el euq tne melb -aborp tsec ,ertarappad euqsir e mlborp let nu iS .erbil sap ares en ecruosser al te )src tnemeritne stejbo sed sruetcurtsed sed euq leppa a yn li ,noitpecxed sac neuqsiup( leppa sap ares en 1ecruosser~ ,te ffe ne ,sac ec snaD .noitpecxe enu em m-iul ehcnelcd 1ecruosser ed ruetcurtsnoc el is resop es ed euqsir en e mlborp nucuauq rerussas tnadnepec tua f lI .1 ecruosser al ed noitarbil cnod te 1ecruosser~ ruetcurtsed ud leppa arua y li ,)tnabolgne colb leuq etropmin snad revuort es tuep eriannoitseg el tnod noitpecxe enu etius uo tnemellerutan tios ec euq( colb ec ed eitros ed sac sel suot snaD .yrt colb nu non uo ert tuep tnedcrp colb e L
{ ..... ressource 1 (...) ; // acquisition de la ressource 1 par appel du // constructeur de la classe ressource1 ..... }

: isnia aretnesrp es etnadnopserroc ecruosser al riruqcad nioseb tna ya emmargorp nU

: euq ellet essalc enu rerc nema ares no ,elp mexe raP .essalc emm ettec ed ruetcurtsed el snad tnasiaf es ecruosser al ed noitarbil al ,te ffe tec rc tne meuqificps essalc enud ruetcurtsnoc nu snad ecruosser enu riruqca eriaf tnemelp mis etsisnoc ellE .seuqitamotua stejbo sed ruetcurtsed ud euqita motua leppal rus eiuppas iuq noitasilaitini rap secruosser ed noitseg etid ehcramd enu etsixe li ,tia f nE .noitseuq ne secruosser sel rerbil ed selbapac te ) worht rap tne melleutnev tnahcnelcder sel( selbissop snoitpecxe sel setuot tnatpecretni seriannoit -seg ed itrossa ,yrt colb nu snad eria f es tiod ecruosser enud noitasilitu etuot ,te ffe nE .ecnat -rop mi euqleuq dnerp emmargorp el euq sd sexelpmoc tne memrtxe rineved tnevuep sesohc sel ,tnedcrp elpmexel ritnesserp essial el e mmoC .l-sellec tnemeuqinu te sesiuqca jd
1

2 - La technique de gestion de ressources par initialisation

685

. > e l b u o d < r t p _ o t u a e p yt e d t e j b o ertua nud ruelav al tce ffa arua iul nouq srpauq silitu ert arruop en dpa ,sac ec snaD : resilaitinil snas ,tnegilletni ruetniop nu eriurtsnoc issua tuep nO
double * add ; ..... auto_ptr<double> apd1(add) ; // auto_ptr sur le double point par add auto_ptr<double> apd2(new double) ; // auto_ptr sur un double quon a // a allou dynamiquement class acquis_ressource1 { public : alloc_ressource1 (...) { ..... // cens ne pas dclencher dexception } ~alloc_ressource1 () { ..... } } ; auto_ptr<double> apd ; // auto_ptr sur un double

: leusu ruetniop nud ruelav al ed ritrap tnegilletni ruetniop nu eriurtsnoc tuep nO .tniop tejbol ed ep yt el rap rtmarap tse rtp_otua sessalc ed nortap el ,erdnetta ys tuep no e mmoC .noitatce ffal uq eipocer rap ruetcurtsnoc ua neib issua euqilppas tiralucitrap etteC .)etniop eitrap al ed eriatirporp tse rtp_otua ep yt ed tejbo lues nuuq sio frap tid no( neil el udrep tna ya ne ertual ,etniop eitrap al icossa etser eipoc al tnavecer tejbol lues ,rtp_otua ep yt ed stejbod eipoc srpa ,iouqruop tseC .sio f al ruetniop elbairav elues enu uq nnod tejbo nu reicossan riovas ,etnatropmi etniartnoc enu retcepser tua f li ,ervu ne si m ert essiup e msinacm let nuuq ruoP .tniop tejbol tnemeuqitamotua tiurtd no ,etrop ed sroh tneived elbairav al is : esserdal tneitnoc ne iuq ruetniop elbairav al tniop tejbo nu ,rtp_otua ep yt ed tejbo nu snad ,reicossa etsisnoc ediL .rtp_otua sessalc ed nortap el rap srucorp stnegilletni sruetniop ed emro f al suos lituo ertua nu esoporp ++C ud dradnats euqhtoilbib a L .noitpecxed snoitautis sel tnemelbanevnoc rerg ed temrep noitasilaitini rap secruosser ed noitseg ed euqinhcet al tne mmoc riov ed snonev suoN .eriomm al tne m -elarng tse etnatropmi sulp al ,e mmargorp nu seriassecn secruosser setnerf fid sel imraP

.ecruosser al ed noitisiuqcal srpa ,1ecruosser snad utce ffe tne m -etiart el tnadnep ehcnelcd tse noitpecxe enu is sulp esop es en e mlborp nucua ,sio f etteC

686

3 Le concept de pointeur intelligent : la classe auto_ptr


Complments sur les exceptions ANNEXE B

3 - Le concept de pointeur intelligent : la classe auto_ptr

687

: s t n e g il l e t ni sruetniop sec ed iolpmel tnartsulli se mmargorp ed stelpmoc selpmexe xued icioV


#include <iostream> #include <memory> // pour la classe auto_ptr #include <vector> using namespace std ; main() { auto_ptr<vector<int> > apvi2 ; { int v[] = {1, 2, 3, 4, 5} ; auto_ptr<vector<int> > apvi1(new vector<int> (v, v+5)) ; (*apvi1)[2] = 12 ; cout << (*apvi1)[1] << " " << (*apvi1)[2] << "\n" ; // affiche 2 12 apvi2 = apvi1 ; // apvi1 et apvi2 pointent sur le meme vector // mais seul apvi2 est proprietaire du vector pointe (*apvi1)[2] = 20 ; // OK cout << (*apvi2)[1] << " " << (*apvi2)[2] << "\n" ; // affiche 2 20 } // ici apvi1 nexiste plus, mais le vector pointe appartient a vpi2 // cout << (*apvi1)[1] ; conduirait a une erreur de compilation cout << (*apvi2)[1] << " " << (*apvi2)[2] << "\n" ; // affiche toujours 2 20 } // ici apvi2 nexiste plus et le vector pointe est detruit #include <iostream> #include <memory> // pour la classe auto_ptr using namespace std ; class point { public : int x, y ; // champs exceptionnellement publics ici point(int abs=0, int ord=0) : x(abs), y(ord) {cout <<"construction point " << x << " " << y << " " << "\n" ; } ~point() {cout <<"destruction point " << x << " " << y << " " << "\n" ; } void affiche () { cout << "coordonnees : " << x << " " << y << "\n" ; } } ;

.stnegilletni sruetniop sed tnemennoitcnof el rertnom xueim ruop snoitcurtsnid colb nu tnemelleicifitra tiudortni snova suon ,sac xued sel snaD .1

) 1 ( s t n e g il l e t n i s r u e t n i o p e d n oi t a si l i t u d e l p m e x E

. t e l p m o c n i ts e t e j b o l i s e m m , e u q s ir e d s a p e tr o p m o c e n n o i t -asilitul tno d erid--tsec ,sergtni stejbo sed e uq rerc en ed lliesnoc srola tse li ,n oit - p e c x e e n u s r p a e r v i u sr u o p e s e ss i u p e m m ar g o r p u d n o i t u c x e l e u q e t i a h u os n o l i S . u o h c t n or u a s er t u a d euq srola ,issur riova tuep tejbo nu seriassecn secruosser seniatrec ed noitacollal ; s e u qi m a n y d s ei tr a p s e d t n a tr o p m o c st ej b o ert n e n o it at c e f f a d s a c n e r es o p es t u e p e m l b or p e d e p yt e m m e l ; si l a i ti n i l a m r u et n i o p nu ceva tejbo nu rinruof ed euqsir nouq sap ehcpmen eriomm noitacollal tseuq ecr u oss er e d n oi ti si u qc al t n e m el b a n e v n o c r er g e d t ia f e l ; eri o m m e d e u q na m e d esuac ruop uohc riova tuep euqiman yd eitrap enu tnatrop moc tejbo nud noitarc al : s e l p m e x e s e u q l e u q s n o t i C . e m l b o r p es o p n o i t a s i l i t u n o s e u q l e t t a t n u s n a d t e j b o n u r e r c e d e l b i s s o p e t s er l i , t u o t r g l a M . n o i t ar b i l r u e l e d e m l b or p e l t n e m - e l b a n e v n o c t n e l g r e cr u o s s e r e n u r ir u q c a r u o p t n e m m e d c r p s e s o p x e s e d o h t m s e L 2 . el it u s ul p e l t n el v r es sl i u q n oi t a u tis e tt e c s n a d ts e c is e m m ,snoitpecxe sed noitseg ed etxetnoc ud srohed ne selbasilitu tnos stnegilletni sruetniop se L 1

se uqrameR

)2 ( s tneg il le tni sru etniop ed noi tas il itud elp m ex E


main() { auto_ptr<point> ap1 ; { auto_ptr<point> ap2 (new point(1, 2)) ; (*ap2).affiche() ; // ou ap2->affiche() ; ap1 = ap2 ; // ap1 et ap2 pointe sur le meme point // mais seul ap1 en est maintenant proprietaire ap2->x=12 ; // on modifie lobjet par le biais de ap2 } // ici ap2 nexiste plus ; une tentative dutilisation telle // que ap2-> affiche() serait rejetee en compilation // mais lobjet pointe na pas ete detruit ap1->affiche() ; // ap1 pointe toujours sur le point }

688

Complments sur les exceptions ANNEXE B

non iuo iuo iuo iuo iuo iuo iuo iuo iuo iuo non

non iuo iuo iuo iuo iuo iuo iuo non iuo non non

non non non non non non non non iuo non iuo iuo

ei ma erb me m er tual uo nul euqi tat s erb me m euqi tat s erb me m erb me m erb me m erb me m erb me m erb me m erb me m erb me m

eima noit cnof erbmem noitcnof ertua rueta rpo ertua eteled wen >][ )( noi tat ceffa nois revnoc rue tcur tsed ruet cur tsnoc

e lleutr iv ert tueP

etir H

tuafd rap noisreV

eim a uo erbme M

noitcnof ed epyT

.elleutriv ert tuep elle is te etirh tse elle is ,tua fd rap noisrev enu etsixe lis ,eima uo erb mem noitcnof e mmoc eini fd ert tuep elle is ,sac euqahc snad ,tnasicrp ne ++C ne rertnocner tuep nol euq snoitcno f ed setros setner ffid sed etsil al ici snossinruo f suov suoN

Les diffrentes sortes de fonctions en C++

Annexe C

: n o it a t c e f f al ed te eipoc al ed etner ffid tne melatot euqitnams enu tnadnepec tiudnoc euqinhcet etteC .suqov tnevuos snova suon euq elpitlum noitarbil ed seuqsir sel retiv ruop ,lun tse secner fr ed ruetp moc nos is euq etnadnopserroc euqi man yd eitrap al eriurtd nen ed tif fus li ,tiurtd tse tejbo nuuqsrol ,snoitidnoc sec snaD .nnod tnatsni nu tnangisd al s t n er f f i d sr u et n i o p e d er b m o n el eri d- - ts e c , e u q i m a n y d t n e m e c al p m e n u s e c n er f r e d erb mon el ,ecnenamrep ne ,retp moc etsisnoc ellE . secner fr ed ruetp moc ud euqinhcet al leppa tnasia f ne euqiman yd eitrap ettec ed noitacilpud al retivd elbissop tse li siaM
vect a(5), b(12) ; // a contient 5 lments, b en contient 12 ..... a = b ; // a et b contiennent maintenant 12 lments // mais, ils restent indpendants a[2] = 12 ; // la valeur de a[2] est modifie, pas celle de b[2]

: c e v a , i s ni A .eipoc al ed te noitatce ffal ed ellerutan euqitnams al re mmon tiarruop nol euq ec tiudnoc redcorp ed noa f etteC .noitatce ffad ruetarpol snad euq eipocer ed ruetcurtsnoc el snad neib issua ec te , selleicifrepus seipoc sed uq ttulp sedno forp seipoc sed redc -orp ed eriassecn tse li ,euqi man yd eitrap enu etropmoc tejbo nuuq sd euq uv snova suoN

vect a(5), b(12) ; // a contient 5 lments, b en contient 12 ..... a = b ; // a et b dsignent maintenant le mme vecteur de 12 lments // a[i] et b[i] dsignent le mme lment a[2] = 12 ; // la valeur de a[2] est modifie ; il en va de mme // de celle de b[2] puisquil sagit du mme lment

Comptage de rfrences

Annexe D

.nyd_eitrap ep yt ed erutcurts enu rus ruetniop nu rap erg ares X ed euqi man yd eitrap a L .nyd_eitrap mon ed erutcurts enu snosilitu suon ,icossa ruetpmoc ud te euqiman yd eitrap al ed noitaicossal resilar ruop ,icI .T ep yt ed euqiman yd eitrap enu tnadssop X ep yt ed essalc etuot elbacilppa larng savenac nu snosoporp suov suoN .. .se c ner f r e d sr ue t p m oc se d ruoj esim snas stejbod seipocer sed tneiarenartne eluocd ne iuq tua fd rap sedoht m sed noitasilitul te snoitidnoc xued sec ed enul ed tcepser-non e L .inifdrus tios noitatce f fad ruetarpol euq te etsixe eipocer ed ruetcurtsnoc el euq elbasnepsidni tse li ,udnetne neiB .b rap cner fr tne mecalp mel ed secner fr ed ruetpmoc el retnemrcni ; lun tse ruetp moc el euqsrol noitarbil as redcorp te a rap cner fr tnemecalpmel ed secner fr ed ruetp moc el retnemrcd : t i o d b = a e u q e ll et n o it c urts n i e n u ; n o it a t c e f f a d r u e t ar p o l ; s e c n er f r e d r u e t p m o c n o s r e t n e m r c n i c n o d t e c n er f r j d t n e m -ecalpme nu rus tnatniop tejbo levuon nu resilaitini tiod li : eipocer ed ruetcurtsnoc el : cnod enrecnoc aleC .i fidom ertd euqsir tnadnopserroc tnemecalpmel tnangisd stejbod erb mon el euq sio f euqahc ruoj sim ert tiod secner fr ed ruetpmoc e L : s e c n er f r e d r u e t p m o c e l r us r i g a t n a v e d s e d o h t m s e L . e u q i m a n y d ei tr a p as si a m , t e j b o n u s a p non icossa ert tiod ecner fr ed ruetpmoc el ,cnod tnemetse finaM .enoz emm al tnang -isd stejbo sel suot ed sruetp moc sed ruoj esim al reutce f fed elici f fid srt tiares li ,ertuo ne ; enoz e mm enu rus tnatniop stejbod a y liuq sio f ed tnatua ruetpmoc ec reuqilpud tiaregilbo elle rac elbatiolpxe erug tsen noitulos erimerp a L .tejbol eicossa euqim - a n y d ei tr a p al s n a d u o e m m-i u l t ej b ol s n a d : t ir ps e l t n e n n e i v s t il i bis s o p x u e d ,ir oir p A : s ec ner fr e d r ue t p m oc ud t n e m ec al p m e L .ssicrp ert tneviod stniop xued ,euqinhcet ettec ervu ne ertte m ruoP
692
Comptage de rfrences ANNEXE D

// T dsigne un type quelconque (ventuellement classe) struct partie_dyn // structure "de service" pour la partie dynamique de lobjet { long nref ; // compteur de rfrence associ T * adr ; // pointeur sur partie dynamique (de type T) } ; class X { // membres donne non dynamiques // ..... partie_dyn * adyn ; // pointeur sur partie dynamique void decremente () // fonction "de service" - dcrmente le { if (!--adyn->nref) // compteur de rfrence et dtruit { delete adyn->adr ; // la partie dynamique si ncessaire delete adyn ; } }

693

public : X ( ) // constructeur "usuel" { // construction partie non dynamique // ..... // construction partie dynamique adyn = new partie_dyn ; adyn->adr = new T ; adyn->nref = 1 ; } X (X & x) // constructeur de recopie { // recopie partie non dynamique // ..... // recopie partie dynamique adyn = x.adyn ; adyn->nref++ ; // incrmentation compteur rfrences } ~X () // destructeur { decremente () ; } X & operator = (X & x) // surdfinition oprateur affectation { if (this != &x) // on ne fait rien pour a=a // traitement partie non dynamique // ..... // traitement partie dynamique { decremente () ; x.adyn->nref++ ; adyn = x.adyn ; } return * this ; } } ;

. eriatirporp tse ne selle ertned elues enu sia m ,erio m m tnem -ecalpme em m nu secner fr srueisulp ed sruojuot esopsid y no : noitatce ffad te eipoc ed euqitna ms ed e mro f ertua enu tiudnoc ,B exennAl etnesrp ,rtp_otua essalc a L

.se c ner f r ed egatp moc el rap etiudni ellec dnopserroc eipoc al ed te noitatce ffal ed euqitna ms a L

secnerfr ed egatpmoc el ruop larng savenac nU


e uqrameR avaJ n E

: sep ytotorp ed serbmem snoitcno f xued etropmoc tniop essalc enu is ,isniA .eriatne mlppus tnemugra nud ep yt el etros euqleuq ne tnautitsnoc leppa tna yal tejbol ed ep yt el ,euqilppas elle elleuqal essalc al ed ep yt el srpad ,trap ertuad ; r u ot er e d r u el a v as e d te st n e m -ugra ses ed ep yt el rap ,erocne ici ,erid--tsec ,erianidro noitcno f enu emmoc ,trap enud : t i n i f d es e ll e u q e c e d e t p m o c rinet arved noitasirtcarac as ,erbmem noitcno f enud sac el snaD .ruoter ed ruelav as ed iulec rap te stnemugra ses ed ep yt el rap noitseuq ne noitcno f al esirtcarac no ,tid tne mertuA : etnavius erina m al ed ,elleusu noitcno f enu rus ruetniop nu rini fd tuep nouq snoleppaR
int (*adf) (char, double) ; // adf pointe sur une fonction recevant deux arguments // (de type char et double) et renvoyant un int

. n o it a ut i s er i m er p a l s n a d e s i li t u s i a m a j e u q s er p t s e n el l e s i a m , s n o it -cno f serbmem xua emmoc sennod serb me m xua tnemeuqiroht euqilppas ellE .exenna ne ecalp as ei fitsuj iuq ec ,euqitarp ne esilitu uep noiton enud tigas lI .serbmem sed rus sruet -niop sed emmon nol euq ec rini fd ed tne melag temrep ++C siaM .)serianidro( snoitcnof sed rus sruetniop sed rini fd tnemmoc ,8 ertipahc ud 11 ehpargarap ua uv jd snova suoN

1 Les pointeurs sur des fonctions membres

Les pointeurs sur des membres

void dep_hor (int) ; void dep_vert (int) ;

Annexe E

: s e t c e r r o c t n o r e s s n o i t c u r t s n i s e C . a t ni o p u d m d a s n a d eunetnoc esserdad erbmem el arengisd mda*.a noisserpxel ,tniop ep yt ed tejbo nu tse a iS : se lbis sop sro l a tn or es s et n a vi us s no i ta tc e f fa se L .tniop essalc al ed tni ep yt ed ennod erbmem nu rus ruetniop nu tse mda euq aresicrp : noitaralcd al ,tni ep yt ed y te x sennod serbmem xued etrop moc tniop essalc enu iS .s er b m e m s n oi t c n o f s e d r us sr u et n i o p s e d r e il u ci tr a p s a c n u em moc rerdisnoc al tuep nO .esilitu tnemerar srt tse noiton ettec ,tid snoval suon e mmoC
int point::* adm ; adm = &point::x ; // adm pointe vers le membre x de la classe point adf = &point::y ; // adm pointe vers le membre y de la classe point (adp ->*adf) (3) ; point *adp ; (a.*adf) (3) ; adf = point::dep_hor ; // ou adf = & point::dep_hor ; adf = point::dep_vert ; void (point::* adf) (int) ;

.>- ed te . ed stnadnepdni ,sruetarpo xuaevuon ed tnos *>- te *. ...ruelav al rekcots ne sap tiarruop en no ; noitaci fingis ed sap an fda* noisserpxel : t i a f n E . l e u s u r u e t n i o p n u t i a t f d a is ti ari u d or p e s i u q e c tne meriartnoc ,noitaci fingis enucua ici tnon fda>-a uo )fda*(.a snoitaton sel ,trap ertuaD .fda snad eunetnoc ess er d al e d s n o lra p s u o n e u q e ga g na l e d s u b a ra p c n o d tse C .e n n o d es ser da d t ej b o n u d u o n n o d t e j b o n u d r u eir t ni l n o i ts e u q n e er b m e m el t n e m e l b a n e v n o c r es il a c o l e d t n a t t e mr e p noitamro fni enud tne melpmis tigas lI .ruetniop leuq etrop min euq ertit em m ua ,esserda enu sap tneitnoc en erbmem noitcnof enu rus ruetniop nu ,rueugir etuot ne ,euq areton nO .3 ruelav al tne mugra ne tnattemsnart iul ne ,fda snad eunetnoc tse esserdal tnod erb mem noitcnof al ed leppal ,pda esserdad tniop el ruop ,areuqovorp : n oi tc ur ts ni l

: tniop ep yt ed tejbo nud esserdal tse pda is ,e m m eD .3 ruelav al tnemugra ne tnatte msnart iul ne ,fda snad eunetnoc tse esserdal tnod erbmem noitcno f al ed leppal ,a tniop el ruop ,areuqovorp : e u q e ll et n o i t c urt s n i e n u , t n i o p e p yt e d t e j b o n u t s e a i S : s elb iss op srola tnores setnavius snoitatce ffa se L .ruelav enucua tna yovner en te ,tni ep yt ed tnemugra n u t n a v e c e r t n i o p e s s a l c a l e d e r b m e m n o i t c n o f e n u r u s r u e t n i o p n u t s e f d a e u q ar e s i c r p : n oi t ar al c d a l
696

2 Les pointeurs sur des membres donnes


Les pointeurs sur des membres ANNEXE E

: s ess al c x ue d se c s n or d is n o C . el a i v irt t s e s e n n o d s er b m e m s e d r us sr u e t n i o p x u a n o it - a si l ar n g as ; s er b m e m s n oi t c n o f s e d r us sr u e t ni o p s e d i u l e c , er ar s ni o m el s a c u a s n or et i m il suon suoN .egatirhl ed etxetnoc el snad noiton ettec tneived euq ec sno yoV .)sennod uo s n o it c n o f( ser b m e m se d r us sr ue t ni o p s e d r esi li t u te rer al c d t ne m m oc ri o v e d s n o ne v s u o N

. dnoces el r uop a tejbol ed x erb me m el r us ruetniop ,rei merp el r uop t niop e d reitne erb me m nu r us r u e t n i o p : s t n er f f i d s e p y t e d t n os n o i a t c e f f a l e d s e d n ar p o x u e d s e l e u q ar e t o n n O : e la g l li tse elle te noitaci fingis ed sap an etnavius noitatcef fal ,tniop ep yt ed tejbo nu tse a iS
adm = &a.x ; // incorrecte

. n oi t a c i f i n gis snas etser iuq mda* noisserpxel ruop e mm ed av ne lI .ici selbalav tnetser erbme m nud ess er d a d r e lr a p t n at sis n o c e g a g n a l e d s u b al e d s o p or p s et i a f s e u qr a m er s el , u d n e t n e n e i B
// le membre dadresse adm du point dadresse adp // reoit la valeur 5 int n = a->*adm ; // n reoit la valeur du membre dadresse adm // du point dadresse adp

: setcerroc tnores snoitcurtsni seC .pda snad eunetnoc tse esserdal tnod tniop el ruop mda esserdad erb me m el arengisd mda*>- pda noisserpxel : tniop ep yt ed tejbo nud esserdal tse pda is ,e mm eD
a.*adm = 5 ; // le membre dadresse adm du point a reoit la valeur 5 int n = a.*adm ; // n reoit la valeur du membre du point a dadresse adm point *adp ;

3 Lhritage et les pointeurs sur des membres

void (point:: * adfp) (int) ; void (pointcol:: * adfpc) (int) ; class point { ..... public : void dep_hor (int) ; void dep_vert (int) ; ..... } ; adp->*adm = 5 ;

: s n oi tar al c d se c s n or d is n o C

3 - Lhritage et les pointeurs sur des membres

class pointcol : public point { ..... public : void colore (int) ; ..... } ;

e uqrameR

697

cpfda

ed epyt el sap eifidom en

pfda = cpfda

xued sec sap ehcpmen aleC .stnerffid sepyt ed tnos

roh_ped::loctniop

euq ellet noitatceffa enu ,udnetne neib ,raC .2 .esserda emm al rengisd ed selobmys ,ruetalipmoc el ruoP .1 te
roh_ped: :tn iop

. e v ir d > es a b s n es e l s n a d u e il t n o s e ll e s er b m e m s n o it c n o f s e l r u o p e u q sr ol a ,esab > evird snes el snad tno f es serinred sec : stejbo sed rus sruetniop uo stejbo ertne seticilp mi snoisrevnoc xua troppar rap regrevid elb mes elgr ettec ,)sedno forp snos -iar sel erdnerpmoc ne sap ehcrehc en no is erid--tsec( secnerappa xua etimil es no iS

e uqrameR

! tnemetcerroc relliavart riovuop sap en ed tneiareuqsir )tniop ed setirh sap tnos en iuq sellec erid--tsec ,loctniop snad seinifd sellec( snoitcno f seniatrec ,tnemetse f -inaM .tniop ep yt ed tejbo nu ruop loctniop ed noitcno f elleuq etrop min releppa nema ert tiarruop nouq tiarei fingis alec , loctniop ed erbmem noitcno f enu rus ruetniop ep yt ud ruelav enu evioer pfda euq tiatpecca nol is ,ehcnaver nE .emlborp nucua cnod esop en aleC . loc -tniop ep yt ed tejbo nu ruop tniop ed etirh noitcno f enu releppa nema ert arruop nouq euqilp mi ,)ep ytotorp emm ed( tniop ed erb me m noitcno f enu rus ruetniop ep yt ud ruelav enu evioer cpfda euq ici retpeccad tia f e L .etnadnopserroc noitcno f al ed leppal evitini fd ne tnevres sruetniop sec euq resnep ed ti ffus li ,elgr ettec ed ecnenitrep al erdnerpmoc ruoP
2

: et n a vi us e l gr al uv rp + + C ? ertual tce ffa ert tuep leuqel ,tid tne mertuA .cpfda te pfda ertne tnatsixe tilibitapmoc al rus regorretnis tuep no siaM . loctniop ed serb mem sed tnemelag tnos trev_ped te roh_ped snoitcno f sel euqsiup
1

: s el ag l tn os s n oi ta tc e f fa se c , ud n et n e ne i B
698
Les pointeurs sur des membres ANNEXE E

adfpc = pointcol::dep_hor ; adfpc = pointcol::dep_vert ;

adfp = point::dep_hor ; adfp = point::dep_vert ; adfpc = pointcol::colore ;

Il existe une conversion implicite dun pointeur sur une fonction membre dune classe, en un pointeur sur une fonction membre (de mme prototype) dune classe ascendante.

: ruop e m m ed av ne lI

nouq ei fingis alec ; noitcno f stejbo sed sruojuot tnednopserroc semhtirogla sel snad suvrp leppar ed snoitcno f uo stacidrp sel ,trap ertuaD .ellavretni tec rap sngisd stneml sed euq ttulp )nif ,tubd [ ellavretni nud stneml sed relrap etsisnoc iuq egagnal ed subal tnev - u os s n or es il it u s u o n , ar e ts i x e n t u gi b m a e n u c u a e u qsr o l , t i c il p mis e d i c u os r a p , e u q z e t o N .etxet el snad seticilpxe srola tnores selle : seriassecn tnores snoitaton sertuad ,sac serar seuqleuq snaD .ednoces al ed iulec 2N te erimerp al ed stnem -ld erbmon el engisd 1N ,senrecnoc tnos secneuqs xued euqsrol ; stnemld erb mon nos engisd N ,enrecnoc tse ecneuqs elues enuuqsrol euq unevnoc snova suon ,etxet el reg -lla ruoP .esicrp snio m ,uadna L ed noitaton al cevauq ttulp ,)mumixa m nud emro f suos tnemelleutnev( snoitarpod sicrp erbmon nu ne snomirpxel suon ,e mron al tia f el em moC .elaivirt sap tsen elle o sac el snad ,emhtirogla euqahc ed tixelp moc al snouqidni suoN .t cer i d s c ca r u et ar tI : aI ; l e n n o it c er i di b r u et ar tI : b I ; lennoitceridinu ruetartI : uI ; e itr o s e d r u et ar t I : s I ; ert n ed r ue tar t I : eI : s et n a vi u s s n o i t a i v r b a s e l t n a s il i t u ne esicrp tse tnemugra ne suer sruetarti sed erutan a L .xue ertned trapulp al ed tnemen -noitcno f el euqilpxe iuq 72 ertipahc ud sellec euq seirogtac sem m sel tnavius sssalc tnos s l I . dr a d n at s e u q h t oi l bi b a l r a p s s o p or p s e m ht ir o g l a s e d t c a x e e l r el t i nr u o f e x e n n a e tt e C

Les algorithmes standard

Annexe F

.)sioFfN eleppa neib tse neg_tcf noitcno f al( sio FbN sruelav ed erb mon nos te tubd noitisop as rap ini fd tse ellavretnil siam ,etareneg euq esohc emM

)neg_tcf ,sioFbN ,tubd ( etareneg


uI n_

d io v

N_ETARENEG

.tnadnopserroc tnemecalp mel einruo f ruelav al etce ffa te neg_tcf noitcno f al ,)nif , tubd[ ellavretnil ed sruelav sed enucahc ruop ,elleppA

)neg_tcf ,nif

uI

,tu bd ( etare neg


uI

d io

v ETARENEG

.trapd ed ellavretnil tneitrappa evirrad ellavretnil ed tubd el euqsrol ypoc ed tnemecalpmer ne elitu tuotrus ts e e m h tir o gl a t ec ; eip oc al et ia f t ses o ) e ip oc r ue la v er i nre d( e l la vre t ni l ed tubd el rus ruetarti nu eiovner ; )nif ,tubd[ ellavretnil rinetrappa sap tiod en )ic-ellec tnemelues te( noitisop ed ruelav al ; retsixe tneviod stnad -nopserroc stne mecalp me sel ; ellavretnil ed ni f al issua sia m ,eipoc erimerp al ed tnemecalp mel cnod engisd iuq noitisop ed ritrap ,rei merp el srev tne ml reinred ud tnassergorp ne ,)nif ,tubd[ ellavretnil eipoc ,ypoc e mmoC

)n o itis op

bI

, ni f

bI

,tubd ( dra wkcab_ypoc


bI

bI

DRAWKCAB_YPOC

.eipoc al etia f tses o ellavretnil ed ni f al rus ruetarti nu eiovner ; dra wkcab_ypoc riruocer sruojuot tuep no ,sac el tse let is ; )nif ,tubd[ ellavretnil rinetrappa sap tiod en )ic-ellec tnemelues te( noitisop ed ruelav al ; retsixe tneviod stnadnops -erroc stne mecalpme sel ; noitisop ed ritrap ,)nif ,tubd[ ellavretnil eipoC

)noitisop ,nif ,tubd ( ypoc


sI eI eI

sI

YP OC

.retsixe tneviod stnadnopser - r o c s t n e m e c a l p m e s e l ; n o i t i s o p e d ri tr a p s e v i t u c s n o c s i o F b N r u e l a v e c a l P

) r u e l a v , s i o F b N , n o i t i s o p ( n _ ll i f
sI

di o v

N_LLIF

.)nif ,tubd[ ellavretnil snad ruelav ecalP

)ru elav ,n if

uI

, t u b d ( ll i f
uI

di o v

L LI F

.serianidro snoitcno f sed uo snoitcno f sessalc serporp ses ,seinifdrp snoitcno f sessalc sed riruocer tuep
700
Les algorithmes standard ANNEXE F

1 Algorithmes dinitialisation de squences existantes

.snosiarapmoc 2N * 1N mu mixam ua : tixelp moC .eriartnoc sac el snad ,1_nif ed ruelav al ,etsixe lis tneml tec rus ruetarti nu tinruoF .)2_nif ,2_tubd[ ellavretnil ed stneml sed nul )== ed snes ua( lag tneml reimerp el ,)1_nif ,1_tubd[ ellavretnil snad ,ehcrehceR

)2_n i f

uI

,2_tub d

uI

,1_n if

uI

, 1 _ t u b d ( f o _t s ri f _ d n i f F O _ T S RI F _ D N I F
uI uI

.tacidrp ud sleppa 2N * )1 + 2N -1N( mumixa m ua : tixelp moC .b_tacidrp erianib tacidrp ud noitacilppal rap ecalp mer tse tilagd nosiarap -moc al euq ecner ffid ettec ceva ,etnedcrp noisrev al em moc ennoitcnoF

) b _ t a c i d r p , 2 _ ni f

uI

,2_tubd

uI

, 1 _ ni f

uI

,1_tubd ( dne_dnif
uI

uI

.snosiarapmoc 2N * )1 + 2N -1N( mu mixam ua : tixelp moC .))(dne ed tne meriassecn sap tigas en li ,noitnetta( 1_nif ruelav al tinruof ,sap etsixen tneml let nu iS .)2_nif ,2_tubd[ ellavretnil ed stne ml xua )== ed snes ua( xuag tios 1_tubd ne tnatubd ecneuqs al ed stne ml sel euq let )1_nif ,1_tubd[ ellavretnil ed tneml reinred el rus ruetarti nu tinruoF

) 2 _ ni f

uI

,2_tubd

uI

, 1 _ ni f

uI

,1_tubd ( dne_dnif
uI

uI

DN E_DNIF

.tacidrp ud sleppa N mu mixam ua : tixelpmoC .))(dne ed tnemeriassecn sap tigas en li ,noitnetta( ; nonis nif ruelav al ,etsixe lis ,i ficps u_tacidrp erianu tacidrp ua tnas -ia fsitas )nif ,tubd[ ellavretnil ed tneml reimerp el rus ruetarti nu tinruoF

)u_tacidrp ,nif

eI

, t u b d ( f i _ d ni f
eI

eI

FI_DNIF

. ti - la g d s no si ara p m o c N m u m i xa m u a : t i xe l p m o C .) ) ( d n e e d t n e m eri ass e c n s a p t i g a s e n l i , n oi t n e t t a( ; n o n i s n i f r u el a v al , e ts i x e l is ) = = e d s n es u a( r u e l a v lag )nif ,tubd [ ellavretnil ed tneml reimerp el rus ruetarti nu tinruoF

) r u e l a v , n i f , t u b d ( d ni f
eI eI

eI

DNIF

.segnahc N : tixelpmoC .rehcua -vehc es sap tneviod en sellavretni xued se L .2_tubd ne tnanemmoc elliat em m ed ellavretnil ceva )nif ,tubd[ ellavretnil ed stneml sel egnahc

)2_tub d
701

uI

,1_n if

uI

,1_tubd ( segnar_pa ws
uI

2 Algorithmes de recherche
uI

SEGNAR_PAWS

2 - Algorithmes de recherche

ua ,b_tacidrp erianib tacidrp el rap tia f es ruelav te tne ml nu ertne nosiarap - mo c a l e uq e cn er f f i d e tt ec ce va et n ed c rp n o isre v a l e m m oc e nn o it c no F

)b_tacidrp ,ruelav ,sioFbN ,nif

uI

,tubd ( n_hcraes
uI

uI

.s no si ara p m o c N mu mixam ua : tixelp moC .nonis nif ruelav al ,etsixe ecneuqs ellet enu is tneml reimerp el rus ruetarti nu tinruoF .ruelav )== ed snes ua( xuag stne ml sioFbN ed ecneuqs enu ,)nif ,tubd[ ellavretnil snad ehcrehceR

)ruelav ,sioFbN ,nif

uI

,tubd ( n_hcraes
uI

uI

N_ HCRA ES

. t ac id rp u d s leppa 2N * 1N m u m i xa m ua : tixelpmoC .tilag rap eria f es ed ueil ua ,b_tacidrp erianib tacidrp el rap tia f es secneuqs xued sed enucahc ed stneml xued ed nosiarapmoc al euq ecner ffid ettec ceva ,hcraes ed etnedcrp noisrev al emmoc ennoitcno F

)b_tacidrp ,2_nif

uI

,2_tub d

uI

,1_n if

uI

,1_tubd ( hcraes
uI

uI

.s n os iar a p m oc 2 N * 1 N m u m ix a m ua : ti xe l p m o C . no n is 1 _ n i f n i f al ,etsixe elle is ,ecnerrucco ettec ed tneml reimerp el rus ruetarti nu tinruo F .)2_nif ,2_tubd[ ellavretnil ed ellec )==( euqitnedi stnemld ecneuqs enud ecnerrucco erimerp al ,)1_nif ,1_tubd[ ellavretnil snad ,ehcrehceR

)2_n i f

uI

,2_tub d

uI

,1_n if

uI

,1_tubd ( hcraes
uI

uI

HCRA ES

.nonis nif ruelav al ,tnetsixe slis ,stneml xued sed rei merp el rus ruet -arti nu tinruo f ; b_tacidrp erianib tacidrp ua tnasia fsitas s fisseccus stne m -l xued ed ecnerrucco erimerp al ,)nif ,tubd[ ellavretnil snad ,ehcrehceR

)b_tacidrp ,nif

uI

,tub d ( dn if_tn ecajda


uI

uI

.nonis nif ruelav al ,tnetsixe slis ,xuag stne m - l x u e d s e d r ei m er p el r us r u e t ar t i n u t i nr u o f ; ) = =( x u a g s fis s e c c us s t n e m -l xued ed ecnerrucco erimerp al ,)nif ,tubd[ ellavretnil snad ,ehcrehceR

) ni f

uI

,tub d ( dn if_tn ecajda DN IF_ TN ECAJDA


uI uI

tacidrp ud sleppa 2N * 1N mumixa m ua : tixelpmoC .eriartnoc sac el snad ,1_nif ed ruelav al ,etsixe lis tneml tec rus ruetarti nu tinruoF .b_tacidrp erianib tacidrp ua )2_nif ,2_tubd[ ellavretnil ed stneml sed nul ceva ,tnasia fsitas tne ml reimerp el ,)1_nif ,1_tubd[ ellavretnil snad ,ehcrehceR

)b_tac id rp ,2_n if

uI

,2_tubd

uI

, 1 _ ni f

uI

,1_tubd ( fo_tsrif_dnif
uI

uI

702

Les algorithmes standard ANNEXE F

- n er ; e ll a vr e t n il e d t u b d el i s s u a t e ei p o c er i m er p a l e d t n e m e c a l p m e l c n o d engisd noitisop ici ,noitnetta ; retsixe tneviod stnadnopserroc stne mecalpme sel ; noitisop ed ritrap ,esrevni erdrol snad ,)nif ,tubd[ ellavretnil eipoC

) no iti so p , n i f
sI

bI

,tubd ( ypoc_esrever
bI

sI

YP OC_E SR EVER

.se g n ah c 2/N tnemetcaxe tixelpmoC .)nif ,tubd[ ellavretnil ed unetnoc el esrevnI

)n i f

bI

,tubd ( esrever
bI

diov

E SR EVER

.tacidrp ud sleppa 1-N tnemetcaxe : tixelpmoC .< ruetarpol ed ecalp te ueil ne b_tacidrp erianib tacidrp el t na si li t u ne si a m , t n e m e l e _ n i m e d et n e d cr p n oisr e v a l e m m o c e n n o it cn o F

)b_tacidrp ,nif

.snosiarapmoc 1-N tnemetcaxe : tixelp moC .)<( rueir fni tios iul en ellavretnil ed stneml sertua sed nucuauq l e t , ) n i f , t u b d [ e ll a vr e t n i l e d t n e m l r e i m er p e l r u s r u e t ar t i n u t i nr u o F

.tacidrp ud sleppa 1-N tnemetcaxe : tixelpmoC .< ruetarpol ed ecalp te ueil ne b_tacidrp erianib tacidrp el tnasilitu ne siam ,tnemele_xam ed etnedcrp noisrev al e mmoc ennoitcnoF

)b_tacidrp ,nif

.snosiarap moc 1-N tnemetcaxe : ti x e l p m o C . el l a vr e t ni l e d s t n e m l s er t u a s e d n u c u a ) <( r u e ir f ni ti os en iuq )nif ,tubd[ ellavretnil ed tneml reimerp el rus ruetarti nu tinruoF

.t ac - i d r p u d s n o it a c il p p a N m u m i x a m u a : ti x el p m o C . t il a g r a p eri a f e s e d u e il
703

3 Algorithmes de transformation dune squence


uI

,tub d ( t ne me le_n i m
uI

uI

) ni f

uI

,tub d ( t ne me le_n i m TNEMELE_NIM


uI uI

uI

,tub d ( tne me le_ xa m


uI

uI

) ni f

uI

,tub d ( tne me le_ xa m TNEMELE_XAM


uI uI

3 - Algorithmes de transformation dune squence

.snoitatce ffa N mumixam ua : tixelpmoC .eipoc al etia f tses o ellavretnil ed ni f al rus ruetarti nu tinruoF .retsixe tneviod stnadnopserroc stne mecalpme sel ; etator ruop euq noa f em m al ed eini fd erialucric noitatu mrep enud stcef fa ,)nif ,tubd[ ellavretnil ed stne ml sel ,noitisop ed ritrap ,eipoceR

) no iti so p , n i f
sI

uI

, ue il i m

uI

,tubd ( ypoc_etator
uI

sI

YPOC_ETATOR

. s e g n a h c N m u m i x a m u a : t i x e l p m o C . t u b d n e u n e v t i o s u ei l i m r a p n g i s d tne mll ,noitatumrep srpa ,euq ellet tse ruelp mal tnod )nif , tubd[ ellav -retnil ed stneml sed )ehcuag al srev( erialucric noitatumrep enu eutce ffE

)n i f

uI

, ue il im

uI

,tub d ( etat or
uI

di o v

ETATOR

.tacidrp ud snoitacilppa N tnemetcaxe : tixelp moC .rehcuavehc es s a p t n e v i o d e n s el l a vr e t ni x u e d s e L . e i p o c a l et i a f t s e s o e l l a vr e t ni l e d ni f a l r us r u e t ar t i n u ti nr u o F r ets i x e t n e v i o d s t n a d n o ps err o c s t n e m -ecalpme sel ; ruelav_vuon rap u_tacidrp erianu tacidrp ua tnasia fsitas stne m -l sel suot tnaalpmer ne ,noitisop ed ritrap )nif ,tubd[ ellavretnil eipoceR

)ruelav_vuon ,u_tacidrp ,noitisop ,nif ,tubd ( fi_ypoc_ecalper FI_YP OC_E CAL P ER


sI eI eI sI

.snosiarap moc N tnemetcaxe : tixelp moC .rehcuavehc es sap tneviod en sellavretni xued se L .eipoc al etia f tses o ellavretnil ed ni f al rus ruetarti nu tinruoF .retsixe tneviod stnad -nopserroc stnemecalp me sel ; ruelav_vuon rap ruelav_cna )==( xuag stne m -l sel suot tnaalpmer ne ,noitisop ed ritrap )nif ,tubd[ ellavretnil eipoceR

)ruelav_vuon ,ruelav_cna ,noitisop ,nif ,tubd ( ypoc_ecalper YP OC_E CAL P ER


sI eI eI sI

. t a ci d r p u d s n o i t -acilppa N tne metcaxe : tixelpmoC .ruelav_vuon rap u_tacidrp erianu tac -idrp ua tnasiafsitas stneml sel suot ,)nif ,tubd[ ellavretnil snad ,ecalpmeR

)ruelav_vuon ,u_tacidrp ,nif

uI

,tubd ( fi_ecalper
uI

di o v

FI_E CAL P ER

.snosiarapmoc N tnemetcaxe : tixelpmoC .ruelav_vuon rap ruelav_cna ) = =( x ua g s t n e m l s el s u ot ,) nif , t u b d [ el la vre t ni l s n ad , ec alp m e R

)ruelav_vuon ,ruelav_cna ,nif

uI

,tub d ( e calp er
uI

di o v

E CAL P ER

.snoitatce ffa N tne metcaxe : tixelpmoC .rehcuavehc es sap tneviod en sellav -retni xued se L .eipoc al etia f tses o ellavretnil ed ni f al rus ruetarti nu eiov
704
Les algorithmes standard ANNEXE F

.selbissop snoitatu mrep sed erdrol tnemelp mis tnasrevni ne ,noitatumrep_txen e mmoc tnennoitcno f semhtirogla xued seC
bI bI bI bI loob loob

)b_tacidrp ,nif ) ni f

,tub d ( n oitatu mr ep_verp ,tub d ( n oitatu mr ep_verp NOITATUMREP_VERP

.segnahc 2/N mumixa m ua : tixelp moC .b_tacidrp erianib tacidrp ud ritrap nnodro tse selbissop snoitatumrep sed elbmesnel e u q e c n er f fi d el u e s e tt e c c e v a , e t n e d c r p n oisr e v a l e m m o c e n n o it c n o F

)b_tacidrp ,nif

bI

,tubd ( noitatumrep_txen
bI

loob

.s e g n a h c 2 / N m u m i x a m u a : ti x e l p m o C . e l bis s o p n o it -atumrep eri merp al unever tse nol o sac el snad eslaf ruelav al te etnavius noitatumrep enu neib tiatsixe lis eurt ruelav al tinruoF .erimerp al euq ertuad neir tsen elbissop erinred al tnavius noitatumrep al euq erdisnoc nO .euqihpargocixel erinam enud ,< ruetarpol ed ritrap nnodro tse selbissop snoitatumrep sed elbmesnel euq esoppus lI .)nif ,tubd[ ellavretnil ed stnem -l sed etnavius noitatu mrep al e mmon nol euq ec esilar e mhtirogla teC

)n i f

bI

,tubd ( noitatumrep_txen NOITATUMREP_TXEN


bI loob

.)erio mm ed tnem masi ffus ed esopsid nol is N k e m m te( segnahc N go L N mu mixam ua te tacidrp ud sleppa N tne metcaxe : tixelp moC .sevresrp t n o s s e itr a p x u e d s e d e n u c a h c e d r u e ir t n il s t n e m l s t n er f f i d s e d sevitaler snoitisop sel euq ecner ffid ettec ceva ,noititrap e mmoc ennoitcnoF

)u_tac id rP ,n i f

bI

,tub d ( n oit itrap_e lbats


bI

bI

NOITITRAP_ELBATS

.tacidrp ud sleppa N tnemetcaxe te segnahc 2 /N mumixam ua : tixelpmoC .sap tno fsitas yn )nif , ti[ ellavretnil ed stne ml sel euq sidnat ,tacidrp ua tno fsitas )ti ,tubd[ ellavretnil ed stne ml sel euq let ti ruetarti nu tinruoF .sertua sel suot tnava tnevirra tacidrp ua tnasia fsitas stne ml sel suot euq ellet noitasinagror enud tigas li ; u_tacidrp erianu tacidrp el rus tnadno f es ne )nif ,tubd[ ellavretnil ed noititrap enu eutce ffE

)u_tac id rP ,n i f
705

bI

, t u b d ( no itit rap
bI

bI

NOITITRAP

3 - Algorithmes de transformation dune squence

.s no si ara p m o c N tne metcaxe : tixelpmoC . fitaler erdro ruel tnevresnoc senimil non sruelav sel euq erid--tsec ,elbats tse emhtiroglaL .ruelav ed gnahc riova li-tuep ,sulp ua tuot ; tiurtd tsen tneml nucua ,noitnettA .ruelav )==( selag tnos iuq sellec ed sessarrabd ,)nif ,tubd[ ellavretnil snad setnesrp tnemelaitini sruelav sel setuot enneitnoc )ti ,tubd[ ellavretnil euq let ti ruetarti nu tinruo F

) r u e l a v , ni f

uI

,tub d ( ev o mer
uI

uI

EVOMER

.ilp mer isnia ellavretnil ed ni f al rus ruetarti nu tinruoF .2_tubd ne tnane mmoc elliat emm ed ellavretnil ed te )1_nif ,1_tubd[ ellavretnil ed gnar emm ed sruelav sed enucahc b_noitarpo )stne mugra xued ( erianib noitcnof al tnauqilppa ne seunetbo sruelav sel )retsixe tneviod stnadnopserroc stne ml sel( noitisop ed ritrap ecalP

)b_noitarpo ,noitisop ,2_tubd ,1_nif


sI eI

. il p m er is ni a el la vr et ni l e d ni f al rus ruetarti nu tinruoF .)nif ,tubd[ ellavretnil ed sruelav sed enucahc u_noitarpo )tne mugra nu ( erianu noitcno f al tnauqilppa ne seunetbo sruelav sel )retsixe tneviod stnadnopserroc stne ml sel( noitisop ed ritrap ecalP

) u _ n o i t a r p o , n o i t i s o p , ni f
sI

.se g n ah c 1-N tn e m et ca x e : tixelpmoC .tne mugra ne einruo f ruelav enu tnat n ,)n ,0[ ellavretnil tnan -etrappa ruelav enu rinruof tiod noitcno f etteC .drasah ua serb mon sed rerng ruop ruetarng noitcno f al tnasilitu ne sia m ,elffuhs_modnar euq esohc emM

)ru etar ng ,n if

.se g n ah c 1-N tn e m et ca x e : tixelp moC .)nif ,tubd[ ellavretnil ed stneml sel drasah ua titrapR

706

4 Algorithmes de suppression
eI

,1_tubd ( mrofsnart
eI

sI

eI

,tubd ( mrofsnart
eI

sI

MRO FSNAR T

aI

,tubd ( elffuhs_modnar
aI

di o v

)n if

aI

,tubd ( elffuhs_modnar ELFFUHS_MODNAR


aI di o v

Les algorithmes standard ANNEXE F

.snosiarap moc N tnemetcaxe : tixelp moC .rehcuavehc es sap tneviod en sellavretni xued se L .eipoc al etia f tses o ellavretnil ed nif al rus ruetarti nu tinruoF .)==( selag sevitucsnoc sruelav srueisulp ed s e c n e u q s s e d r u e l a v er i m er p al e u q t n a vr es n o c e n n e ,)r e tsi x e t n e vi o d st n a d -nopserroc stneml sel( noitisop ed ritrap )nif ,tubd[ ellavretnil eipoceR

)noitisop ,nif ,tubd ( ypoc_euqinu YPOC_EUQINU


sI eI eI sI

.tacidrp ud sleppa N tnemetcaxe : tixelp moC .b_tacidrp erianib tacidrp nud e mro f suos einruo f tse noititpr ed noit - i d n o c al e u q e c ner f fi d e tt ec ce va , e t n e d cr p n o isre v a l e m m oc e n n o it c n o F

)b_tac id rp ,n if

uI

,tub d ( e uqin u
uI

uI

.s n os iar ap m oc N t ne m -etcaxe : tixelpmoC .ruelav ed te ecalp ed gnahc riova li-tuep ,sulp ua tuot ; tiurtd tsen tneml nucua ,noitnettA .erimerp al rap secalp mer tnos )==( selag sevitucsnoc sruelav srueisulp ed secneuqs sel leuqel snad ,)nif ,tubd[ ellavretnil ednopserroc )ti ,tubd[ ellavretnil euq let ti ruetarti nu tinruoF

)n if

uI

,tub d ( e uqin u
uI

uI

EUQINU

.tacidrp ud sleppa N tnemetcaxe : tixelp -moC .u_tacidrp erianu tacidrp nud emro f suos einruo f tse noitanimild noitidnoc al euq ecner ffid ettec ceva ,ypoc_evomer emmoc ennoitcnoF

) u _ t a c i d r p , n o i t i s o p , ni f
sI

eI

,tub d ( f i_ev om er
eI

sI

FI_Y POC_ EVOMER

.snosiarap moc N tnemetcaxe : tixelp -moC .elbats tse e mhtiroglal ,evomer em moC .rehcuavehc es sap tneviod en sellavretni xued se L .eipoc al etia f tses o ellavretnil ed ni f al rus ruetarti nu tinruoF .ruelav )==( xuag stneml sel tnamirppus ne ,)retsixe tneviod stnad -nopserroc stneml sel( noitisop ed ritrap )nif ,tubd[ ellavretnil eipoceR

)ruelav ,noitisop ,nif ,tubd ( ypoc_evomer


sI eI eI

sI

Y POC_ EVOMER

.tacidrp ud sleppa N tnemetcaxe : tixelp moC .u_tacidrp erianu tacidrp nud e mrof suos einruo f tse noit -animild noitidnoc al euq ecner ffid ettec ceva ,evomer em moc ennoitcnoF

)u_tac id rp ,n i f
707

uI

,tubd ( fi_evomer
uI

uI

FI_ EVOMER

4 - Algorithmes de suppression

snad sirt tnemelbanevnoc stne ml sreimerp sel tnaalp ne te < ruetarpol rus tnasab es ne ,)nif ,tubd[ ellavretnil ed stneml sed leitrap irt nu esilaR

)n i f

aI

, u ei l i m

aI

,tubd ( tros_laitrap
aI

di o v

TROS_LAITRAP
.s l e p p a N g o L N er d n e c s e d t u e p n o , er i o m m e d z ess a d esopsid noitatne mlpmil is ; tacidrp ud snoitacilppa )N go L( N mu m -ixa m ua : tixelpmoC .tcirts elbia f erdrod noitaler enu erdnopserroc tiod iuq pmoc_tcf erianib tacidrp el rus tnasab es ne tros_elbats euq esohc emM
2

)p mo c_tc f ,n if

aI

,tubd ( tros_elbats
aI
2

di o v

.snosiarap moc N go L N erdnecsed tuep no ,er i o m m e d z ess a d es o ps i d n o it at n e m l p m il is ; s n osi ara p m o c ) N g o L( N mumixam ua : tixelp moC .elbats tse e mhtirogla tec ,tros tnemeriartnoC .< ruetarpol rus tnasab es ne ,)nif ,tubd[ ellavretnil ed stne ml sel eirT

)n if

aI

,tubd ( tros_elbats
aI

di o v

TROS_ELBATS
.tacidrp ud sleppa N go L N enne yo m ne : tixelpmoC .pmoc_tcf erianib tacidrp el rus tnadno f es ne ,)nif ,tubd[ ellavretnil ed stneml sel eirT

) p m o c _tc f , ni f

aI

,tubd ( tros
aI

di o v

.snosiarap moc N go L N enne yo m ne : tixelp moC .tcepser tnemeriassecn sap tsen )< ed snes ua( stnelaviuq stne ml sed fitaler erdrol euq erid--tsec ,elbats sap tsen e mhtiroglaL .< ruetarpol rus tnadno f es ne ,)nif ,tubd[ ellavretnil ed stneml sel eirT

) ni f

aI

,tubd ( tros
aI

di o v

TROS

.tacidrp ud sleppa N tne metcaxe : tixelpmoC ... fitisnart sap tiares en inruo f tacidrp el o sac uauq ecnatropmid tia f ne an euqramer ettec ; ecneuqs enud erimerp al ceva non te etnedcrp al ceva nosiarap moc rap sruoj -uot tia f es ruelav enud noitanimild noisicd al euq areton nO .u_tacidrp erianib tacidrp nud e mro f suos einruo f tse sruelav xued ed noititpr ed noitidnoc al euq ecner ffid ettec ceva ,ypoc_euqinu e mmoc ennoitcno F

)b_tacidrp ,noitisop ,nif ,tubd ( ypoc_euqinu


sI eI eI

708

5 Algorithmes de tri
sI

Les algorithmes standard ANNEXE F

.tacidrp ud snoitacilppa N enne yom ne : tixelp moC .tcirts elbia f erdrod noitaler enu erdnopserroc tiod iuq pmoc_tcf erianib tacidrp el rus edno f es emhtirogla tec ,< ruetarpol rus redno f es e d u e i l u a u q e c n e r f f i d e t t e c c e v a , e t n e d cr p n o isre v a l e m m oc e n n o it c n o F

) p m o c _tc f , ni f

aI

,n oit is op

aI

,tub d ( t ne me le_htn
aI

diov

.snosiarapmoc N enne yom ne : tixelpmoC .ecalp e d r e g n a h c t n e v u e p el l a vr e t ni l e d s t n e m l s ert u a s e L .ir t n u d e ti us a l , l tiarevuort es iuq )nif ,tubd[ ellavretnil ed tne mll )nif ,tubd[ ellavretnil r i n e t r a p p a c n o d ti o d i u q n o i t i s o p r a p n g i s d t n e m e c a l p m e l s n a d e c a l P

) ni f

aI

,n oit is op

aI

,tub d ( t ne me le_htn
aI

diov

TNEMELE_HTN
.s irt stne mld erb mon el tnat N ,snosiarap moc N go L N norivne : tixelp moC .tcirts elbia f erdrod noitaler enu erdnopserroc tiod iuq pmoc_tcf erianib tacidrp el rus edno f es e mhtirogla tec ,< ruetarpol rus rednof es ed ueil uauq ecner ffid ettec ceva ypoc_tros_laitrap e mmoc ennoitcnoF

)pmoc_tcf ,nif_sop

aI

,tubd_sop

aI

, ni f

eI

,tubd ( ypoc_tros_laitrap
eI

aI

.sirt tne mevitce ffe stnemld erb mon el tnat N ,snosiarapmoc N go L N norivne : tixelpmoC .rehcuavehc es sap tneviod en sellavretni xued se L .)enigirod ellavretnil elag uo erueir fni elliat ed tse reinred ec euqsrol ) n i f _ s o p ( n o i t a ni ts e d e d el l a vr et n il e d ni f a l r us r u e t ar t i n u ti nr u o F . s s il i t u sap tnores en stneml sreinred ses ,trapd ed ellavretnil euq stne mld sulp etropmoc noitanitsed ed ellavretnil iS .)nif ,tubd[ ellavretnil ed stne ml sed latot uo leitrap irt ud tatlusr el )nif_sop , tubd_sop[ ellavretnil snad ecalP

) ni f _ s o p

aI

,tubd_sop

aI

, ni f

eI

,tubd ( ypoc_tros_laitrap YPOC_TROS_LAITRAP


eI aI

.sirt stnemld erbmon el tnat N ,snosiarap moc N go L N norivne : tixelp moC .tcirts elbia f erdrod noitaler enu erdnopserroc tiod iuq pmoc_tcf erianib tacidrp el rus ednof es e mhtirogla tec ,< ruetarpol rus redno f es ed ueil uauq ecner ffid ettec ceva ,tros_laitrap em moc ennoitcnoF

) p m o c _t c f , n i f

aI

, u ei li m

aI

,tubd ( tros_laitrap
aI

diov

.sirt stnemld erbmon el tnat N ,snosiarap moc N go L N nor -ivne : tixelpmoC .esopmi tsen tilibats ed etniartnoc enucuA .euqnocleuq erdro nu snad scalp tnos )nif ,ueilim[ ellavretnil ed stne ml se L .)irt ud ruelpmal tini fd iuq ellavretni tec ed elliat al tsec( )ueilim ,tubd[ ellavretnil
709

5 - Algorithmes de tri

.snosiarap moc 1+N go L 2 mumixa m ua : tixelp moC .< ruetarpol r a p ti u d ni er dr o l e d u n e t et p m o c , e ll a vr e t n i t e c e d t ni o p l e u q etr o p m i n ne ersni ert essiup ruelav euq let )2ti ,1ti[ ellavretni dnarg sulp el tinruo F

)ru elav ,n i f

uI

,tubd ( egnar_lauqe > , < riap E GNAR_LAUQ E


uI uI uI

. sn os iar ap m oc 1+ N g o L m u m -ixa m ua : tixelp moC .pmoc_tcf erianib tacidrp el rap tiudni erdrol ed unet etp moc ,ersni ert tuep ruelav o noitisop erinred al rus ruetarti nu tinruo F

)pmoc_tcf ,ruelav ,nif

uI

,tubd ( dnuob_reppu
uI

uI

.s no si ara p m o c 1+N go L mu mixam ua : tixelpmoC .< ruetarpol rap tiudni erdrol ed unet etp moc ,ersni ert tuep ruelav o noitisop erinred al rus ruetarti nu tinruo F

)ruelav ,nif

uI

,tubd ( dnuob_reppu DNUOB_R EP PU


uI uI

.s n os iarap m oc 1 + N g o L m u m i xa m ua : tixelp moC .pmoc_tcf erianib tacidrp el rap tiudni erdrol ed unet etpmoc ,ersni ert tuep ruelav o noitisop erimerp al rus ruetarti nu tinruo F

)pmoc_tcf ,ruelav ,nif

uI

,tubd ( dnuob_re wol


uI

uI

. sn os iar ap m oc 1+ N g o L mumixam ua : tixelp moC .< ruetarpol rap tiudni erdrol ed unet etpmoc ,ersni ert tuep ruelav o noitisop erimerp al rus ruetarti nu tinruo F

)ruelav ,nif

uI

,tubd ( dnuob_re wol DNUOB_R EW O L


uI uI

.s n oi ta t ne m -rcni )N go L(O )N(O ed essap no ,tnemsicrp sulp ; p=+ti elues enu rap secalp mer ert t n e v u e p + + t i e mr o f a l e d s n oi t a t n e m r c n i p e d s e i r s s e n i a t r e c o e r u s e m a l s n a d , s e c n a m r o f -rep sel tne mergl retnemgua tuep no ,tcerid scca sruetartid esopsid nol euqsrol ,siaM .slennoitceridinu sruetarti selpmis ed ceva rennoitcno f tnevuep semhtirogla sec suoT .B.N

710

6 Algorithmes de recherche et de fusion sur des squences ordonnes


Les algorithmes standard ANNEXE F

.nonis snosiarap -moc N go L N ,eriom m ed tnemmasi ffus ed esopsid nol is snosiarapmoc 1-N : tixelp moC .< ruetarpol rap tiudni erdrol rus tnasab es ne )nif ,tubd[ ellavretnil snad )nif ,ueilim[ te )ueilim ,tubd[ sellavretni xued sel ennoisuF

) ni f

bI

,u e il im

bI

, t u b d ( e gre m _ ec al p ni EGREM_ECALPNI
bI diov

.tacidrp ud sleppa 1-2N+1N sulp ua : tixelpmoC .pmoc_tcf erianib tacidrp el rap tiudni erdrol rus esab es nol euq ecner ffid ettec ceva ,etnedcrp noisrev al emmoc ennoitcnoF

) p m o c _ t c f , n o i t i s o p , 2 _ ni f , 2 _ t u b d
sI eI

eI

,1_nif ,1_tubd ( egrem


eI eI

sI

.s n osi arap mo c 1-2N+1N s ulp u a : t i xe lp m o C .) t ne hc u a ve hc es enigirod sellavretni xued sel euq tidretnin neir ,ehcnaver ne( enigirod sellavretni sel rehcuavehc sap tiod en evirrad ellavretniL .dnoces ud xuec tnava sruojuot tnessiarappa ellavretni reimerp ud xuec ,rennoisuf sellavretni sel snad tnessiarappa stnelaviuq stneml sed is ; evirrad ellav -retnil snad tcepser tse enigirod sellavretni sed nul snad stnelaviuq stnem -ld fitaler erdrol : elbats tse emhtiroglaL .< ruetarpol rap tiudni erdrol rus tnadno f es ne ,)retsixe tneviod stnadnopserroc stneml sel( noitisop ed ritrap ,)2_nif ,2_tubd[ te )1_nif ,1_tubd[ sellavretni xued sel ennoisuF

) n o i t i s o p , 2 _ ni f , 2 _ t u b d
sI eI

eI

,1_nif ,1_tubd ( egrem


eI eI

sI

EGREM

.tacidrp ud sleppa 2+N go L sulp ua : tixelpmoC .eriartnoc sac el snad eslaf ruelav al te )pmoc_tcf tacidrp el rap etiudni noitaler al ed snes ua( ruelav tnelaviuq tneml nu ,)nif ,tubd[ ellavretnil snad ,etsixe lis eurt ruelav al tinruoF

)pmoc_tcf ,ruelav ,nif

uI

,tubd ( hcraes_yranib
uI

loob

.snosiarapmoc 2+N go L sulp ua : tixelpmoC .eriartnoc sac el snad ,eslaf ruelav al te ,ruelav tnelaviuq tneml nu ,)nif ,tubd[ ellavretnil snad ,etsixe lis eurt ruelav al tinruoF

)ruelav ,nif

uI

,tubd ( hcraes_yranib HCRAES_YRANIB


uI loob

.< ruetarpol ed ueil ua pmoc_tcf erianib tacidrp el rap tiudni erdrol rus tnasab es ne ,etnedcrp noisrev al em moc ennoitcnoF

)pmoc_tcf ,ruelav ,nif


711

uI

,tubd ( egnar_lauqe > , < riap


uI uI uI

6 - Algorithmes de recherche et de fusion sur des squences ordonnes

erimerp al dnopserroc tneml reimerp el : ellavretni reimerp ud selleitrap sem mos sel tnanetnoc ,)nif ,tubd[ ellavretnil euq elliat em m ed ellavretni nu ,)retsixe tneviod stnadnopserroc stne ml sel( noitisop ed ritrap ,erC

)noitisop ,nif ,tubd ( mus_laitrap MUS_LAITRAP


sI eI eI sI

.)tne mugra rei merp ne einruo f tnat ellavretni reimerp ud etnaruoc ruelav al( dorp_tcf noitcnof al ed leppal rap tiudorp ed noitarpol te )tnemugra rei m -erp ne einruo f tse elumuc ruelav al( lumuc_tcf noitcno f al ed leppal rap )+( l u m uc e d n o it arp ol tn a alp mer ne , et n e d crp n o isre v a l e m m oc e nn o it c no F

,tin i_lav ,2_tub d

eI

,1_n if

eI

,1_tubd

eI

)dorp_tcf ,lumuc_tcf ( t cud orp_r enn i rue lav

. t i n i _ l a v e l ai ti n i r u e l a v a l e d t n e m g u a ,2_tubd ne tnatubd rueugnol e mm ed sruelav ed ecneuqs al ed te )2_nif ,1_tubd[ ellavretnil ed sruelav sed ecneuqs al ed erialacs tiudorp el tinruo F

)tini_lav ,2_tubd ,1_nif ,1_tubd ( tcudorp_renni ruelav TCUDORP_RENNI


eI eI eI

.)dnoces ne ,tnaruoc tne mll ed ellec ,tnemugra r ei merp ne ei nr u o f t se et nar u oc e l u m u cc a ru el a v a l( ep y t e m m e c e d ta tl us r nu tnassinruo f te snrecnoc stneml sed ep yt ud stnemugra xued tnavecer ,lumuc_tcf noitcno f al rap siam ,+ ruetarpol rap eini fd sulp tnatn euq -ilppa noitarpol : tnasilarng al ne ,etnedcrp noisrev al em moc ennoitcno F

)lumuc_tcf ,elaitini_lav ,nif

eI

,tubed ( etalumucca ruelav


eI

.)nif , tubd[ ellavretnil ed stneml sed nucahc ed ruelav al , t i n i _ l a v el ai ti n i r u e l a v al ) + r u et ar p o( t n at u o j a n e e u n e t b o r u el a v a l ti nr u o F

)tini_lav ,nif

eI

,tubed ( etalumucca ruelav ETALUMUCCA


eI

.nonis sleppa N go L N ,erio m m ed tne mmasi ffus ed esopsid nol is ,tacidrp ud sleppa 1-N : tixelp moC .pmoc_tcf erianib tacidrp el rap tiudni erdrol rus esab es n ol e u q e c n er f fi d et t e c c e v a , e t n e d c r p n o isr e v al e m m o c e n n o it c n o F

) p m o c _tc f , ni f

712

7 Algorithmes caractre numrique


bI

, u e il i m

bI

,tub d ( e g r e m _ e c a l p n i
bI

di o v

Les algorithmes standard ANNEXE F

tacidrp ud sleppa 1-2N*1N 2 mu mixam ua : tixelp moC .sruelav xued ed tilagl ed redicd ruop pmoc_tcf erianib tacidrp el tnasilitu ne sia m ,etnedcrp noisrev al e mmoc ennoitcnoF

)pmoc_tcf ,2_nif ,2_tubd ,1_nif


eI eI

eI

,1_tub d ( s edu lcn i


eI

loob

.snosiarapmoc 1-2N*1N 2 mu mixam ua : tixelp moC .)ellavretni dnoces el snad sio f n sniom ua rerugi f arved elle ,ellavretni reim - er p e l s n a d si o f n er u g i f r u e l a v e n u is( , t i d t n e m er t u a : ti l ar ul p e m m a l c e v a ,)2_nif ,2_tubd[ ellavretnil snad )==( elag ruelav enu dnopserroc ,)1_nif ,1_tubd[ ellavretnil tnanetrappa ruelav etuot ,is eurt ruelav al tinruoF

)2_nif ,2_tubd ,1_nif


eI eI

eI

,1_tub d ( s edu lcn i


eI

loob

S EDU LCNI

.ffid_tcf noitcno f al ed leppal rap )-( ecnerf - fid ed noitarpol tnaalpmer ne ,etnedcrp noisrev al e mmoc ennoitcnoF

)ffid_tcf ,noitisop ,nif ,tubd ( ecnereffid_tnecajda


sI eI eI

.rc ellavretnil ed nif al rus ruetarti nu tinruoF .gnahcni etser tneml reimerp e L .1-i gnar ed iulec te i gnar ed tnem -ll ertne )- ruetarpo( ecner ffid al tnasia f ne tneitbos ,reimerp el si mroh ,i gnar ed tnemll : ellavretni rei merp ec ed s fitucsnoc stneml xued ertne secner ffid sel tnanetnoc ,)nif ,tubd[ ellavretnil euq elliat emm ed ellavretni nu ,)retsixe tneviod stnadnopserroc stneml sel( noitisop ed ritrap ,erC

.)tnemugra reimerp ne einruof tse elu muc ruelav al( lumuc_tcf noitcno f al ed leppal rap )+( noitam -mos ed noitarpol tnaalp mer ne ,etnedcrp noisrev al em moc ennoitcnoF

. r c e ll a vr e t n il e d n i f al r u s r u e t ar t i n u ti nr u o F . e ti us e d is n i a t e sr u el a v serimerp xued sed em mos al tneml dnoces el ,)nif ,tubd[ ed ruelav


713

8 Algorithmes caractre ensembliste


sI

)noitisop ,nif ,tubd ( ecnereffid_tnecajda ECN ER EF FID_T NECAJDA


sI eI eI sI

) l u m u c _ t c f , n o i t i s o p , ni f
sI

eI

,tubd ( mus_laitrap
eI

sI

8 - Algorithmes caractre ensembliste

. ta c -idrp ud sleppa 1-2N*1N*2 mu mixam ua : tixelpmoC .sellavretni xued sel rennodro ivres tna ya noitaler al ed ecnelaviuqd sessalc xua erdnopserroc t i o d r ei nr e d e c , er o c n e L .sr u e l a v x u e d e d t i l a g l e d r e di c d r u o p p m o c _ t c f eri a ni b t a c i d r p el t n asi li t u n e s i a m , e t n e d c r p n o isr e v a l e m m o c e n n o it c n o F

,n oit is op

sI

,2_nif

eI

,2_tub d

eI

, 1 _ ni f

eI

)pmoc_tcf ,1_tub d ( n oit ces retn i_tes


eI sI

.snosiarapmoc 1-2N*1N*2 mumixam ua : tixelpmoC .rc ellavretnil ed ni f al rus ruetarti nu tinruoF .rehcuavehc es sap tneviod en sellavretni xued se L .R ed ecnelaviuqd sess a lc x u a er d n o p serr oc ar ve d ) = =( st n e m l x ue d e d t il a g l te R n o it al er emm al tnavius sirt ert tneviod stneml se L .tatlusr el snad sio f )n ,n(nim artarappa li ,dnoces el snad sio f n te ellavretni reimerp el snad sio f n tarappa tne ml nu is : elaminim tilarulp al ceva ,)2_nif ,2_tubd[ )1_nif ,1_tubd[ sellavretni xued xua tnemnatlumis tnanetrappa stneml sed emro f ecneuqs enu ,)retsixe tneviod stnadnopserroc stne ml sel( noitisop ed ritrap ,erC

)noitisop ,2_nif ,2_tubd ,1_nif


sI eI eI

eI

,1_tub d ( n o itc esr etni_t es N OI T C ES R E T NI_ T ES


eI sI

. ta c -idrp ud sleppa 1-2N*1N*2 mu mixam ua : tixelpmoC .sellavretni xued sel rennodro ivres tna ya noitaler al ed ecnelaviuqd sessalc xua erdnopserroc t i o d r ei nr e d e c , er o c n e L .sr u e l a v x u e d e d t i l a g l e d r e di c d r u o p p m o c _ t c f eri a ni b t a c i d r p el t n asi li t u n e s i a m , e t n e d c r p n o isr e v a l e m m o c e n n o it c n o F

,n oit is op

sI

,2_n if

eI

,2_tubd

eI

, 1 _ ni f

eI

,1_tubd

eI

)pmoc_tcf ( n o inu_te s
sI

.snosiarapmoc 1-2N*1N*2 mumixam ua : tixelpmoC .rc ellavretnil ed ni f al rus ruetarti nu tinruoF .rehcuavehc es sap tneviod en sellavretni xued se L .R ed ecnelaviuqd sess a lc x u a er d n o p serr oc ar ve d ) = =( st n e m l x ue d e d t il a g l te R n o it al er emm al tnavius sirt ert tneviod stneml se L .tatlusr el snad sio f )n ,n(xam artarappa li ,dnoces el snad sio f n te ellavretni reimerp el snad sio f n tarappa tne ml nu is : elamixam tilarulp al ceva ,)2_nif ,2_tubd[ )1_nif ,1_tubd[ sellavretni xued sed nul snio m ua tnanetrappa stneml sed e mrof ecneuqs enu ,)retsixe tneviod stnadnopserroc stne ml sel( noitisop ed ritrap ,erC

) n o i t i s o p , 2 _ ni f , 2 _ t u b d
sI eI

eI

,1_nif ,1_tubd ( noinu_tes


eI eI

sI

N OI N U_ T ES
714
Les algorithmes standard ANNEXE F

.t ac -idrp ud sleppa 1-2N*1N*2 mu mixa m ua : tixelpmoC .sellavretni xued sel rennodro ivres tna ya noitaler al ed ecnelaviuqd sessalc xua erdnopserroc tiod reinred ec ,erocne L .sruelav xued ed tilagl ed redicd ruop pmoc_tcf erianib tacidrp el tnasilitu ne sia m ,etnedcrp noisrev al e mmoc ennoitcnoF
sI

,2_n i f

eI

,2_tub d

eI

,1_nif

eI

)p m oc_t cf ,n o itis op ,1_tubd ( ecnereffid_cirtemys_tes


eI sI

.snosiarap -moc 1-2N*1N*2 mumixa m ua : tixelpmoC .rc ellavretnil ed ni f al rus ruetarti nu tinruoF .rehcuavehc es sap tneviod en sellavretni xued se L .R ed ec ne la v i u q d s ess al c x ua er d n o p serr oc ar ve d ) = =( st n e m l x ue d e d t il a g l t e R n o it al er e m m a l t n a v i us s ir t er t t n e vi o d s t n e m l s e L . t at l u s r el s n a d sio f |n-n| artarappa li ,dnoces el snad sio f n te ellavretni reimerp el snad siof n tarappa tne ml nu is : tilarulp al ed etpmoc tneit no ; rei merp ua rinetrappa snas ,dnoces ua tnanetrappa uo )2_nif ,2_tubd[ ellavretnil rinetrappa snas )1_nif ,1_tubd[ ellavretnil tnanetrappa stne ml sed e mrof ecneuqs enu ,)retsixe tneviod stnadnopserroc stneml sel( noitisop ed ritrap ,erC
sI

,2_n i f

eI

,2_tub d

eI

,1_nif

eI

)n o itis op ,1_tubd ( ecnereffid_cirtemys_tes ECNEREFFID_CIRTEMMYS_TES


eI sI

.t ac -idrp ud sleppa 1-2N*1N*2 mu mixa m ua : tixelpmoC .sellavretni xued sel rennodro ivres tna ya noitaler al ed ecnelaviuqd sessalc xua erdnopserroc tiod reinred ec ,erocne L .sruelav xued ed tilagl ed redicd ruop pmoc_tcf erianib tacidrp el tnasilitu ne sia m ,etnedcrp noisrev al e mmoc ennoitcnoF

,no it is op

sI

,2_n if

eI

,2_tub d

eI

,1_nif

eI

)p m oc_t cf ,1_tubd ( ecnereffid_tes


eI sI

.snosiarapmoc 1-2N*1N*2 mumixam ua : tixelpmoC .rc ellavretnil ed ni f al rus ruetarti nu tinruoF .rehcuavehc es sap tneviod en sellavretni xued se L .R ed ecnelaviuqd sessalc xua erd -nopserroc arved )==( stneml xued ed tilagl te R noitaler emm al tnavius sirt ert tneviod stneml se L .tatlusr el snad sio f )n-n ,0(xam artarappa li ,dnoces el snad sio f n te ellavretni reimerp el snad sio f n tarappa tne ml nu is : tilarulp al ed etpmoc tneit no ; )2_nif ,2_tubd[ ellavretnil rinetrappa snas )1_nif ,1_tubd[ ellavretnil tnanetrappa stne ml sed e mrof ecneuqs enu ,)retsixe tneviod stnadnopserroc stneml sel( noitisop ed ritrap ,erC

)noitisop ,2_nif ,2_tubd ,1_nif ,1_tubd ( ecnereffid_tes ECN ER EF FID_T ES


sI eI eI eI eI sI

8 - Algorithmes caractre ensembliste

715

. sn os iar ap - m o c N g o L N m u mi x a m u a : t i x el p m o C .sr u e l a v s e l r e n n o dr o r u o p p m o c _ t c f eri a ni b t a c i d r p el t n asi li t u n e s i a m , e t n e d c r p n o isr e v a l e m m o c e n n o it c n o F

)p m oc_t cf ,n i f aI ,tub d aI( paeh_t ro s

di o v

.snosiarap moc N go L N mu mixam ua : tixelp moC .tcepser tne meriassecn sap tsen )< ed snes ua( stnelaviuq stneml sed fitaler erdrol euq erid--tsec ,elbats sap tsen e mhtiroglaL .setnassiorc sruelav rap ennodro ecneuqs enu ne )nif ,tubed[ ellavretnil rap ini fd sat el e mro fsnarT

)n i f aI ,tub d aI( paeh_t ro s

di o v

PAEH_TROS
.s n o s -iarap moc N go L mumixam ua : tixelpmoC .sat el rennodro ruop pmoc_tcf eri a ni b t a c i d r p el t n asi li t u n e s i a m , e t n e d c r p n o isr e v a l e m m o c e n n o it c n o F

) p m o c _t c f , n i f

aI

,tubd ( paeh_hsup
aI

di o v

.snosiarapmoc N go L mumixa m ua : tixelpmoC .sat nu tios )nif ,tubed[ euq noa f ed ,1-nif rap ngisd tne mll etuoja emhtiroglal ,< ruetarpol rus t n a d n o f es n E . e d il a v s a t n u t n e m e l a it i ni ert t i o d ) 1 - n i f , t u b e d [ e c n e u q s a L

)n i f

aI

,tubd ( paeh_hsup
aI

di o v

P A E H_ HS U P
.snosiarap moc N*3 mu mixam ua : tixelp moC .sat el rennodro ruop pmoc_tcf eri a ni b t a c i d r p el t n asi li t u n e s i a m , e t n e d c r p n o isr e v a l e m m o c e n n o it c n o F

)pmoc_tcf ,nif

aI

,tubd ( paeh_ekam
aI

di o v

.snosiarapmoc N*3 mu mixam ua : tixelpmoC .< ruetarpol rus tnadno f es ne ,sat nu ne )nif ,tubd[ ellavretnil e mro fsnarT

) ni f

aI

,tubd ( paeh_ekam
aI

di o v

PAEH_EKAM

716

9 Algorithmes de manipulation de tas


Les algorithmes standard ANNEXE F

.2sop te 1sop sruetarti xued sel rap sngisd stneml sed sruelav sel egnahc

)2sop

uI

,1s op ( pa ws_ ret i


uI

d io v

PAWS_RETI

.== ruetarpol ed ecalp al ,b_tacidrp erianib tacidrp el tnasilitu ne ,etnedcrp noisrev al e mmoc ennoitcnoF

)b_tacidrp ,2_tubd ,1_nif ,1_tubd ( lauqe


eI eI eI

loob

.2_tubd ne tnanemmoc elliat e m m e d e ll a vre t n il e d s t na d n o pserr oc s t ne m l x ua ) = = e d s nes ua( x ua g tnos )2_nif ,1_tubd[ ellavretnil ed stne ml sel suot is eurt ruelav al tinruoF

)2_tubd ,1_nif ,1_tubd ( lauqe


eI eI eI

loob

LAUQE

. ta tl us r n e t c f ti nr u o f ; )nif ,tubd[ ellavretnil ed stneml sed nucahc tcf noitcno f al euqilppA

)tcf ,nif ,tubd ( hcae_rof tcf HCAE_ROF


eI eI

.u_tacidrp erianu tacidrp ua tnasia fsitas )nif ,tubd[ ellavretnil ed sruelav ed erbmon el tinruoF

)u_tacidrp ,nif ,tubd ( fi_tnuoc erbmon FI_TNUOC


eI eI

.) = = e d s nes u a ( r u el a v s el a g ) n i f , t u b d [ e l l a vr e t ni l e d sr u e l a v e d er b m o n e l t i nr u o F

) r u e l a v , ni f

eI

,tub d ( t n u o c e r b m o n
eI

TNUOC

. sn os -iarap moc N go L 2 mu mixam ua : tixelpmoC .sat el rennodro ruop pmoc_tcf erianib tacidrp el tnasilitu ne sia m ,etnedcrp noisrev al e mmoc ennoitcnoF

)p m oc_t cf ,n i f aI ,tub d aI( paeh_p op

.snosiarapmoc N go L 2 mumixam ua : tixelpmoC .sat nu tios )1-nif ,tubed[ euq etros ne tia f ,< ruet -arpol rus tnadno f es ne ,te 1-nif te tubed rap sngisd stneml sel egnahc emhtiroglaL .edilav sat nu tnemelaitini ert tiod )nif ,tubed[ ecneuqs a L

)n i f aI ,tub d aI( paeh_p op

10 Algorithmes divers
diov diov

P A E H_ P O P
717

10 - Algorithmes divers

. < r u e t ar p o l r us t n a d n o f e s n e ,) e p y t e m m n u d ert tneviod iuq( 2_ruelav te 1_ruelav sruelav xued sed etitep sulp al tinruo F

)2_ruelav ,1_ruelav( nim ruelav


. < r u e t ar p o l r us t n a d n o f e s n e ,) e p y t e m m n u d ert t n e v i o d i u q( 2 _ r u e l a v t e 1 _ r u e l a v sr u e l a v x u e d s e d e d n ar g s ul p a l ti nr u o F

NIM

)2_ruelav ,1_ruelav( xam ruelav


.s n o s -iarap moc 2N*1N sulp ua : tixelp moC .< ruetarpol ed ecalp al b_tacidrp erianib tacidrp el tnasilitu ne ,etnedcrp noisrev al emmoc ennoitcno F

XAM

,2_nif

eI

,2_tub d

eI ,

1 - ni f

eI

)b_tacidrp ,1_tubd ( erapmoc_lacihpargocixel


eI loob

.s no si ara p m o c 2 N * 1 N s u l p ua : ti x el p m o C .e d n oc es al t n a v a t ara p pa e c n e u qs er i m er p al is eurt ruelav al tinruoF .< ruetarpol rus tnasab es ne ,)2_nif ,2_tubd[ te )1_nif ,1_tubd[ secneuqs xued sel ertne )eriannoitcid nu snad stom xued e d n os iara p m o c a l e u g ol a na( e u qi h par g oc i xe l n os iar a p m oc e n u e ut ce f f E

)2_nif ,2_tubd
eI

eI ,

1-nif ,1_tubd ( erapmoc_lacihpargocixel ERAPMOC_LACIHPARGOCIXEL


eI eI loob

718

Les algorithmes standard ANNEXE F

snoitidE xua ilbup ,

C egagna L

.selloryE egarvuol snad C ud dradnats euqhtoilbib al ed etlpmoc noitpircsed enu zerevuort suoV .1

.t n a d n o ps err o c e t t- n e r e i h ci f ud mon el tse leuq esicrp te euqhtoilbib-suos enu dnopserroc ehpargarap euqahC . ++C ne t r t n i n u r e t n e s r p t n a v u o p s n o i t c n o f s e l a p i c n i r p s e l tir c d e x e n n a e t n es r p a L . + + C n e s e s - il it u s ul p t n os e n se n ia tre c si a m ,s el b iss ec ca t n ets er s n o it c n o f s ec se t u ot , + + C n e ,e ir o ht n E .euqhtoilbib-suos al ed sorca m uo snoitcno f sed tnemennoitcno f nob ua selitu selob m ys sniatrec ed snoitini fd sel ; setnadnopserroc sorca m sed snoitini fd sel ; s e t n a d n o ps err o c s n o it c n o f s e d s e t t- n e s e l : t n e m e l l e it n e s s e tnatrop moc ett-ne reihci f nu icossa tse euqhtoilbib-suos euqahc ; seuqhtoilbib-suos srueisulp ne esividbus tse euqhtoilbib ettec ,tnemsicrp sulP .dradnats euqhtoilbib enud unetnoc el te C egagnal ud noitpircsed al sio f al tiassinruo f C egagnal ud ISNA emron a L
1

ditions Eyrolles

Les principales fonctions de la bibliothque C standard

Annexe G

719

nu tiardneitbo nol euq zetoN .rc ares li ,sap etsixen liS .tiurtd ares unetnoc )neicna( nos ,etsixe reihci f el iS .ruoj esim ruop noitarc : +w .)elleitneuqs noa f ed( sevitucsnoc serutirc uo serutcel srueisulp renahcned elbissop sio fetuot tse lI .keesf rap reihcif ed ruetniop el rennoitisop snas ,erutcel enud etius al erutirc enu uo erutirc enud etius al erutcel enu resilar ed elbissop sap tsen li srolauq zetoN .retsixe tiod reihci f e L .)erutirc te erutcel( ruoj esim : +r .w edom ua srola en mar es no rc ares li ,sap etsixen liS .udnet ares li ,jd etsixe reihci f el iS .)dneppa( reihcif ed nif ne erutirc : a .udrep tse unetnoc )neicna( nos ,etsixe liS .rc tse li ,sap etsixen reihci f el iS .tne melues erutirc : w .retsixe tiod reihci f el ; tnemelues erutcel : r : setnavius sel tnos edom ed selbissop sruelav se L .uohc a erutrevuol is lun ruetniop nu uo ,)ELIF ini fdrp ep yt ed erutcurts enu rus ruetniop( xul f nu ,ruoter ne ,tinruoF .reihcifmon rap euqidni ess er d al , e n a h c e n u d e mr o f s u os , i nr u o f ts e m o n e l t n o d r ei h ci f el er v u O )edo m * rahc tsnoc ,reihcif m on * rahc tsnoc( nepof * ELIF

NEPOF

. s dr a d n at s e i t r o s a l t e e r t n e l s e i c o s s a s e r u t c u r t s s e l l e t e d s i n i f d r p s m o n s e d t n o s t u o dt s t e n i d t s s e l o b m y s s e L .) ... s er i a i d mr et n i s e n n o d s el r e k c o ts r u o p n o p m a t , er ut c e l e d u o er u tir c d edo m ,mon( reihci f nud noitseg al seriassecn snoita mrofni sel tnenneitnoc sp mahc sel tnod erutcurts ep yt nud e m ynon ys nu e mmoc fedepyt rap ini fd tse ELI F elob m ys e L

. C e g a g na l u d e g at ir hl , etr os e u q le u q n e , t n as i u d art e x i f r p e l ( e d u ei l ua t i a v u ort n o ,elpmexe raP .++C ed xuec ed stner ffid tnemergl tneiat ett-ne sreihcif sed smon se L
c o i dt s c h.oid ts

.egarvuod ni f ne utis xednil retroper suov ed ti ffus suov li ,esicrp noitcno f enud noitpircsed al zehcrehc suov is ,snio mnaN .euqitbahpla erdro rap non te ,ett-ne reihci f rap sessalc tnos ici setircd snoitcnof se L

720

1.1 Gestion des fichiers


.B .N

1 Entres-sorties (cstdio)
C nE

e uqrameR

Les principales fonctions de la bibliothque C standard ANNEXE G

enahc al snad tatlusr el ecalp te i ficps tamrof ud noitcno f ne )...( stne mugrad etsil al snad sennoitne m tnemelleutnev sruelav sel titrevnoC
; )... ,tamrof ,tuodts( ftnirpf ; )... ,tamrof( ftnirp
*

)... ,tamrof * rahc tsnoc ,hc

rahc( ftnirps tni

FTNIRPS

: tn el a vi uq t se

: euq z et oN .ruerred sac ne evitagn ruelav enu uo stirc tnemevitce ffe sertcarac ed erb mon el tinruo F .)tuodts( dradnats eitros al rus tatlusr el tirc siup ,i ficps tamrof ud noitcno f ne )...( stne mugrad etsil al snad sennoitne m tnemelleutnev sruelav sel titrevnoC )... ,ta mr of * rahc tsnoc( ftnirp tni .ruerred sac ne e v i t a g n r u e l a v e n u u o st ir c t n e m e v it c e f f e s er t c ar a c e d er b m o n el t i nr u o F .uqidni xulf el snad tatlusr el tirc siup ,i ficps tamrof ud noitcno f ne )...( stne mugrad etsil al snad sennoitne m tnemelleutnev sruelav sel titrevnoC )... ,ta mrof * rahc tsnoc ,xulf * ELIF( ftnirpf tni

FTNIRP

FTNIRPF

.ehpargarap tnesrp ud nif al liatd ne etircd tse noitacifingis al tnod ta mrof ed sedoc ed te seuqnocleuq sertcarac ed sio f al esopmoc ,tamrof emmon sertcarac ed enahc enu tnesilitu snoitcno f sec setuoT

.eriartnoc sac el snad 0 ruelav al te ruerred sac ne FOE ruelav al tinruoF .tnadnopserroc reihci f el e mre f te nop mat ec ubirtta eriomm ecapsel euollasd ,nrecnoc xul f ua icossa nopmat el tnemelleutnev ediV
)x ulf

* ELIF( es olcf tni

.) u e il t n or u a s n oi t ut -itsbus seniatrec euq reificps ruop , talsnart edom ua dnopserroc t euq issua tid nO( .erianib reihci f nu eria ffa a nol euq esicrp b erttel al ; etxet ed reihci f nu eria ffa a nol euq esicrp t erttel a L .stnedcrp sedo m 6 s e d n u c a h c s ert t el x u e d s e c e d e n u l r et u oj a d el b iss o p ts e l i ,s er t u a sed etxet ed sreihci f sel eugnitsid noitatnemlp mil euqsrol : b uo t .reihci f ed ni f ne nnoitisop ares ruetniop el ,etsixe liS .rc ares li ,sap etsixen reihci f el iS .ruoj esim te noisnetxe : +a .+r edo m ne )tnatsixe siam( ediv reihci f nu tnarvuo ne + w elbarap moc edom
721

1.2 criture formate


ESO LCF

1 - Entres-sorties (cstdio)

; t e f fe s nas : c ; s f it ac i fi n g is ser f fi h c m u m i x a m u a ar d n ei t b o n o : G u o g ; reinred ud idnorra ceva ,lamicd tniop el srpa ser ffihc n ardneitbo no : f uo E ,e ; sorz ed te secapsed siof al dcrp ert arruop erb mon el ,sac ec snad ,tef fe nE . erueirpus tse ic-ellec is ,ruegral ed noitacidnil ceva eriotcidartnoc sap tsen alec euq zetoN .sorz sed rap ehcuag tlpmoc ares egahcif fal ,ser ffihc n ed sniom etropmoc erb mon el iS .smirp mi tnores ser ffihc n sniom ua : X uo x ,u , o ,i ,d : e t n a v i us er i n a m a l e d , n o i sr e v n o c e d er t c ar a c u d d n e p d n o i t a c i f i n g i s a l : n . : ) el a m i c d n oi t a t o n n e e tir c e v it is o p er i t n e e t n a ts n o c e n u e n g is d ( n ois i c r p .snoisserpxed etsil al snad einruo f tse e vitce ffe rue gral al : * ; e hc u a g s or z s e d r a p s t l p m o c t n e m e l l e u t n e v ,s h c i f f a t n o r es s er t c ar a c , m u m i n i m u a : n 0 ; e hc u a g s c n a l b s e d r a p s t l p m o c t n e m e l l e u t n e v , s h c i f f a t n or e s s er t c ar a c , m u m i n i m u a : n : )elamicd noitaton ne etirc evitisop eritne etnatsnoc enu engisd ( ruegral .smirppus sap tnores en etiord ed sorz sel sulp ed sia m ,E uo e ruop euq te ffe e m m : G uo g ; sr u o j u o t t ar a p p a l a m i c d t ni o p el : f u o E , e ; ehci ffa ruelav al X0 uo x0 ed redcrp tia f : X uo x ; el l u n n o n r u el a v et u ot e d r e d c r p t i a f : o : tius e mm oc G te g ,f ,E ,e ,X ,x , o sep yt sel euq etce f fan elle ; enretla e mro f : # ; + e n g is u d u e i l u a e c a p s e n u d n o i ss e r p m i : ^ ; t n e s r p sr u o j u o t e n g i s : + ; e h c u a g n o i t a c i f i ts u j : : xuaepard : t i us e m m o c t n e ssi n i f d es s n o i t a ci d ni setner ffid se L . fitatlucaf tse tnemrefner sliuq ec euq tneifingis te stehcorc sel elleuqal snad
] [
n oi sr e vno c ]L|l |h [ ]no is ic rp .[ ] rueg ra l[ ] xua epa rd[ %

: e t n a vi us er ut c urts a l a t a mr o f e d e d o c e u q a h C

.ruerred sac ne evit -agn ruelav enu uo ) ud etpmoc rinet snas( stirc tnemevitceffe sertcarac ed erb mon el tinruoF . ertcarac nu rap tnatlpmoc el ne , esserdad
0\ 0\ hc

722

1.3 Les codes de format utilisables avec ces trois fonctions


Les principales fonctions de la bibliothque C standard ANNEXE G

f tni rp

tni t ro hs

.c

6 1

x u

i d

; )E erttel al ceva( elleitnenopxe noitaton ne hci ffa elbuod : E ; )e erttel al ceva( elleitnenopxe noitaton ne hci ffa ,elbuod : e ; ela micd noitaton ne hci ffa ,elbuod : f ; )selucsujam serttel( lamicdaxeh ne hci ffa ,tni dengis : X ; )selucsuni m serttel( lamicdaxeh ne hci ffa ,tni dengisnu : x ; la micd ne hci ffa ,tni dengisnu : u ; latco ne hci ffa ,tni dengisnu : o ; lamicd ne hci ffa ,tni dengis : d : )sussed-ic riov( silitu tsen ruetacifidom nucua o sac ua tnednopserroc suq -idni seuqirmun sep yt se L .ruelav as retnesrp ed noa f al te )euqilati ne ici ton snoval suon( noisserpxel ed ep yt el sio f al esicrp iuq ertcarac nud tigas li : noisrevnoc G u o g ,f ,E ,e : n oisre vnoc ed sertcarac sel ruop e uq noitaci fi ngis ed an lI .elbuod gnol ep yt ed tse etnadn opserroc noisserp xel euq esicrp edoc e C : L X uo x ,u ,o ,i ,d : n oisrevnoc ed sertcarac sel ru op e uq noitaci f -i ngis ed an lI .tni gnol ep yt ed tse et na dnopserroc n oisserpxel euq esicrp edoc eC : l .X uo x ,u ,o ,i ,d : noisrev noc e d sertcarac sel ruop e u q n o i t a c i f i n g is e l l e u t n e v e n u r i o v a , n o a f e t u o t e d , t u e p e n e d o c e C .) x u a m i c d a x e h sertcarac ed erb mon el ru op sac el tnev uos tsec( tni nu vresr iulec e d tner ffid t ir a b a g n u t n a v i u s e t n a d n o p s err o c r u e l a v a l r e h c i f f a sr o l a t i u d n o c h r u e t a c i f i d o m u d iolpmel ,s noitatne mlp mi seniatrec snaD .trohs nu d n oisre vnoc al ed etlusr liuq tias )rue mmargorp el( no t nod reitne nu ri ovecer elle-tuep s ulp ua t uoT .ep yt let n ud ruelav e d r i o v e c er s i a m a j t u e p e n , 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 , e u q r i o v t u a f l i , t i a f n E .) n o n u o n g i s( e p y t n u d t s e e t n a d n o ps er r o c n o i ss e r p x e l : h : L|l|h r u o p t e f f e s n as ; ruop sertcarac sel suot uo ruop s fitaci fingis serf fihc sel suot ; u o , r u op ; uo , , , , r u o p : r i o v a s , t u a f d r ap r u e l a v a l e d x i o h c : ne i r . s n o i s s e r p x e d e t s i l a l s n a d e i nr u o f t s e e d e v i t c e f f e r u e l a v a l : * ; lamicd tniop ud egahci ffad sap : f uo E ,e ; )suossed-ic riov( noisicrp al ed tua fd rap ruelav al ed xiohc : X uo x ,u , o ,i ,d : ti us e m moc , noisrevnoc ed ertcarac ud dnepd noitaci fi ngis al : 0. .ruegral ed noitacidnil ceva eriotcidartnoc sap tsen alec euq zetoN .shci ffa tnores sertcarac mumixa m ua : s
n

1 - Entres-sorties (cstdio)

723

setner ffid xua seunetbo sruelav sel etce ffa te uqidni tamrof ud etpmoc tnanet ne titrevnoc sel ,hc esserdad enahc al snad sertcarac sed ti L )... ,ta mrof * rahc tsnoc ,hc * rahc( fnacss tni
)... ,tamrof ,nidts( fnacsf )... ,tamrof( fnacs

FNACSS

: t ne la v iuq tse

: e uq z et oN .e ul er t up t ia ru e la v el u es e nu uq t na v a e rt n oc n er t a re i hc i f ed ni f enu is uo etiudorp tses ruerre enu is FOE ruelav al uo tne melbanevnoc seul sruelav ed erb mon el tinruo F .)...( stnemugrad etsil al ed selbairav setner ffid xua seunetbo sruelav sel etce ffa te uqidni tamrof ud etpmoc tnanet ne titrevnoc sel ,)nidts( dradnats ertnel rus sertcarac sed ti L )... ,ta mr of * rahc tsnoc( fnacs tni .eul ert up tia ruelav elues enuuq tnava ertnocner t a reihci f ed ni f enu is uo etiudorp tses ruerre enu is FOE ruelav al uo tne melbanevnoc seul sruelav ed erb mon el tinruoF .)...( stnemugrad etsil al ed selbairav setner ffid xua seunetbo sruelav sel etce ffa te uqidni tam -rof ud etpmoc tnanet ne titrevnoc sel ,i ficps xul f el rus sertcarac sed ti L )... ,ta mr of * rahc tsnoc ,xulf * ELIF( fnacsf tni

FNACS

FNACSF

.)noitcno f al ed rutamrp trra ,tamro f ed edoc nud tnemetiart ud trra( snoitcno f sec tnessibo selleuqxua selarng selgr sel tne melag arevuort y nO .ehpargarap tnesrp u d n i f a l li at d n e et ir c d ts e n oi t a ci f i n gis al t n o d t a mr o f e d s e d o c e d t e s e u q n o c l e u q s er t -carac ed sio f al esop moc ,tamrof e mmon sertcarac ed enahc enu tnesilitu snoitcno f seC

.noitatnemlpmil ed tnadnepd emro f enu suos hci ffa ,ruetniop : p ; i ci uqs uj s tirc ser tc ara c e d erb mo n e l ,)r ei t ne nu rus ruetniop ep yt ud( etsil al ed noisserpxel rap engisd esserdal ,ecalp : n ; etsil al ed noisserpxe enucua leppa eria f snas , % ertcarac el ehci ffa : % ; enahc enu rus ruetniop : s rahc : c ; )4- rueir fni tios ,erisd noisicrp al rueirpus tios tse unetbo tnasopxel euqsrol silitu tnat reinred ec( E uo f edoc el tnavius hci ffa elbuod : G ; )4- rueir fni tios ,erisd noisicrp al rueirpus tios tse unetbo tnasopxel euqsrol silitu tnat reinred ec( e uo f edoc el tnavius hci ffa ,elbuod : g
;
,

724

1.4 Lecture formate



Les principales fonctions de la bibliothque C standard ANNEXE G

; e ts il al ed tne ml nucua etce ffa cnod tsen elle ; etpmoc ne esirp sap tsen eul ruelav al : * : t i us e m m o c t n e ssi n i f d es s n oi t a ci d n i s et -ner ffid se L . fitatluca f tse tnemrefner sliuq ec euq tnei fingis ] te [ stehcorc sel elleuqal snad
n o is re vn oc ]L| l|h[ ] rueg ra l[ ]*[ %

: etnavius erutcurts al a tamro f ed edoc euqahC

. et n i e tt a t a ) e i f i c ps t a el l e is( r u e u g n o l al e u qsr ol ; ruetaraps nud ertnocner al ; er u t c el a l e d e l b m es n e l e d ruta mrp trra a y li ,ruelav enu reuqirba f ed erusem ne sap tsen i S . ). .. e u q -irmun ud ruop engis nud uo erf fihc nud tner f fid ertcarac ,reitne nu ruop lamicd tniop( eria f ne tiod nouq egasul troppar rap edilavni ertcarac nud ertnocner al : etrras noitarolpxel ,tamro f ed edoc nud tnemetiart ud sro L )e
no i tcnof al no it cnof a l

. e d r u ta mrp trr a a y li ,eriartnoc sac el snaD .ta mrof ud noitarolpxe nos tiusruop ,tamro f ud ertcarac ua dnopserroc ic-iulec iS .)ruetniop el rap ngisd iulec( tnaruoc ertcarac ud etp moc ne esirp al e u q o v or p ) % e d t e( r u e t ar a p s n u d t n er f fi d er t c ar a c n u d t a mr o f e l s n a d ert n o c n er a L ) d
n oi t c n o f a l

.ruetaraps nu sap tios en iuq ertcarac nud ertnocner al uqsuj ruetniop ud tne mecnaval euqovorp ruetaraps ertcarac nud ta mro f el snad ertnocner a L )c

.ruetniop snor -e mmon suon euq noitisop ed ruetacidni nu rinevretni eria f ed elpmis sulp tse li ,nopmat ec ed noitarolpxel erircd ruoP .engil ellevuon enud erutcel al ed tnemehcnelcd a y li ,nop mat el snad elbinopsid noitamro fnid sulp a yn liuqsro L . til euq ec te )euqirhpirp ec etcennoc tse dradnats tinul euqsrol( reivalc ua eppar f nol euq ec ertne noitasinorhcn ysd eniatrec enu cnod a y lI .engil enud ega mi ,nopmat nu snad ehcrehcer tse noita mro fniL )b
no it cnof al

.engil ed nif al te ecapsel tne melarng etimil es no ,euqitarp nE .)f\( e gap ed tne megna hc el te )v\( elacitrev noitalubat al ,)r\( toira hc ru oter el ,)n\( engil ed ni f al ,)t\( e lat - n o z i r o h n o i t a l u b a t a l , e c a p s e l : r i o v a s , s r u e t a r ap s s t i d s e r t c a r a c x i s e t s i x e l I )a

.tnemelban -evnoc seul sruelav ed erbmon el tinruoF .)...( stnemugrad etsil al ed selbairav
725

1.6 Les codes de format utiliss par ces fonctions 1.5 Rgles communes ces fonctions
1 - Entres-sorties (cstdio)

0\

s er t carac ed enahc

0\

s%

ser t ca ra c ed et ius

er t ca ra c

taolf

d engi snu

d engis

tni

tni dengisnu

tni d engi s

tni dengis

tni d engi s

tni d engi s

tni d engi s

tni d engi s

e l bu od gn o l

elbuod

n e s g n ar s er t c ar a c s e d e ti us al k c o ts t s e e r t c a r a c n u i c i u q n e i b z e t o N . e v r e s r t tia eriassecn ecalp al euq elbar frp cnod tse lI .euqidni esserdal ed ritrap areg -nar sel elle te )ei ficps tnemelleutnev rueugnol al lag sertcarac ed erb mon nu uo( ruetaraps nud ertnocner al uqsuj sertcarac sel suot aril elle ,sac ec snad ,cnod euq te ess er d a e n u ti o er n oi t c n o f a l e u q e u v e d er dr e p s a p t u a f e n l I . :s ; eriomm ne sgnar sertcarac sed etius al ertcarac ud noitcudortnid ) edoc el ruop essap es iuq ec ed ega mil ( sap arua yn liuqsiup ,enahc elbatirv enud ici sap tigas en liuq n ei b z e t o N . e vr e s r t ti a er i a s s e c n e c al p al e u q e l b ar f r p r s n e i b t s e l I . e u q i d n i esserdal ed ritrap aregnar sel te si ficps sertcarac ed erb mon el aril elle ,sac ec snad ,cnod euq te esserda enu tioer noitcnof al euq euv ed erdrep sap tua f en li ,sac e c s n a D . e i f i c p s t s e e d e t n er f f i d r u e u g n o l e n u u qsr o l enu ; e l a g ts e i c- e ll e c e u q u o e i fi c ps ts e n r u e u g n o l e n u c u a u qsr ol nu : dnopserroc ,rueugnol al tnavius : c ; )E uo e ceva( elleitnenopxe uo )tniop snas tnemelleutnev( elamicd noitaton ne tnem mer ffidni tirc : g uo e ,f ; la mi c da x e h ne mirp xe ) uo ( :x ; la m ic d n e mirp xe :u ; l a mi c d a x e h n e u o l a t c o n e , l a m i c d n e m ir p x e :i ; l at c o ne mirp xe :o ; l a m ic d ne m ir p x e :d . n u r us r u et ni o p er oc n e u o n u d e s s e r d a : e ri l t u a f l i , ed snolrap suon euqsrol ,elpmexe rap ,isniA .esserda nos rap ngisd sruojuot tse tnadnopserroc tne mll euq euv ed erdrep sap tua f en lI .)sussed - i c r i o v( si li t u ts e n r u e t a c i f i d o m n u c u a o s a c u a t n e d n o ps err o c s u qi d ni s e u qir m u n s e p yt s e L . e mir p x e ar es r u el a v as t n o d er i n a m al t e ) e u qi l a ti n e i c i u qi d ni s n o v a l suon( tnadnopserroc tne mll ed ep yt el sio f al esicrp ertcarac ec : noisrevnoc . u o , n o i sr e v n o c e d s er t c ar a c s e l r u o p e u q n o i t a c i f i n g i s e d a n r u e t a c i f -ido m e C . e p y t e d t n e m l n u d e s s e r d a l t s e t n a d n o p s e rr o c t n e m l l : L ; u o n o isr e v n o c e d s er t c ar a c s el r u o p ; u o , , , , n o isr e v n o c e d s er t c ar a c s e l r u o p : e p y t e d t n e m l n u d e s s e r d a l t s e t n a d n o p s er r o c t n e m l l : l ; x u o ,u ,o , n , i ,d : n o i sr e v n o c e d s er t c ar a c se l r u op e uq n o i t a c -i fingis ed an ruetaci fido m eC .tni trohs n ud esser dal tse tna dnopserr oc t nemll : h : L| l| h ; ) e d i l a v ni er t c ar a c n u d u o r u e t ar a p s n u d ert n o c n er a y lis sniom eril ne tuep no( etp moc ne erdnerp sertcarac ed lamixa m erbmon : ruegral
x u o n i d tni gnol

726

Les principales fonctions de la bibliothque C standard ANNEXE G

.ctegf noitcno f al euq esohc emm al tnautcef fe orcaM


)x ulf

* ELIF( cteg tni

CT EG

.eriartnoc sac el snad evitagn non ruelav enu te ruerred sac ne FOE ruelav al tinruo F .nnoitnem xulf el rus hc esserdad enahc al tirc
)x ulf

* ELIF ,hc * rahc tsnoc( stupf tni

S TUPF

.ruerred sac ne FOE ruelav al uo )uer ertcarac ud ellec ed etner f - fid ert ,tne melleutnev ,cnod tuep iuq( tirc ertcarac ud ruelav al tinruoF .rahc dengisnu ne noisrevnoc srpa ,c ed ruelav al nnoitnem xulf el rus tirc
)x ulf

* ELIF ,c tni( ctupf tni

C TUPF

.eriartnoc sac el snad ,hc esserdal ; e rt n o c n er t a reihcif ed ni f enu is uo ueil ue a ruerre elleutnev enu is LLUN ruelav al : r u o t er n e ti nr u o f n oi t c n o f et t e C .)0\ el tnava etsuj cnod( enahc al snad gnar issua iul tse ,ul t a lis, n\ ertcarac e L .0\ ertcarac nu rap tuot el etlpmoc siup ,hc esserdad enahc al snad egnar sel ,)n\ ertcarac nud ertnocner ed sac ne tnemelleutnev tnapmorretnis ne( nnoitne m xulf el rus sertcarac 1-n mu mixam ua ti L
)x ulf

* ELIF ,n tni ,hc * rahc( stegf * rahc

STEGF

.rahc ep yt ua tua fd rap ubirtta engis ed tubirttal tios euq leuq te sertcarac sel retnesrper ruop yolpme edoc el tios euq leuq ,reihci f ed ni f ed sac neuq evitagn ruelav ed tinruof en ctegf euq zetoN .etnietta tiat reihci f ed ni f al is FOE ruelav al ; reihci f ed ni f ne sap tiatn nol is )tni deng -i snu e m mo c r di sn o c( c er tc ara c u d tni ne n oi sr e v no c al e d t at l us r e l : tinruoF .uqidni xulf ud tnaruoc ertcarac el ti L
)x ulf

* ELIF( ctegf tni

CTEGF

ftnirp

.)noitatne mlp mil ed dnepd elle( rap e yolp me emro f al suos ,la micdaxeh ne mirpxe :p ; noitacificps ettec rap ul cnod tsen ertcarac n uc u A . ic i uqs uj t n e m et cerr oc s u l ser t cara c e d erb m o n e l ca lp ares le uqe l s na d , : n ; ) r us ecalp al ed ardua f li ,sertcarac til nol is( euvrp ert d arua ecalp as euq te eriomm
rue tniop

1.7 Entres-sorties de caractres


tni 1 +n

1 - Entres-sorties (cstdio)

727

rda

.stirc tnemeller scolb ed erb mon el tinruoF . ess er d al e d r itr a p , n u c a h c st e t c o ed , i fi cps el rus ,tirc
elliat s colbn xulf

)x ulf

* ELIF ,sc olbn t_ezis ,elliat t_ezis ,rda * diov tsnoc( etir wf t_ezis
rda

ETIRWF

.sul tnemeller scolb ed erbmon el tinruoF . esserdal egnar s e l t e n u c a h c st et c o ed m u mi x a m u a , i fi c ps el r us ,t i L


elliat s colbn xulf

)xulf *

ELIF ,scolbn t_ezis ,elliat t_ezis ,rda * diov( daerf t_ezis

DAERF

e vita gn n on rue lav en u te r uerre d sac ne F OE tinru oF .)n\ ( e ngil ed n i f en ud ei v i us ,hc es ser da d e n a hc a l )tuodt s ( ei tr os e d dra d na ts ti n ul r us t ir c

tuodts

c ev a ,

ctup

: is n i A .x u l f ed es ser da e m m oc orcam al ed leppal euq esohc emm al tnautce ffe orcaM

ctupf

noitcno f al euq esohc e m m al tnautce ffe orcaM

0\

n\

. eri art n o c s a c e l s n a d , e s s e r d a l ; ul t erocne an ertcarac nucuauq srola ,ert ruelav al -nocner t a reihcif ed nif enu is uo ueil ue a ruerre enu is : tinruo F . rap el tnaalpmer ne , esserdad enahc al snad egnar sel te ,reihci f ed nif enud uo ) ( engil ed ni f enud ertnocner al tnapmorretnis ne ,) ( dradnats ertnel rus sertcarac sed tiL
hc LL UN hc n\ nidts

: orcam al ed leppal euq esohc e m m al tnautce ffe orcaM

728

1.8 Entres-sorties sans formatage


. eri art n o c s a c e l s n a d

)hc * rahc tsnoc( stup tni


)tuodt s ,c( ctup
: t ne la v iuq tse

STUP

)c( rah ctup

)c tni( rahctup tni

RAHCTUP CTUP

)xulf * ELIF ,c tni( ctup tni

)hc * rahc( steg * rahc


)n idts ( c tegf

STEG RAHCTEG

)diov( rahcteg tni

Les principales fonctions de la bibliothque C standard ANNEXE G

.eriartnoc s a c e l s n a d ) x u a f( 0 r u e l a v a l t e er f f i h c n u t s e c i s ) i a r v ( 1 r u el a v a l t i nr u o F )c rahc( tigidsi tni .eriartnoc sac el snad )xua f( 0 ruelav al te erttel enu tse c is )iarv( 1 ruelav al tinruoF )c rahc( ahplasi tni . eri art n oc sa c el s na d )xua f( 0 ruelav al te er ffihc nu uo erttel enu tse c is )iarv( 1 ruelav al tinruoF )c rahc( munlasi tni

TIGIDSI

AHPLASI

MUNLASI

uq i dn i

xulf

.eriartnoc sac el snad ruelav al te vitca tse u d r e i h c i f e d n i f e d r u e t a ci d ni l is el l u n n o n r u el a v e n u t i nr u o F


0

.ruerred sac ne stetco ne emirpxe( uqidni


.TES_K EES = gro

t e )s u oss e d-i c r io v(

: setnavius xued sed enul tnos sesirotua stilibissop selues sel ,)sertua s e d ei c n er f fi d s e l n o it at n e m l p m il is( e t x et e d sr ei h ci f s e d s a c e l s n a D ; r ei hc i f u d n i f al d n o pserr oc ; r u e t ni o p u d e ll e u t c a n o it is o p al d n o ps err o c ; r e i h ci f u d t u b d u a d n o ps err o c : r a p e i fi c p s e n i g ir o l e d s t e t c o ut is t n at e m m o c i n i f d t i or d n e n u u qi d n i ud ruetniop el ecalP
D NE_KEES = gro R UC_KEES = gro TES_KEES = gro t con gro xulf

2 Tests de caractres et conversions majuscules-minuscules (cctype)


)x ul f

* ELIF( f oef tni

F OEF

L1-

xulf

ruelav al uo )reihci f ud tubd ua troppar rap ud ruetniop ud etnaruoc noitisop al tinruoF


)x ulf*
ll etf

ELIF( lletf gnol


tcon

r a p ei nr u o f r u el a v al a

)gr o

tni ,tcon gnol ,xulf * ELIF( keesf tni

1.10 Gestion des erreurs


LL ETF

; 0 = tcon

KEESF

1.9 Action sur le pointeur de fichier


2 - Tests de caractres et conversions majuscules-minuscules (cctype)

729

.2eniahc = 1eniahc is orz ; 2eniahc > 1eniahc is evitisop ruelav enu ; 2eniahc < 1eniahc is evitagn ruelav enu : tinruo f te 2eniahc te 1eniahc erap moC )2eniahc * rahc tsnoc ,1eniahc * rahc tsnoc( p mcrts tni .tub ed esserdal ruoter ne tinruo f te tub enahc al ed nif al ecruos enahc al ed sertcarac xamgl mu mixam ua eipoceR )xa mgl t_ezis ,ecruos * rahc tsnoc ,tub * rahc( tacnrts * rahc .tub ed esserdal ruoter ne tinruo f te tub enahc al ed ni f al ecruos enahc al eipoceR )ecru os * rahc tsnoc ,tub * rahc( tacrts * rahc .tub ed esserdal ruoter ne tinruo F .etnietta sap tsen elamixa m rueugnol ettec is 0\ sertcarac sed rap tnemelleutnev tnatlpmoc ne tub esserdal ecruos enahc al ed sertcarac xamgl mumixa m ua eipoC )xa mgl tni ,ecru os * rahc tsnoc ,tub * rahc( ypcnrts * rahc .tub ed esserdal ruoter ne tinruo f te )nif ed 0\ el sirp moc y( tub esserdal ecruos enahc al eipoC )ecru os * rahc tsnoc ,tub * rahc( ypcrts * rahc

PMCRTS

TACNRTS

TACRTS

YPCNRTS

YPCRTS

. eri art n o c s a c e l s n a d ) x u a f ( 0 r u el a v al t e e l u cs u j a m ert t e l e n u ts e c i s ) i a r v ( 1 r u e l a v a l t i nr u o F )c rahc( reppusi tni . eri art n oc sac el snad )xua f( 0 ruelav al te )elacitrev uo elatnoziroh noitalubat ,engil ed ni f ,egap ed tuas ,ecapse( ruetaraps nu tse c is )iarv( 1 ruelav al tinruoF )c rahc( ecapssi tni . eri art n o c s a c e l s n a d )xua f( 0 ruelav al te elucsunim erttel enu tse c is )iarv( 1 ruelav al tinruoF )c rahc( re w olsi tni

730

3 Manipulation de chanes (cstring)


REPPUSI ECAPSSI REWOLSI
Les principales fonctions de la bibliothque C standard ANNEXE G

tub

e cruo s

.) t e ertne tnemepuocer riova y tuep li( ruoter ed ruelav em moc tinruof elleuq ess er da l esserdal siuped stetco eipoC )gl t_ezis ,ecru os * diov tsnoc ,tub * diov( ev o m me m * diov
tub ecruos gl

EVOMMEM

.) te ert n e t n e m e p u o c e r e d r i o v a y s a p ti o d e n l i( r u o t er e d r u e l a v emmoc tinruof elleuq tub esserdal ecruos esserdal siuped stetco gl eipoC )gl t_ezis ,ecru os * diov tsnoc ,tub * diov( ypc me m * diov
tub e cruo s

YPCMEM NELRTS

. eniahc ed rueugnol al tinruoF )eniahc * rahc tsnoc( nelrts t_ezis .1eniahc snad sap erugi f en 2eniahc is lun ruetniop nu uo 2eniahc ed 1eniahc snad ecnerrucco eri merp al rus ruetniop nu tinruoF )2eniahc * rahc tsnoc ,1eniahc * rahc tsnoc( rtsrts * rahc .2eniahc sap tnanetrappan sertcarac ed tnemeritne mrof 1eniahc ed laitini tnemges ud rueugnol al tinruoF )2eniahc * rahc tsnoc ,1eniahc * rahc tsnoc( npscrts t_ezis .2eniahc tnanetrappa sertcarac ed tnemeritne mro f 1eniahc ed laitini tne mges ud rueugnol al tinruoF )2eniahc * rahc tsnoc ,1eniahc * rahc tsnoc( npsrts t_ezis .sap erugi f yn ertcarac ec is lun ruetniop nu uo eniahc enahc al snad c ertcarac ud ecnerrucco erinred al rus ruetniop nu tinruoF )c rahc ,eniahc * rahc tsnoc( rhcrrts * rahc .sap erugi f yn ertcarac ec is lun ruetniop nu uo ,eniahc enahc al snad c ertcarac ud ecnerrucco erimerp al rus ruetniop nu tinruoF )c rahc ,eniahc * rahc tsnoc( rhcrts * rahc .sertcarac xamgl ed mumixa m nu nosiarapmoc al tnatimil ne ,pmcrts em moc elliavarT )xa mgl t_ezis ,2eniahc * rahc tsnoc ,1eniahc * rahc tsnoc( p mcnrts tni
731

RTSRTS

NPSCRTS

NPSRTS

RHCRRTS

RHCRTS

PMCNRTS

3 - Manipulation de chanes (cstring)

. rueirfni sap tios en iuq reitne titep sulp el )elbuod nud emrof suos( tinruoF
x

)x elbuod( liec elbuod

LIEC TRQS WOP 01GOL GOL PXE HNAT HSOC


HNIS 2NATA NATA SOCA NISA NAT SOC NIS

)x elbuod( trqs elbuod )y elbuod ,x elbuod( w op elbuod


x x . x y

ed ru e la v al t i nru o F

. ) ( g o l : e d 0 1 es a b e m ht ir a g ol u d r u e l a v al t i nr u o F

)x elbuod( 01g ol elbuod )x elbuod( g ol elbuod

. ) ) ( g o L u o( ) ( n L : e d n e ir p n e m ht ir a g ol u d r u e l a v al t i nr u o F
x x x

)x elbuod( pxe elbuod


.) ( h t ed ru e la v al t i nru o F
x

)x elbuod( hnat elbuod

.) ( h c ed ru e la v al t i nru o F
x

)x elbuod( hs oc elbuod

.) (h s ed ru e la v al t i nru o F )x elbuod( hnis elbuod


x

.)x/y(natcra ed ruelav al tinruoF )x elbuod ,y elbuod( 2nata elbuod

)x elbuod( nata elbuod )x elbuod( s oca elbuod )x elbuod( nisa elbuod )x elbuod( nat elbuod )x elbuod( s oc elbuod )x elbuod( nis elbuod

732

4 Fonctions mathmatiques (cmath)


Les principales fonctions de la bibliothque C standard ANNEXE G

elliat nucahc ed s fitucsnoc scolb_bn eriassecn tnemecalpmel euollA

. e r i ar t n o c s a c e l s n a d l u n r u e t n i o p n u u o i s s u r a n o i t a c o l l a l e u q sr o l e t n a d n o p s err o c es s er d a l t i n r u o f t e o r z t e t c o e u q a h c e s i l a i t i n i , s t e t c o

)elliat t_ezis ,sc olb_bn t_ezis( c ollac * diov )eniarg tni dengisnu( dnars diov

COLLAC DNARS

.1 ruelav al a eniarg ettec ,tuafd raP .dnar ed seriotala -oduesp serbmon ed ruetarng el rap esilitu eniarg al eifidoM .76723 elag sniom ua tse XAM_DNAR eini fdrp ruelav a L .]XAM_DNAR ,0[ ellavretnil snad sirp moc ,)eriotala-oduesp tia f ne( eriotala reitne erbmon nu tinruoF .noitarolpxel etrra edilavni ertcarac reimerp e L .euqirmun ruelav enu reuqirba f ruop stnavius sertcarac sel esilitu ,dl % tamro f edoc el tia f e u q e c e d e g a m il , t e t u b d e d sr u et ar a p s s l e u t n e v s e l er o n g i n o it c n o f etteC . eniahc ed unetnoc ud gnol ne noisrevnoc al ed tatlusr el tinruoF

)diov( dnar tni

DNAR

)eniahc * rahc tsnoc( lota gnol

LOTA

.noitarolpxel etrra edilavni ertcarac rei merp e L .euqirmun r u e l a v e n u r e u q ir b a f r u o p s t n a v i us s er t c ar a c s e l esi li t u , d % t a m r o f e d o c el t i a f e u q e c e d e g a mi l , t e t u b d e d sr u et ar a p s s l e u t n e v s e l er o n g i n o it -cno f etteC .eniahc ed unetnoc ud tni ne noisrevnoc al ed tatlusr el tinruoF .noitarolpxel etrra edilavni ertcarac reimerp e L .euqirmun ruelav enu reuqirbaf ruop stnavius sertcarac sel esilitu ,f % ta mro f edoc el tia f e u q e c e d e g a m il , t e t u b d e d sr u et ar a p s s l e u t n e v s e l er o n g i n o it c n o f etteC .eniahc ed unetnoc ud elbuod ne noisrevnoc al ed tatlusr el tinruoF

)eniahc * rahc tsnoc( i ota tni

IOTA

)eniahc * rahc tsnoc( f ota elbuod

FOTA

. x e d e u l os b a r u el a v a l t i nr u o F

)x elbuod( sbaf elbuod

.x r ue irp us sap t ios e n i uq rei tn e d narg s ulp el )elbuod n u d e mr o f s uos( ti nru o F

)x elbuod( r o olf elbuod

5 Utilitaires (cstdlib)
SBAF ROOLF
5 - Utilitaires (cstdlib)

733

-pxe noisserpxel is ,tnemsicrp sulP .noitucxel ed lennoitidnoc trrad noitcurtsni enu tiudortni tresssa orcam al ,eriartnoc sac el snaD .ruelav snas te te ffe snas ares tressa orcam al ,>h.tressa< edulcni# evitcerid al ertnocner ruessecorprp el o tnemo m ua ini fd tse GUBEDN elob m ys el iS

)ts etp xe tn i ( t ressa d iov

TRESSA

.e la mro n n i f e nu e m m o c e r d i s n o c t s e 0 r u e l a v al s i o f e t u o t , n o it at n e m l p m il e d d n e p d e t -rpretni tne mevitce ffe tse ruelav ettec tnod erinam a L .tate ruelav al tnas -sinruo f iul ne ,e mts ys ua elrtnoc el dner te snopmat sel tnadiv ne strevuo sreihci f sel emref noitcno f etteC .e mmargorp ud noitucxel enimreT )tate tni( tixe diov .neir tiaf en noitcno f ettec ,lun tse rda iS .collaer uo collac ,collam rap euolla tne melbalarp enoz enu rengisd tne meriotagilbo tiod ruetniop eC .rda esserdad erio m m al erbi L )rda * diov( eerf diov

.vresnoc tse )stetco elliat erid--tsec( enoz enneicnal ed tubd el lues ,enneicnal erueirfni tse elliat ellevuon al o sac el snaD .)ipocer srola ert tnemelleutnev up a li( vresnoc tse enoz enneicnal ed unetnoc el ,enneicnal erueirpus tse elliat ellevuon al euqsro L .)gnahcni etser enoz a l e d u n e t n o c el ,s a c r ei nr e d e c s n a d( u o h c a n o it a c o ll a e l l e v u o n a l o sac el snad lun ruetniop nu uo enoz ellevuon al ed esserdal tinruo f noitcnof etteC .stetco ne ,etiahuos elliat ellevuon al etnesrper elliat ,icI collac uo collam rap euolla tnemelbalarp rda esserdad enoz enud elliat al ei fidoM )elliat t_ezis ,rda * diov( c ollaer diov
.

. eri art n oc s a c e l s n a d l u n r u e t ni o p n u u o iss u r a n oi t a c ol l a l e u qsr o l e t n a d n o ps err o c esserdal tinruof te ,resilaitinil snas ,stetco elliat ed tnemecalpme nu euollA )elliat t_ezis( c olla m * diov

734

6 Macro de mise au point (cassert)


.n ed eulosba ruelav al tinruoF )n gnol( sba gnol .n ed eulosba ruelav al tinruoF )n tni( sba tni

SBAL SBA

TIXE

EERF

COLLAER

COLLAM

Les principales fonctions de la bibliothque C standard ANNEXE G

snad leppad esserdal te leutca tnemennorivnel edragevuas orcam etteC )vne fub_pmj( pmjtes tni

-nol ed eriaidmretnil rap tia f tses leppal euqsrol ellun non ruelav enu te tcerid leppad sac ne ruoter ed ruelav em moc 0 tinruoF .vne elbairav al

PMJTES

. pmjgnol te pmjtes ed tne mennoitcno f nob el reussa ruop ,ruoter ed esserda enu te tnemennorivnel ed tatl redragevuas ed tnattemrep uaelbat ep yt nud em ynon ys nu tse fub_pmj elob m ys e L

.mon emm e d r u et a c i fi t n e d i er t u a n u t i ni f d n o l i s u o o n r r e e d n o it i ni f d a l e l u n n a n ol is ni mr et d ni ts e e m m ar g or p u d t ne me tr o p m o c e L .l a b ol g el o b m ys n u d uo orcam enud emro f suos inifd ert tiod onrre is sap esicrp en emron a L .ruerred noitautis enud srohed ne e m m ,noitcno f elleuq etrop min rap ei fido m ert tuep elle ,alec ed srohed ne ; sac serar seuqleuq snad emron al rap uqidni e mmoc ei fido m ert tiod ellE .em margorp ud egar -ra md ua orz esilaitini tse ruelav aS .dradnats euqhtoilbib al ed snoit -cno f seniatrec rap esilitu ert tuep iuq tni ep yt ed eulavl enu etnesrpeR

.noitcno f enud e mro f al suos eini fder ert siamaj tuep en orca m etteC . tr essa ed sleppa sed te ffel rebihni etiahuos lis riovrp el ed emmargorp ua tseC .e t t- n e r ei h ci f n u c ua s na d i n i f d ts e n G U B E D N e l o b m y s e l e u q z e t o N .neir aref en tressa orcam al ,0 ed etner ffid ruelav enu a tsetpxe noisserpxel iS .emmargorp ud noitucxel arpmorretni iuq troba noitcno f al ed leppa etiusne arua y lI . x x x x e cr u os r ei h c i f u d et n a d n o ps err o c e n g i l a l e d or m u n e l ; reihcif_mon ,nrecnoc ecruos reihci f ud mon el ; ts e t p x e : e nr e c n o c n o iss er p x e l : e v u or t y n O xxxx enil ,reihcif_mon ,tsetpxe : deliaf noitressA : e mr o f a l e d eg as -sem nud ,ruerred dradnats eitros al rus ,noisserp mi arua y li ,0 tuav tset
735

8 Branchements non locaux (csetjmp)


o nr re O NRRE

7 Gestion des erreurs (cerrno)


7 - Gestion des erreurs (cerrno)

. 1 el a g r u o t er e d r u e l a v enu ecro f pmjgnol ,tate ed ruelav e mmoc 0 ceva pmjgnol elleppa nol iS . p mj t e s e d r u o t e r e d r u e l a v a l t i a t t a t e r u e l a v a l i s e m m o c , e v r e s n o c t n e m - medcrp esserdal noitucxel dnerpeR .vne elbairav al ed unetnoc ud ritrap ,)pmjtes rap dragevuas tne melbalarp( tne mennorivnel eruatseR

)tate tni ,vne fub_pmj( pmjgnol diov

PMJGNOL

. ni mre t d ni t se t ne me trop m oc e l , m on e m m e d r u e t a c i f i t n e d i e r t u a n u t i n i f d l i s u o p mj t e s e d n o i t i n i f d a l e l u n n a em margorp el iS .labolg ruetaci fitnedi nu e mmoc uo orcam enu e mmoc pmjtes rini fd ed noitatnemlp mil trebil al essial emron a L .pmjg
736
Les principales fonctions de la bibliothque C standard ANNEXE G

: snad em moc stnemugrad ediv etsil enu tnas -sinruo f ne )ep ytotorp( eralcd es te )ett-ne( tini fd es stnemugra snas noitcno f enu ,++C nE

. e p y t ot or p n u d e mr o f s u o s n oi t ar al c d e n u d t ej b ol er i a f t i o d esilitu tse elle o ecruos reihci f nu snad tne melbalarp eini fd non noitcno f etuot ,++C nE

. C nE euqra mer enud tejbol tia f tno xue ertned stnatrop mi sulp sel( ++C el r a p s s u f er t e I S N A C el r a p s t p e c c a st n i o p st n er f fi d s el er i d- - ts e c ,)s n es e c s n a d( + + C el te ISN A C el ertne tnatsixe stilibitap mocni sed elb mesnel snolutipacr suon ,eriaf ec ruoP .C ne tirc edoc ud ++C ne resilitur snema tnores iuq xuec enitsed tse exenna etteC

2 Fonctions sans arguments 1 Prototypes

float fct () ;

Les incompatibilits entre C et C++

Annexe H

.emron al snad sap tnadnepec erugif en li ,teffe snas srola tnat ne ,snoit -atnemlpmi seniatrec ed unnocer etser liS .0.2 al serueirtna snoisrev sel snad tsixe a daolrevo lc-tom eL .1

.)euqilati ne te( sarg ne tnos ISNA e mron al rap tnemevidrat stiudortni slc-stom sel , fitacidni ertit elpmis .euqilati ne tnos ++C serporp tnos iuq xuec ,niamor ne tnos C ne jd tnetsixe iuq xueC .++C ed slc-sto m sed etlp moc etsil al icioV
C ne sap tna tsi xen ++ C ed s lc- stom seL

: stnavius seriatne mlppus slc-stom sel ,C troppar rap ,edssop ++C


1

. e p yt er t u a n u d r u et n iop n u ne t ne me ti ci lp m i itr e vn o c ert s ap tu ep e n * d i o v ep yt e d r u et n iop n u , + + C n E

.)++C rap etre ffo trebil enud sia m tilibitap mocni enud sulp siofetuot tigas en li( etnatsnoc noisserpxe enu snad rinevretni tuep elobm ys let nu ,++C ne ,sulp eD .enretxe elobm ys nu em moc rdisnoc tse li ISNA C neuq srola ,nrecnoc ecruos reihci f ua et -imil etrop enu a tsnoc fitaci filauq ud ,noitaralcd as snad ,ngapmocca elobm ys nu ,++C nE

: snad e mmoc diov to m ud edial tnemeriotag -ilbo )ep ytotorp( eralcd es te )ett-ne( tini fd es ruoter ed ruelav snas noitcno f enu ,++C nE

738

6 Mots-cls 5 Les pointeurs de type void * 4 Le qualificatif const 3 Fonctions sans valeur de retour
Les incompatibilits entre C et C++ ANNEXE H
void fct (int, double) ;

bool delete false namespace protected template try virtual

catch dynamic_cast friend new public this typeid

class explicit inline operator reinterpret_cast true typename

const_cast export mutable private static_cast throw using

: snad elp mexe rap ,stejbo sed rus tneiaretrop snoitar -alcd sellet ed o sac el snad ,euq ec ed tneiv elapicnirp nosiar a L . , ++ C nE .n ruop eriomm tnemecalpmel ed noitavresr al euqovorp iuq erinred ettec tsec ; noitinifd enu tse ednoces al euq sidnat ,noitaralcd elp mis enu tse noitcurtsni eri merp al euq erdisnoc C
ti d r e t n i t s e a l e c

: ceva ,elpmexe raP .ecruos reihcif nu snad elbairav em m enud snoitaralcd srueisulp revuort ed si mrep tse li ,ISN A C nE

.C ne )4 uo 2 tnemelarng( egatnavad tuav elleuq srola ++C ne 1 tuav : euq ellet noisserpxe enuuq neib zetoN .sertcarac sed ceva tne metcerroc rennoitcno f tuep maertso essalc al ed << ruetarpol euq isnia tseC .ISNA C ne tni ne eitrevnoc tnemeticilp mi tse elleuq srola ,rahc ep yt ed tse n\ uo z ,a euq ellet ertcarac etnatsnoc enu ,++C nE
sizeof (a)

+ + C ed s l c-stom se L

8 Les dfinitions multiples

7 Les constantes de type caractre

point a ; ..... point a ; ..... int n ; ..... int n ;

asm catch continue dynamic_cast extern goto mutable protected short struct true union volatile

auto char default else false if namespace public signed switch try unsigned wchar_t

bool class delete enum float inline new register sizeof template typedef using while

7 - Les constantes de type caractre

break const do explicit for int operator reinterpret_cast static this typeid virtual

case const_cast double export friend long private return static_cast throw typename void

739

. 0\ t e o ,l , l , e , h : s er t c ar a c 6 ed uaelbat nu sac xued sel snad evresr elleuq te ++C ne te C ne tnemmer ffidni tneivnoc : n o it c urt s n il e u q z e t o N .) e n a h c e d n i f e d er t c ar a c s n as( o t e l ,l , e , h s er t c ar a c 5 s e l c e v a si l ai t -ini tnemelp mis tiarrev es t uaelbat el te etpecca tiares noitaralcd e m m ettec ,ISNA C nE .enahc ed ni f ed )0\( ert -carac el riovecer ruop etnasif fus noisnemid enu sap an t euq ec eud ,ruerre enu areuqovorp : n oi tc urt sn il , elp me xe raP . elb iss op sap tsen rueugnol e mm ed enahc enu rap sertcarac ed xuaelbat ed noitasilaitinil ,++C nE
char t[5] = "hello" ; char t[] = "hello" ;

.rini fder sel ed elbissop sulp srola tsen l i t e n oi t ar al c d r u el t n a vi us e cr u os r ei h ci f u d ei tr a p a l e t u o t e d s e l bis s e c c a t n o s s e l o b m y s sec ,C nE .etner ffid noitacifingis enu ceva sini fder ert tne melleutnev tnevuep slI .esohc ep yt ed tejbo nud srohed ne s yolpme ert sap tnevuep en trev te uelb ,eguor selob m ys sel
struct chose { enum (rouge = 1, bleu, vert) ; ..... } ;

: ceva ,elpmexe raP .sini fd tnos sli leuqel snad tilibisiv ed ecapsel etimil etrop enu tno )mune lc-tom( noitar mun enud stneml sel ,++C nE

.t n e m et l p m o c t u as ts e c o l b ec euq te colb nu snad erugi f noitaralcd ettec is fuas ,) 2 = n tni elp mexe rap( ruesilaitini nu tnatropmoc noitaralcd enu retuas eria f sap tuep en otog noitcurtsni enu ,++C nE

. e t p o d a n oi t c i dr e t ni l o d , x u er e g n a d tne merilucitrap t tiarua aleC .sac dnoces el snad euq ruetcurtsnoc el releppan ed eiov -rp liuq te tniop tejbol ed noitini fd te noitaralcd eugnitsid ruetalipmoc el euq tiardua f li
740
Les incompatibilits entre C et C++ ANNEXE H

11 Initialisation de tableaux de caractres 10 Les numrations 9 Linstruction goto

.7 ertipahc ud 3.21 ehpargarap el ze yov ,sliatd ed sulp ruoP .nretxe lc-tom ua leppa eria f tuep no ,C neuq noitcno f ed s mon se mm sel rinetbo tuev nol iS .stne mugra ses ed erutan al rus ; e nr et n i m o n n o s r us : e tsi n i mr et d noa f enud sab enretxe mon nu snoitcno f sel setuot eubirtta ruetalipmoc el ,++C nE

12 Les noms de fonctions


12 - Les noms de fonctions

741

4 5 4 e ll e utr iv 25 ,94 sruetarpo 214 egatirh te 141 x u ae lba t ed 451 sruetniop ed 255 r u en e tn o c ed 35 ~ rap secro f snoisrevnoc 986 ,203 noitatce f fa 4 9 4 d le i ft s uj da 207 ,406 )e mhtirogla( dni f_tnecajda 317 ,616 )emhtirogla( ecnere ffid_tnecajda 075 r u e ne t no c e d r ue ta tpa da 486 ecruosser ed noitisiuqca 237 ) h ta mc( so ca 6 3 6 xe lp m o c e ssa lc so ca 217 ,516 )emhtirogla( etalumucca 495 ~ ruetarti 205 tcerid scca 437 )bildtsc( sba 536 )xelpmoc essalc( sba 125 ,615 troba

7 4 )r ue tar po( || 66 )ruetarpo( >>

54 )ruetarpo( => 892 )ruetarpo( *>54 )ruetarpo( > 986 ,591 )ruetarpo( >54 )ruetarpo( == 454 )ruetarpo( = 54 )ruetarpo( =< 54 )ruetarpo( < 73 )ruetarpo( / 892 )ruetarpo( *. 93 FN I+ 003 ,15 )ruetarpo( ++ 73 )ruetarpo( + 73 )ru et arp o( * 6 8 4 n oi t i n i f d r u s 986 ,413 )ruetarpo( )( 74 )ruetarpo( && 73 )ruetarpo( % 366 ,32 ,61 edulcni# 966 fedn fi# 966 f e d fi# 966 f i d ne# 966 es le# 076 file# 366 en i fe d# 54 )r ue tar po( = ! 74 )ruetarpo( !

selobmyS

Index

215 yrt colb 411 ~ nu selacol selbairav 5 7 ~ n u s n a d n oi tar al c d 47 ,61 ,31 colb 346 ,625 testib 584 ruerre'd stib 9 5 )sr u et arp o( tib tib 117 ,416 )e mhtirogla( hcraes_ yranib 405 yranib 495 )ruetarti( lennoitceridib 6 2 5 s n oi t pe c xe 917 ,335 ,8 dradnats euqhtoilbib 226 ,535 nigeb 305 geb 126 gnirts_cisab 494 dlei fesab 474 eitros ne noitarmun ed esab 594 esab 5 8 4 tib dab 625 d iep yt_ dab 625 ,325 noitpecxe_dab 625 ,764 tsac_dab 825 ,725 ,625 colla_dab 584 dab 175 ,465 ,265 ,855 kcab

2 1 1 ~ ess al c e d el ba ira v 152 ,611 ~ noitacollad essalc euqitamotua 396 ,686 rtp_otua 44 engis ed tubirtta 337 )bildts uo gnirts( lota 337 )bildtsc uo gnirtsc( iota 337 )b il d tsc uo gn irt sc( f o ta 237 ) ht a m c( 2 na ta 237 htam 636 xelpmoc essalc na ta 226 ,755 ,625 ta 83 )sr ue tarp o se d( t i vi ta ic o ssa 326 , 255 n gi ssa

2 3 7 ht a m c 6 3 6 x el p m o c ess al c nis a 2 3 , 6 2 ) ed o c( I I C S A 341 xuaelbat sed eriomm tnemegnarra 421 erb mon ne elbairav 1 4 2 t e j b o n u e c n er f r 432 ,711 tua fd rap 8 0 1 t n a ts n o c t e u m 0 0 1 t eu m 7 6 1 n oi t c n o f 801 t na ts n oc f i tc e f f e 001 f i tc e f f e 932 ,732 essalc ep yt ed 652 wen ed 571 niam ed 932 tejbo nud esserda t ne m u gr a 636 ) xe lp m oc e ssa lc( gr a 936 ylppa 405 ppa 082 )noitcno f( eima 1 5 2 e u q i m a n y d n o it a c o ll a 551 )d setniartnoc( tnemengila 0 6 6 s a il a 395 dradnats 217 ,516 euqirmun 317 ,616 etsilb mesne 8 0 7 , 2 1 6 irt e d 606 ecneuqs ed noita mro fsnart ed 307 noita mro fsnart ed 607 ,016 noisserppus ed 6 0 6 t ne m ec alp mer e d 017 ,107 ,316 ,306 ehcrehcer ed 706 noitatu mrep ed 016 noititrap ed 506 mu mixa m ed uo mu minim ed 106 sruelav ed noitarng ed 017 ,416 noisu f ed 006 eipoc ed 007 ,006 noitasilaitinid 7 3 5 e m h tir o gl a 0 4 ) n o isr e v n o c( e p yt e d t n e m e ts uj a

Index

744

281 snad ehcrehcer 771 s no i tc n o f 1 8 1 ei p o c 0 7 1 et n ats n o c 8 7 1 n o it a n t a c n o c 071 ni f ed ertcarac 961 C el yts ed enahc 274 rrec 237 ) h ta mc( l ie c 9 3 5 sr u e n e t n o c e d 595 sruetartid s e ir o g t a c 025 ,415 ,215 hctac 45 )ruetarpo( tsac 633 ,223 tsac 2 3 nr u ter e ga irra c 13 ep yt 7 6 r u et ara p s 13 elbatnesrper 23 ~ ed elaicps noitaton 2 3 el at c o n oi ta t o n 2 3 e l a mi c d a x e h n oi t a t o n 1 3 ~ n u d n oi ta t o n 07 ,86 edilavni 13 elbamirpmi 505 engil ed ni f 0 8 4 r u et i m il d 394 egassilp mer ed 071 enahc ed ni f ed 4 1 el r t n o c e d 6 4 ~ ed no si ara p m o c er tc ara c 226 ,955 yticapac 013 )essalc( euqinonac 337 )bildtsc( collac

02 erbi l 1 2 e n gi l e d ni f e d 0 2 eri a t n e m m o c 23 I I CS A 62 e do c 9 2 st n at t ol f s e d 7 2 sr ei t n e s e d 5 2 n oi ta mr o f n i e n u d eg a do c 2 7 4 g ol c 3 5 5 , 6 8 4 r a el c 6 7 5 l c 6 7 3 ~ e d t it n e d i 963 nortap essalc 363 euqirng essalc 4 0 4 n oi sre v n o c 5 8 3 e v ir d ess al c 152 ,611 ,311 ,111 euqitats 511 re ts i ger 1 1 1 s e l a b ol g s e l b a ir a v s e d 152 ,611 ,211 euqitamotua n oi t a c ol l a d ess al c 773 snoitcno f ed snortap te ei m a ess al c 734 sruetcurtsnoc te elleutriv 7 3 4 el l e u tri v 0 1 2 ~ e n u d e c n at s n i 514 euqinonac emro f 445 eini fdrp noitcno f 9 0 2 n oi ti n i f d 902 noitaralcd 013 euqinonac 554 etiartsba 822 ,802 ,302 ,4 essalc 9 0 2 ss al c 6 6 , 5 1 t ol f 9 6 4 ni c 37 ,51 xiohc 0 2 5 n oi t pe c x e e n u d t ne me n i m e h c 5 8 1 er ut c urts e n u d p m a h c 961 ep y t 0 7 1 n oi t a t n e s r p er

3 9 , 0 8 ) n o it c urts n i( ka er b 58 ,07 eini fni 37 e lc u ob 594 ,574 ahplaloob 34 ,43 ,62 )ep yt( loob
745

Apprendre le C++

237 h ta mc 636 xelpmoc essalc s oc 876 ,321 etcaxe ecnadnopserroc 007 )e mhtirogla( drawkcab_ ypoc 007 ,006 )emhtirogla( ypoc 1 8 1 C e l yts e d s e n a h c e d 006 e mhtirogla e ip oc 14 e uqi ta m ts ys 9 7 6 dra d na ts 1 4 se u q ir m u n s n o it o m or p 733 ,923 ruetcurtsnoc rap 633 ,423 ,223 tsac rap 6 3 3 ti ci l p x e r a p n oi t c i d r e t ni 4 0 1 e p yt o t or p el ra p e ti u d ni 896 erbmem nu rus ruetniop nud eticilp mi 04 et ic ilp mi 35 noitatce f fa enu rap ecro f 913 eticilpxe 133 ,723 enahc ne 086 ,023 ruetasilitul rap eini fd 404 ,451 sruetniop ed 0 5 s n o it a t c e f f a s el s n a d 6 3 3 er t u a e n u n e ess al c e n u d 404 esab ed ep yt nu ne vird ep yt nud 04 ep y t e d tn e m et su ja d 45 ts ac 9 8 6 n o isre v n oc 793 ,683 scca sed elrtnoc 551 tnemengila'd etniartnoc 4 9 ) n o it c ur ts ni( e u ni t n o c 555 stne mld noisserppus 945 ,935 leitneuqs 4 5 5 s t ne m l d n o itr es ni 5 4 5 er dro d n o it al er te 355 ~ ed nosiarap moc 935 ~ ed seirogtac 575 ,935 fitaicossa 2 5 5 ~ e d n oi ta tc e f fa 075 ~ ed ruetatpada

835 ,435 ruenetnoc 652 euqiman yd tejbo nud 0 5 5 l ei t n e u q s r u e n e t n o c n u d n oi t c urt s n o c 0 2 2 virp 393 sleppa sed noitasihcrarih 633 ticilpxe 393 snoita mro fnid nissimsnart te 334 elpitlu m egatirh te 393 ,293 egatirh te 2 5 4 el l e u tri v n o it c n o f t e 9 2 3 n o isr e v n o c t e 7 3 4 s e ll eu tri v se ssa lc t e 9 6 2 erb m e m t ejb od s ac n e 852 tua fd rap eipocer ed 904 egatirh te eipocer ed 172 ,852 eipocer ed 962 erb mem tejbod 7 3 3 ~ r a p n oisr e v n o c 986 ,352 ,712 ,412 ruetcurtsnoc 03 e t na t to l f 8 2 er it n e 33 ~ ed no i tara lc d 051 noitaralcd 102 noitarmund 0 7 1 e n a h c 937 er tc ara c e tn at sn o c 837 ,642 ,33 tsnoc 636 )xelp moc essalc( jnoc 4 2 6 n o it a n t a c n o c 196 secner fr ed ruetpmoc 536 x elp m o c 2 2 e m mar g or p n u d n o i ta li p m o c 882 ,522 eraps 866 ,366 ,722 ellennoitidnoc n o i ta li p m o c 3 0 4 e v ir d t e e s a b e d ess al c t il i bi t a p m o c 3 5 5 e u qi h p ar g o c i x e l 3 5 1 sr u e t ni o p e d 355 sruenetnoc ed 6 4 s er t c ar a c e d n osi arap m o c

Index

746

694 sdne 694 l dn e 226 ,535 ,305 dne 804 ,982 ~d epicnirp ud noitaloiv 9 7 2 , 3 n oi t a l us p a c n e 275 ,175 ,075 ytpme 2 e c ne ic i f f e 1 4 5 t ic ac i f f e 7 6 6 dr o b e d t e f f e 131 ,22 sneil ed 2 2 e m mar g or p n u' d n o it i d

937 elpitlu m 176 e m ynon ys ed 466 selob m ys ed 666 sorca m ed 902 ,502 erbmem noitcno f enud 902 essalc enud n o it i ni f d 08 tlua fed 05 )~ ed sruetarpo( noitatnemrcd 231 citats 71 ~ ed noitcurtsni 31 ep yt ed 341 ,141 xuaelbat ed 6 4 1 r u e t ni o p e d 051 ,33 etnatsnoc ed 4 1 1 , 5 7 co l b n u s n a d 681 erutcurts enud 922 ,902 essalc enud 7 7 3 n or t a p s ess al c t e it i m a d 082 itimad 3 0 1 n o it c n o f e n u d 3 8 2 e p ic it n a 31 n o it ara lc d 0 6 , 9 5 )sr u et ar p o( e g al ac d 594 ,494 ,574 ced 241 ecidni'd tnemedrobd

152 ~ elbairav 152 ~ noitacolla e u q i m an y d 625 ,764 tsac_ciman yd 92 )ep yt( e lbu o d 0 3 e p yt n u d e ni a m o d 6 2 5 r orre _ ni a m o d 48 )noitcurtsni( elihw ...od 93 orz rap noisivid 445 sedivid 3 2 e d ul c ni # 3 6 6 , 6 1 e vi tc eri d 241 )uaelbat nud( noisne mid 341 )uaelbat nud( noisne mid 3 5 4 le u tri v 0 2 2 virp 962 erb me m tejbod 986 ,412 ruetcurtsed 993 euqilbup 1 0 4 e g t or p 004 evirp n oi t a v ir d 265 ,055 euqed 8 3 ti ca p ac e d t ne m ess a p d 084 rueti mild 5 1 3 n oi t i n i f d r u s 951 ruetarpo 986 e te le d

305 r u c 936 ) yarralav ed( t fihsc 2 3 )er tc ara c( R C 1 5 4 )r u ot er ed ru e la v( et n aira v o c 46 ,41 tol f 964 tuoc 717 fi_tnuoc 685 ,585 noitcno f 7 1 7 e m ht ir o gl a tn u o c 237 htamc 6 3 6 x elp m o c ess al c hs o c
747

Apprendre le C++

107 ,406 )emhtirogla( fi_dni f 1 0 7 ) e m ht ir o g l a( f o _ tsri f _ d ni f 5 2 6 n o it c n o f 406 e mhtirogla f o _ tsri f _ d ni f 5 2 6 f o _ t o n _ tsri f _ d ni f 1 0 7 ) e m h tir o gl a( d ne _ d ni f 526 ,685 ,285 noitcno f 107 ,406 e mhtirogla d ni f 505 ,41 engil ed ni f 0 0 7 ) e m h tir o gl a( n _l li f 8 9 4 n o it c n o f 007 ,306 e mhtirogla 0 0 7 l li f 027 E L I F 2 1 1 ) el i p( O F I F 4 0 5 et x et 131 ,22 ecruos 2 0 5 r u et n iop 405 erutrevuod sedom 056 ,32 ett-ne 994 ~ nu tol f nud noixennoc 4 0 5 eri a nib 205 tcerid scca r ei h ci f 7 2 7 ) o i dts c( s t eg f 7 2 7 ) o i d ts c( c t e g f 23 )ertcarac( FF 9 2 7 ) o i dts c( f oe f 127 ) oi d tsc( es o lc f 4 3 es la f 584 tiblia f 684 lia f 337 )htamc( sba f

031 ,921 nretxe 2 ti li b i s n e t x e 0 4 et x i m 6 3 ~ n oi tc ur ts ni n ois serp xe

763 ,843 tropxe 7 7 4 n o it at o n elleitnenopxe 633 ticilpxe 2 3 7 ht a m c 6 3 6 x el p m o c ess al c pxe 4 3 7 )bi l dt sc( ti x e 6 1 5 ti x e 625 dradnats 225 tnemehcnelcder 915 ,615 ,115 ~d eriannoitseg 625 dradnats euqhtoilbib al ed 6 2 5 ~ ess al c 025 ~ en u d t ne me n i me h c 386 ,725 ,115 ,015 noitpecxe 2 e d ut i t c a x e 0 8 tl u a f e d 5 9 et t e u q it 011 tidilav ed ecapse 76 cnalb ecapse 166 itimad noitaralcd te smon ed 746 smon ed 166 e m y no n a e c a ps e 726 ,685 ,485 ,555 esare 4 4 5 o t _l a u q e 7 8 5 , 5 8 5 n oi t c n o f 0 1 7 e m h tir o gl a e gn ar_l auq e 717 )e m ht iro g la( l auq e 584 tibfoe 584 f o e 102 ~d setnatsnoc 047 ,002 noitar mun 964 ,36 dradnats ertne 72 ,62 ep yt 7 2 ~ n u d e g a d o c re it n e 3 2 re i hc i f 99 ,31 ett-ne 317 )se mhtirogla( elb mesne

Index

748

827 )oidtsc( daerf 7 2 7 ) o i dts c( s t u p f 727 )oidtsc( ctupf 1 2 7 ) o id ts c( ft n irp f 5 1 4 e g a tir h t e e u qi n o n a c e mr o f 3 9 4 t ol f n u d ~ e d t ut ats 794 ,494 tatd tom 926 ,505 erio m m ne 594 ~ el rus noitca 394 ,374 egata mrof 9 1 e r bi l t a m r o f 251 uaelbat 251 ruetniop e msi l a mr o f 2 3 d e e f mr o f 7 1 7 ) e m ht i r o g l a ( h c a e _ r o f 41 )noitcurtsni( rof 027 )oidtsc( nepof 254 snoitcirtser 154 noitini fder 2 5 4 r u et ur ts n o c t e el l e u tri v n o it c n o f 853 noitasilaicps 543 nortap noitcnof 186 ,132 noitini fdrus 442 euqitats 373 noitasilaicps 696 ~ rus ruetniop 673 ~ ed nortap 583 e ga tir h 5 3 2 e n gi l n e 9 0 2 n o it i ni f d 6 4 2 et n a ts n o c 432 tua fd rap stnemugra 382 e i ma 402 erbmem noitcnof 392 ~ rap ruetarpod noitini fdrus 382 essalc enud erb mem 282 ,082 etnadnepdni 8 8 2 n o it at i olp xe 1 6 6 s m o n ed se ca ps e te 773 n or tap s ess al c te 0 8 2 n o it a r a l c d 4 8 2 s ess al c sr u eis u lp ed 986 ,082 ei ma noitcnof

654 erup elleutriv 986 ,944 ,344 ,604 elleutriv 101 ,99 ruoter ed ruelav 154 elleutriv ~ enud noitini fdrus 876 ,911 ~ enud noitini fdrus 8 3 7 r u ot er e d r u e l a v s n as 737 stne mugra snas 0 0 1 nr u ter 054 elleutriv ~ enud noitini fdr 5 1 1 e visr u cr 6 6 1 ~ e nu r us r ue t ni op 443 ~ ed nortap 345 ~ tejbo 6 erb m e m 31 ni a m 343 euqirng 99 e t t- ne 6 3 1 e n g il n e 761 tn e m u gra ne 301 noitaralcd 345 leppar e d 445 ~ ess a lc 321 ,121 eini fdrus ~ enud xiohc 0 0 1 st e u m st n e m u gra 001 s fitce f fe stnemugra 0 0 1 st n e m u gra 086 selbairav stnemugra n oi t c n o f 694 hsul f 7 7 4 ) n o it at o n( et n at t ol f 92 ,62 )ep yt( tnattol f 394 egatamro f ed tutats 4 8 4 r uerr e d t u ta ts 274 ini fdrp 4 6 t u oc 9 9 4 r ei h ci f n u n o i x e n n o c 66 , 51 n ic 9 6 4 t ol f 3 3 7 ) ht a m c( r o ol f 92 )ep yt( taol f 1 6 5 p il f 594 ,494 ,774 dexi f 775 tsri f 526 fo_tsal_dni f 626 fo_ton_tsal_dni f
749

Apprendre le C++

241 ,141 ,041 ecidni 05 sruetarpo 841 sruetniop ed n o it at n e mr c ni 737 ++ C te C er t ne s t il i bi t a p m o c ni 7 2 2 el p it l u m n o is ul c ni 317 )e mhtirogla( sedulcni 405 ni 77 fi sed 9 8 1 ser u tc urts e d noitacirb mi 636 )xelpmoc essalc( ga mi 105 maerts fi 6 7 ) n o it c ur ts ni( fi 9 3 ) s n o it n e v n o c( E E E I 673 nortap sessalc ed titnedi 3 6 4 e p y t e d n oi t a ci f it n e di 8 1 r ue ta ci f it n e di

23 )ertcarac( TH 2 3 ) n o it at o n( el a m ic da xe h 594 ,494 ,574 xeh 334 sruetcurtsnoc te elpitlum 1 3 4 el p it l u m 893 gtorp erbmem 504 euqitats egap yt te 7 9 6 ser b m e m se d r us sr ue t n i o p te 324 ses sa lc e d n ort ap te 514 euqinonac emro f te 9 4 4 s e ll e u tri v s n oi t c n o f t e 404 snoisrevnoc te 404 sruetniop ed noisrevnoc te 9 0 4 ei p o c er e d r u e t c urt s n o c t e 214 n o it a tce f f a te 793 ,683 scca sed elrtnoc 2 9 3 sr u e t c urt s n o c s e d l e p p a 986 ,383 ,4 egatirh

246 ecilsg 445 la uqe_r et aer g 047 ,59 )noitcurtsni( otog 5 8 4 t i bd o o g 684 d o o g 131 ,111 ,901 )elbairav( elabolg 8 2 7 ) oi d tsc( st e g 2 8 4 e ni lt e g 8 2 7 ) o i dts c( r a h ct e g 727 )oidtsc( cteg 184 teg 915 ,115 noitpecxed eriannoitseg 486 noitasilaitini rap ecruosser ed n o its e g 3 4 3 ~ n oi t c n o f 3 6 3 ess al c e u qir n g 1 0 6 ) e m h tir o gl a( n oi tar n g 645 ruetarpod ruetarng 007 ,306 )emhtirogla( n_etareneg 007 ,106 )emhtirogla( etareneg 3 8 4 t n uo c g 5 7 4 ei tr os n e n oi ta mr o f n il e d 394 tirabag

827 )oidtsc( etirw f 7 6 5 se ts il e d 017 ,416 emhtirogla n o is u f 445 lanoitcnu f 9 2 7 ) h. o i dts( l le t f 994 maerts f 9 2 7 ) o i d ts c( ke es f 4 2 7 ) o i dts c( f na cs f 175 ,465 ,265 tnor f 0 8 2 d ne ir f 605 ez eer f 437 )bildtsc( eer f

Index

750

495 lennoitceridinu 595 ~d ellavretni 835 ruetniop te 495 eitros ne 495 er t ne n e 995 ,895 ,495 tol f ed 6 9 5 n o itr es ni d 595 ,495 ~d seirogtac 495 lennoitceridib 495 ,655 tcerid scca 4 3 5 r u e t a r t i 717 )emhtirogla( paws_reti 037 )ep ytcc( reppusi 705 ,505 maertsrtsi 0 3 6 m a ert s g n irt s i 794 ,974 ,074 maertsi 037 )ep ytcc( ecapssi 0 3 7 ) ep yt cc( r e w ols i 927 )ep ytcc( tigidsi 927 )ep ytcc( ahplasi 927 )ep ytcc( munlasi 074 ,56 maertsoi 405 cnurt 405 tuo 405 n i 4 9 4 d l e i ft a ol f 305 dne 305 ruc 4 0 5 yr a nib 305 geb 494 dlei fesab 405 ppa 494 d le i f ts u jd a so i 9 5 5 r u e t ar t i d n oi t a d il a v n i 6 2 5 t ne m u gra _ d il a v n i 595 ,635 ruetartid ellavretni 594 ,494 lanretni 3 2 5 ~ d n oi t a c i f i c ps ec a fre tn i 9 5 2 ei p o c a l 903 noitatce f fal er i dre tn i

6 2 ) e p yt( t n i 6 8 el i h w 97 hctiws 47 er u tc urt s 47 ,61 elp mis 0 0 1 nr ut er 61 ~d setros setner f fid sel 67 ,51 f i 59 o t o g 41 r o f 63 noisserpxe 4 8 e li h w . .. o d 6 1 n o it ar u t c ur ts e d 3 7 el r t n o c e d 37 x i oh c e d 4 9 e u n it n o c 39 ka erb 47 ,61 colb noitcurtsni 012 , 4 ec na ts n i 6 9 5 ) d r u e t ar t i( n o i tr e s n i 626 ,385 ,555 tresni 117 ,416 )e mhtirogla( egre m_ecalpni 217 ,516 )emhtirogla( tcudorp_renni 532 ,731 enilni 174 noitcejni 852 eipocer rap 486 ~ rap ecruosser ed noitseg 311 seuqitats selbairav sed 111 selabolg selbairav sed 153 dradnats ep yt ed selbairav sed 611 ,111 ,33 selbairav sed 441 x u ae lba t s e d 471 sruetniop ed xuaelbat ed 371 s er tc ara c ed xu ae lba t e d 5 3 1 e c ner fr e d 272 tejbo non erbme m ed 472 stejbod uaelbat nud 6 6 2 t ej b o n u d 222 euqitats ennod erbme m nud 007 ,006 emhtirogla n o it a si l a i ti n i
751

Apprendre le C++

6 1 7 pa e h_e ka m 3 1 ) n o it c n o f( n i a m 666 ,831 orca m

151 ,841 ,341 ,141 ,35 ,94 eulavl 7 8 5 , 5 8 5 n oi t c n o f 0 1 7 e m h tir o gl a 685 d n uob_re w o l 905 pmjgnol 6 2 ) e p yt ( t ni g n o l 9 2 ) e p y t( e l b u o d g n o l 545 ro_lacigol 545 ton_lacigol 545 dna_lacigol 625 rorre_cigol 237 ) ht a m c( 01g o l 2 3 7 ht a m c 6 3 6 x el p m o c ess al c gol 1 1 1 )e lba ira v( el ac o l 665 irt 765 noisu f 465 ,055 tsil 2 3 d e e f e ni l 644 ,344 euqiman yd erutagil 2 3 )er t cara c( F L 817 erapmoc_lacihpargocixel 445 lauqe_ssel 445 sse l 625 rorre_htgnel 594 ,494 t fel 4 3 7 ) b il d t s c ( s b a l

085 p mo c_ y e k

91 lc-tom 4 9 4 e g a t a mr o f e d t ut at s u d t a t d t o m 445 suludom 2 2 t ej b o el u d o m 681 erutcurts ed eldom 405 reihci f nud erutrevuod edom 4 4 5 su n i m 506 )ed ehcrehcer( mu minim 307 ,506 )e mhtirogla( tnemele_nim 936 ) yarra l av e d( n i m 817 n i m 302 edohtm 3 eg ass e m 117 ,416 )emhtirogla( egrem 765 egr e m 137 )gnirtsc( evommem 137 )gnirtsc( ypcmem 696 )rus ruetniop( ennod erbmem 793 e uqi lbup 902 ci lbup 893 ,793 gtorp 793 ,902 virp 862 ~ tejbo 4 0 2 ~ n o it cn o f 722 ,122 euqitats ennod 6 0 2 , 6 e n no d 793 s~ x u a s c ca erb m e m 506 )ed ehcrehcer( mumixam 965 ,265 ,065 ezis_xam 307 ,506 )emhtirogla( tnemele_xam 9 3 6 n o it c n o f 817 e mhtirogla xam 237 h.htam 0 4 6 )sr u el a v e d n o it ce l s( e u qs a m 675 p a m 8 5 s ti b e d n o it al u pi n a m 694 e uqir t marap 594 ,574 ruetalupinam 437 )bildtsc( collam

226 ,465 ,755 ,535 rotareti

Index

752

345 noitcno f 2 4 2 r u ot er e d r u e l a v n e 732 tne mugra ne 6 1 2 n o it c urts e d 352 ,612 noitcurtsnoc 486 ,252 euqita motua 3 te jb o

7 3 n oi t a c il p it l u m 7 3 ol u d o m 85 stib ed noitalupinam 74 euq i go l 0 5 n oi t a t n e m r c n i 6 4 5 ~ d r u e t ar n g 7 3 n o is i vi d 513 ,951 eteled 0 5 n oi t at ne mr c d 06 ,95 egalacd ed 54 n os iar ap m oc e d 633 ,223 tsac ed 5 5 l e n n o it i d n o c 4 5 ts a c 95 t ib tib 7 3 eri a nib 8 3 t i vi ta ic oss a 73 euqit mhtira 25 ,94 noitatce ffa 7 3 n o it i d d a 984 ,974 ,074 ,66 >> 892 *>5 9 1 >2 1 4 e ga tir h te = 454 ,303 ,203 = 984 ,174 ,074 << 892 *. 003 + + 641 * 684 ,413 )( 641 & 684 ! 0 0 3 -r u et ar p o 9 9 4 ma erts f o 23 )noitaton( elatco 594 ,494 ,574 tco 6 7 2 er iar o p me t 372 ~d uaelbat 252 e uqi ta ts 852 eip o cer 862 erb m e m 662 noitasilaitini

217 )e mhtirogla( euqirmun 451 )oidtsc( L LUN 907 ,216 )e mhtirogla( tnemele_htn 6 9 4 es acre p p u o n 725 worhton 2 3 ) ser t cara c( el at c o 23 )sertcarac( ela micdaxeh 774 etnattol f 7 7 4 el l e i t n e n o p x e n oi t a t o n 445 ot_lauqe_ton 694 s wpikson 6 9 4 s op w o hs o n 5 9 4 t ni op w o hs o n 5 9 4 esab w o hs o n 151 uaelbat ed mon 594 ,574 ahplaloobon 507 ,806 )emhtirogla( noitatu mrep_txen 513 ,851 )ruetarpo( wen 7 2 5 ) w or ht o n( w e n 513 noitinifdrus 652 ruetarpo 6 5 2 ~ e d s t n e m u gr a 986 ,725 wen 93 NaN 846 ecapseman 364 e m a n

0 9 5 te si tl u m 685 pa mitlu m
753

Apprendre le C++

463 noitarc 3 6 3 s e ss a l c e d n ort a p 507 ,016 )e mhtirogla( noititrap 217 ,616 )emhtirogla( mus_laitrap 907 )emhtirogla( ypoc_tros_laitrap 807 ,216 )emhtirogla( tros_laitrap 83 seshtnerap 673 sessalc ed nortap nud tua fd rap sertmarap 753 ,353 snoitcno f ed nortap nud 073 sessalc ed nortap nud snoisserpxe sertmarap 453 ,943 snoitcno f ed nortap nud 963 sessalc ed nortap nud ep yt ed sertmarap 661 noitcno f ed leppa'd egartmarap 875 , 775 ri ap 3 )tejbO etneirO noita mmargorP( .O.O.P

565 ,365 tnor f_pop 565 ,365 ,855 ,655 kcab_pop 275 ,175 ,075 pop 454 ,344 ,604 ,4 e msihprom ylop 6 3 6 ) x e l p m o c e ss a l c( r a l o p 6 6 1 n o it c n o f e n u r us 896 noisrevnoc te erbme m nu rus 696 ennod erbme m nu rus 7 9 6 e ga tir h t e s erb m e m se d r us 796 serb me m snoitcno f sed rus 451 noitcartsuos 351 snoitarpo 451 lun 6 8 6 t n e g il l e t ni 8 4 1 n o it at n e mr c ni 835 ruetarti te 6 4 1 n oi tar al c d 205 reihcif ed 4 5 1 s n o isre v n oc 351 nosiarap moc 451 n oi ta tc e f fa 641 ,931 ruetniop 445 sulp 211 elip 7 0 6 ) e m ht ir o gl a( n oi ta t u mre p 484 k eep 1 2 2 n o t e l g n i s n r et t a p 5 4 3 n o it a s il it u 4 5 3 n o it i ni f d r u s 8 5 3 n o it as il ai cps 753 ,353 snoisserpxe sert marap 943 ep yt ed sert marap 253 snoitatimil 443 n oi ta rc s n o i t c n o f e d n or t a p 6 6 3 n o it a s il it u 573 ,373 noitasilaicps 673 t ua f d rap ser t marap 073 snoisserpxe sert marap 963 ep yt ed sert marap 324 egatirh te 773 itimad noitaralcd te

625 rorre_ wol frevo 4 0 5 r ei h ci f n u d eru tre v u o 625 egnar_ fo_tuo 405 t u o 605 ,505 maertsrtso 9 2 6 m a er ts g nir ts o 794 ,074 maertso 4 9 2 , 3 9 2 r ot are p o 351 sruetniop sel rus snoitarpo 892 s elb ass in i f dr us s~ se d u ae lba t 021 noitini fdrus 7 3 n o it c ar ts u os 85 f o ez is 65 leitneuqs 5 4 l e nn o it al er 8 3 s t ir oirp 15 noitatne mrcni-rp 15 n oi ta t ne mrc d-rp 15 noitatnemrcni-tsop 15 noitatnemrcd-tsop 73 soppo 513 ,652 ,751 wen

Index

754

545 erdrod noitaler 2 2 5 n oi t p e c x e e n u d e c n a l er 8 1 e r u t i r c ' d s e l g r 511 re ts i ger 531 ~ enud noitasilaitini 1 9 6 ~ e d r u et p m o c 692 ,142 ecner fr 154 ,054 elleutriv noitcno f enud n o it i ni f der 225 noitpecxe enud t n e m eh c ne lc der 511 )snoitcno f sed( noisrucr 014 evird essalc enud tejbo nud eip o cer 2 8 1 C el y ts e d e n a h c e n u s na d 426 enahc enu snad 017 ,107 ,316 ,306 emhtirogla e h cre h cer 437 )b il d tsc( c o ll aer 6 3 6 ) x e l p m o c e ss a l c( l a er 484 d aer 684 etatsdr 226 n i gebr 625 rorre_egnar 607 ,906 )emhtirogla( el f fuhs_modnar 337 )bildtsc( dnar

175 e ue uq

827 )oidtsc( stup 8 2 7 ) o i dts c( ra h ct u p 827 )o i dt sc( ct up 484 kc abt up 374 tup 617 paeh_hsup 465 ,265 tnorf_hsup 565 ,855 ,655 kcab_hsup 275 ,175 ,075 hsup

793 ,902 cilbup 4 0 1 s n o isr e v n o c t e 821 eraps noitalip moc te 737 ,301 ep ytotorp 893 ,793 detcetorp 14 seuqir mun snoitomorp 31 erutcurts 22 ecruos 81 erutirc'd selgr 31 lapicnirp 32 elbatucxe 3 1 et t- n e 22 noitid e m mar g or p 2 er u tc urt s 5 ,1 elarudcorp 6 ,2 tejbo etneiro n o i t a m m ar g or p 793 ,902 etavirp 275 e ue uq_ y t iro irp 83 )sruetarpo sed( stiroirp 1 2 7 ) o i dt s c( f t n ir p 507 ,806 )e mhtirogla( noitatu mrep_verp 366 ,22 ,61 ruessecorprp 15 )sruetarpo( noitatnemrcni-rp 3 4 5 eri a n u 345 tne mugra ne 345 erianib 3 4 5 t a c i d r p 15 )sruetarpo( noitatnemrcd-rp 3 9 4 e u qir m u n n ois ic r p 674 etirc noitamro fnil ed 03 noisicrp 894 noisicerp 237 )htamc( wop 15 )sruetarpo( noitatnemrcni-tsop 15 )sruetarpo( noitatnemrcd-tsop 111 selacol selbairav sed 011 selabolg selbairav sed 291 erutcurts ep yt nud e tr op 2 t i li b at r o p 717 paeh_pop
755

Apprendre le C++

427 ) o id ts c( f na cs 52 )ep yt( er ia la cs 2 3 e ga p e d 2 3 e n g il e d

t u as

85 )r ue tar po( fo ez is 226 ,275 ,175 ,075 ,965 ,265 ,955 ezis 237 h ta mc 636 xelpmoc essalc hn is 1 2 2 ) n oi t p e c n o c e d fi t o m( n o t e l g n is 237 h ta mc 636 xelpmoc essalc n is 52 )ep yt( elpmis 4 4 ) e p yt( r a h c d e n g is 694 ,494 sopwohs 594 ,494 tniopwohs 594 ,494 esabwohs 6 2 )e p yt( t ni tr o hs 936 ) yarralav ed( t fihs 694 ,394 ,574 wtes 694 n oi si cerp tes 9 0 5 p m j t es 6 9 4 s g al f s o i t e s 694 ll i f tes 794 f tes 694 esabtes 417 ,716 )emhtirogla( noinu_tes 3 2 5 d et c e p x e n u _ t es 325 ,125 etanimret_tes 716 )emhtirogla( ecnere f fid_cirte mm ys_tes 5 1 7 ) e m h tir o gl a( e c n er e f f i d _ c irt e m ys _ t es 8 2 5 re l d na h _ we n _ tes 417 ,716 )emhtirogla( noitcesretni_tes 517 ,716 )emhtirogla( ecnere f fid_tes 985 tes 5 9 5 e c n e u q s 76 ,91 sruetaraps 046 euqsa m rap sruelav ed noitcels 205 p k ees 205 g k ees 1 4 6 r u et ce v e d n oi t ces 7 7 5 d n o ces 207 ,406 )emhtirogla( n_hcraes 207 ,406 )emhtirogla( hcraes 594 ,494 cifitneics

6 2 5 r orre_ e m it n ur 4 0 7 ) e m h tir o gl a( y p oc _e t at or 407 ,706 )emhtirogla( etator 2 ess ets ub or 494 t hg ir 526 dni fr 226 ,465 ,755 rotareti_esrever 307 )emhtirogla( ypoc_esrever 307 )e mhtirogla( esrever 2 t il ibas il i tu r 0 0 1 ) n oi t c urt s ni( nr ut er 2 3 t oir a h c r u ot er 486 )ed noitseg( ecruosser 836 ,226 ,065 eziser 694 s ga l fs oi tes er 226 ,955 evreser 071 C el yts ed senahc sed noitatnesrper 407 ,606 )emhtirogla( fi_ecalper 407 )e mhtirogla( fi_ ypoc_ecalper 407 )emhtirogla( ypoc_ecalper 8 2 6 n oi t c n o f 407 ,606 emhtirogla ecalper 37 ,41 noititpr 226 dner 606 )emhtirogla( tnemecalpmer 7 0 7 , 1 1 6 )e m ht ir o g la( fi _e v o m er 5 6 5 n oi t c n o f 7 0 7 e m h tir o gl a fi_e v o m er 116 )emhtirogla( fi_ ypoc_evomer 7 0 7 ) e m h tir o gl a( yp oc_e v o m er 5 6 5 n oi t c n o f 607 ,116 emhtirogla e v o m er

Index

756

326 ,585 ,355 paws 492 erbmem noitcnof rap 3 9 2 ei m a n o it c n o f r a p 756 s mon ed secapse te 4 5 3 s n o i t c n o f e d s n or t a p e d 513 wen ruetarpol ed 513 eteled ruetarpol ed 984 ,974 >> ruetarpol ed 214 ,303 = ruetarpol ed 984 ,174 << ruetarpol ed 0 0 3 + + r u et ar p ol e d 684 ,413 )( ruetarpol ed 6 8 4 ! r u et ar p ol e d 0 0 3 -- r u et ar p ol e d 203 noitatcaf fal ed 186 ,132 serbme m snoitcno f ed 876 ,911 snoitcno f ed 154 elleutriv noitcno f enud 021 sruetarpod n oi t i n i f d r u s 192 ,911 egrahcrus 607 ,016 )emhtirogla( noisserppus 7 8 1 ~ e n u d n o it asi l it u 6 8 1 el d o m 9 8 1 ~ e d n oi ta cir b m i 802 esilarng 681 noitaralcd 191 serutcurts ed 3 1 e m mar g or p n u' d 581 ~ enud pmahc eru t cur ts 137 ,281 )gnirtsc( rtsrts 137 )gnirtsc( npsrts 137 ,281 )gnirtsc( rhcrrts 1 p ur ts u or t S 181 )gnirtsc( pmcinrts 037 ,181 )gnirtsc( ypcnrts 137 ,181 )gnirtsc( pmcnrts 037 ,971 )gnirtsc( tacnrts 137 )gnirtsc( nelrts 037 h.gnirts 226 ,126 ,184 ,274 gnirts 1 8 1 ) g n irts c( p m cir ts

1 3 7 ) g nir tsc( nps crt s 037 ,181 )gnirtsc( ypcrts 037 ,081 )gnirtsc( pmcrts 137 ,281 )gnirtsc( rhcrts 037 ,871 )gnirtsc( tacrts 605 rts 335 L T S 337 h.bildts 4 9 4 o i dt s 274 rredts 484 tol f nud ruerred tutats 311 ~ essalc ed elbairav 504 stejbo sed egap yt 252 te jb o 122 ~ ennod erb me m 442 erbmem noitcno f 152 ,611 ,111 noitacollad essalc e u q it at s 252 ,442 ,222 ,231 citats 0 7 5 k c at s 807 ,216 )emhtirogla( tros_elbats 507 ,016 )e mhtirogla( noititrap_elbats 427 )oidtsc( fnacss 337 )bildtsc( dnars 237 )htamc( trqs 127 )oidtsc( ftnirps 865 ecilps 325 eca fretnid noitaci ficps 8 5 3 s n o it c n o f e d n or t a p n u d el l e itr a p 853 snortap snoitcno f ed 373 erbmem noitcno f enud 573 essalc enud 373 sessalc ed nortap nud noitasilaicps 4 5 1 sr u et n i o p e d n o it c ar ts u o s 93 ticapac ed tnemessapd-suos 964 ,36 dradnats eitros 617 paeh_tros 665 noitcno f 8 0 7 e m ht ir o gl a tr o s 1 4 6 e c il s 694 ,494 swpiks
757

Apprendre le C++

494 fubtinu 7 0 7 ) e m h tir o gl a( y p oc _e u q i n u 6 6 5 n o it c n o f 707 ,116 e mhtirogla e uq in u 822 ,891 noinu 4 9 5 )r u e t ar t i( l e n n oi t c eri d i n u 625 ,325 detcepxenu 6 2 5 r orre_ w ol fr e dn u

43 eur t 6 6 5 ets i l e n u d 807 ,216 emhtirogla ir t 3 0 7 , 6 0 6 ) e m ht ir o g l a( n o it a mr o fs n ar t 607 )emhtirogla( mro fsnart 275 ,075 pot 625 gnolu_ot 445 se mi t 325 ,225 ,915 ,415 ,115 worht 3 4 2 si h t 325 ,125 etani mret 305 pllet 305 gllet 617 sa t 2 3 7 ht a m c 6 3 6 x el p m o c ess al c h na t 2 3 7 ht a m c 6 3 6 x el p m o c ess al c na t 76 nop mat 23 elacitrev 2 3 e l a t n o zir o h n oi t al u b a t 091 ~ ed erutcurts 151 mon 471 ,371 ,441 noitasilaitini 241 ,141 ,041 ecidni 261 tnemugra ne 2 4 1 n oi s ne m i d 341 ,141 noitaralcd 561 ,461 elbairav elliat ed 1 9 1 s er ut c ur ts e d 3 7 2 st ej b o d 341 eriomm tnemegnarra 931 u ae lba t

6 2 5 , 4 6 4 di ep yt 176 ,366 fedep yt 364 o fni_ep yt 4 4 ra hc de n gi s n u 891 n o in u 52 rutcurts 681 erutcurts 5 2 elp m is 4 4 r a hc d e n g is 6 2 t ni tr o hs 52 er ia la cs 6 2 t n i g n ol 9 2 el b u o d g n ol 6 2 t ni 92 ,62 tnattol f 92 taol f 0 0 2 n oi tar m u n 7 2 , 6 2 r ei t n e 92 elbuod 0 3 ~ n u d e n ia m o d 302 ruetasilitul rap ini fd 52 esab ed 3 1 el b air a v e n u' d 9 6 1 C e l yts e d e n a h c 44 ,13 ertcarac 34 ,43 ,62 loob ep yt 504 euqitats egap yt 344 euqi man yd egap yt 215 )c o lb( yrt 4 0 5 c n urt

1 7 6 e m y n o n ys 9 7 ) n o it c urts n i( h c t i ws 107 )e mhtirogla( segnar_paws

Index

758

23 )er tc ara c( TV 3 3 e li t a l o v 837 * d i o v 201 ,101 diov 444 ,734 lautriv 165 ,055 rotcev 2 4 6 e c i d n i d r u e t c e v 31 ep yt 6 1 1 , 3 1 1 e u q it at s 011 e tr op 4 1 1 c o l b n u el a c o l 1 1 1 el a c o l 611 ,33 ~ ed noitasilaitini 231 ehcac elabolg 131 ,901 elabolg 611 ,211 euqita motua elbairav 085 pmoc_eulav 154 etnairavoc ruoter ed ruelav 201 n ia m e d 101 ,99 noitcno f enud ruoter ed ruelav 7 3 6 yarr al a v 536 yarra_lav 4 2 1 ) gra d tsc( tr ats_ a v 5 2 1 ) gr a d ts c( ts il _ a v 621 )gradtsc( dne_av 421 )gradtsc( gra_av

694 sw 3 7 4 et ir w 8 9 4 h td i w 6 8 ) n oi t c ur ts ni( e li h w

066 ,556 ,71 )evitcerid( gnisu 2 5 6 ) n oi t ar al c d( g n is u 694 ,494 esacreppu 785 ,585 noitcno f 0 1 7 e m ht ir o gl a dn u ob_repp u 44 )ep yt( rahc dengisnu 82 )tubirta( dengisnu 794 ftesnu
759

Apprendre le C++

DITIONS EYROLLES 61, bd Saint-Germain 75240 Paris Cedex 05 www.editions-eyrolles.com

Le code de la proprit intellectuelle du 1er juillet 1992 interdit en effet expressment la photocopie usage collectif sans autorisation des ayants droit. Or, cette pratique sest gnralise notamment dans les tablissements denseignement, provoquant une baisse brutale des achats de livres, au point que la possibilit mme pour les auteurs de crer des uvres nouvelles et de les faire diter correctement est aujourdhui menace. En application de la loi du 11 mars 1957, il est interdit de reproduire intgralement ou partiellement le prsent ouvrage, sur quelque support que ce soit, sans autorisation de lditeur ou du Centre Franais dExploitation du Droit de Copie, 20, rue des Grands-Augustins, 75006 Paris. Groupe Eyrolles, 2007, ISBN : 978-2-212-12135-3

Dpt lgal : aot 2007 N dditeur : 7677 Imprim en France

Anda mungkin juga menyukai