872
Jesse Liberty et Bradley Jones Initiez-vous à la programmation en C++ C ++ Le langage

LE PROGRAMMEUR Le langage C++maurise-software.e-monsite.com/medias/files/le-langage-c-initiez... · en découvrant les principaux concepts du langage et de la programmation orientée

  • Upload
    trinhtu

  • View
    217

  • Download
    6

Embed Size (px)

Citation preview

  • Bien dbuter en C++

    Anatomie dun programme C++

    Variables et constantes

    Expressions et instructions

    Fonctions

    Programmation oriente objet

    Droulement dun programme

    Pointeurs

    Rfrences

    Fonctions avances

    Analyse et conception oriente objet

    Hritage

    Tableaux et chanes

    Polymorphisme

    Classes et fonctions spciales

    Concepts avancs dhritage

    Les fl ux

    Espaces de noms

    Les modles

    Gestion des erreurs et exceptions

    Et maintenant ?

    Mots-cls C++

    Priorit des oprateurs

    Solutions des exercices

    tude des listes chanes

    OUnma

    Matrisez rapidement les principes fondamentaux de la programmation oriente objet !

    Grce cet ouvrage, initiez-vous rapidement au C++

    en dcouvrant les principaux concepts du langage

    et de la programmation oriente objet : gestion des

    entres-sorties, boucles et tableaux, modles, etc.

    Ces concepts sont mis en uvre dans de nombreux

    exemples de codes, qui sont analyss en dtail pour

    vous permettre ensuite dcrire vos propres program-

    mes. Vous pourrez galement vous exercer et tester

    vos connaissances avec les quizz et exercices pr-

    sents dans chaque chapitre, dont vous trouverez les

    rponses la fi n de louvrage.

    Entirement rvis pour cette nouvelle dition, ce

    best-seller vous guidera pas pas dans votre appren-

    tissage du C++.

    Les codes sources du livre sont disponibles sur www.pearson.fr.

    Niveau : Dbutant / IntermdiaireCatgorie : ProgrammationConfi guration : Multiplate-forme

    ISBN : 978-2-7440-2359-0

    2359 0609 32 Le la

    nga

    ge

    Le langage C++

    Jesse Libertyet Bradley Jones

    Initiez-vous la programmation en C++

    C++Le langage

    propos de lauteurJesse Liberty est lauteur de nombreux best-sellers sur ASP.NET, C# et C++. Il a travaill pour AT&T et Citibank avant dintgrer les quipes de Microsoft.Bradley L. Jones dirige de nombreux sites web ddis la programmation, dont CodeGuru.com, Developer.com et Javascripts.com.

    Pearson Education FrancePearson Education France47 bis, rue des Vinaigriers 75010 Paris47 bis, rue des Vinaigriers 75010 ParisTl. : 01 72 74 90 00Tl. : 01 72 74 90 00Fax : 01 42 05 22 17Fax : 01 42 05 22 17www.pearson.frwww.pearson.fr

    C++

    2359-prog C++.indd 12359-prog C++.indd 1 18/05/09 17:29:1518/05/09 17:29:15

  • Jesse Liberty et Bradley Jones

    Le langage C++

    L E P R O G R A M M E U R

    C++ Livre Page I Jeudi, 7. mai 2009 9:45 09

  • Pearson Education France a apport le plus grand soin la ralisation de ce livre afin de vous four-nir une information complte et fiable. Cependant, Pearson Education France nassume de respon-sabilits, ni pour son utilisation, ni pour les contrefaons de brevets ou atteintes aux droits de tiercespersonnes qui pourraient rsulter de cette utilisation.

    Les exemples ou les programmes prsents dans cet ouvrage sont fournis pour illustrer les descriptionsthoriques. Ils ne sont en aucun cas destins une utilisation commerciale ou professionnelle.

    Pearson Education France ne pourra en aucun cas tre tenu pour responsable des prjudicesou dommages de quelque nature que ce soit pouvant rsulter de lutilisation de ces exemples ouprogrammes.

    Tous les noms de produits ou marques cits dans ce livre sont des marques dposes par leurspropritaires respectifs.

    Aucune reprsentation ou reproduction, mme partielle, autre que celles prvues larticle L. 122-5 2 et 3 a) du code de laproprit intellectuelle ne peut tre faite sans lautorisation expresse de Pearson Education France ou, le cas chant, sans lerespect des modalits prvues larticle L. 122-10 dudit code.

    No part of this book shall be reproduced, stored in a retrieval system, or transmitted by any means, electronic, mechanical,photocopying, recording, or otherwise, without written permission from the publisher.

    Publi par Pearson Education France47 bis, rue des Vinaigriers75010 PARISTl. : 01 72 74 90 00www.pearson.fr

    Mise en pages : TyPAO

    Tous droits rservs

    Titre original : Teach Yourself C++ in 21 Days, fifth edition

    Traduit de lamricain par Nathalie Le Guillou de Penanros

    Nouvelle dition franaise revue, corrige et complte par Eric Jacoboni

    ISBN original : 0-672-32711-2Copyright 2004 Sams PublishingAll rights reserved

    C++ Livre Page II Jeudi, 7. mai 2009 9:45 09

    ISBN : 978-2-7440-4023-8Copyright 2009 Pearson Education France

  • Sommaire

    Introduction ............................................ 1

    Partie I .................................................... 3

    1. Bien dbuter en C++ .......................... 5

    2. Anatomie dun programme C++ ...... 23

    3. Variables et constantes ...................... 39

    4. Expressions et instructions ................ 65

    5. Fonctions ............................................. 97

    6. Programmation oriente objet .......... 135

    7. Droulement dun programme ......... 173

    Partie II ................................................... 207

    8. Pointeurs ............................................. 209

    9. Rfrences .......................................... 243

    10. Fonctions avances ........................... 279

    11. Analyse et conception oriente objet 321

    12. Hritage ............................................ 357

    13. Tableaux et chanes .......................... 395

    14. Polymorphisme ................................ 437

    Partie III ................................................. 481

    15. Classes et fonctions spciales .......... 483

    16. Concepts avancs dhritage .......... 515

    17. Les flux ............................................. 575

    18. Espaces de noms .............................. 619

    19. Les modles ...................................... 641

    20. Gestion des erreurs et exceptions ... 699

    21. Et maintenant ? ............................... 737

    A. Mots-cls C++ ................................... 775

    B. Priorit des oprateurs ..................... 777

    C. Solutions des exercices ..................... 779

    D. tude des listes chanes .................. 837

    Index ....................................................... 849

    C++ Livre Page III Jeudi, 7. mai 2009 9:45 09

  • C++ Livre Page IV Jeudi, 7. mai 2009 9:45 09

  • Table des matires

    Introduction ............................................ 1

    Public vis ........................................... 1

    Conventions typographiques .............. 2

    Partie I .................................................... 3

    1. Bien dbuter en C++ .......................... 5

    Introduction ........................................ 5

    Un peu dhistoire... ............................. 5

    La programmation oriente objet (POO) 9

    volution de C++ ............................... 11

    Est-il ncessaire dapprendre dabord le langage C ? .................................... 11

    C++, Java et C# .................................. 11

    Norme ANSI ...................................... 12

    Prparation la programmation ......... 13

    Votre environnement de dveloppement 13

    Cration du programme ...................... 14

    Cycle de dveloppement ..................... 15

    Votre premier programme C++ : BONJOUR.cpp ................................... 16

    Comment tirer parti de votre compilateur 19

    Erreurs de compilation ........................ 20

    Questions-rponses ............................. 21

    Testez vos connaissances .................... 22

    Exercices ............................................ 22

    2. Anatomie dun programme C++ ...... 23

    Un programme simple ........................ 24

    tude rapide de lobjet cout ............... 26

    Utilisation de lespace de nom standard 28

    Commentaires ..................................... 30

    Les fonctions ..................................... 33

    Questions-rponses ............................. 36

    Testez vos connaissances .................... 37

    Exercices ............................................ 37

    3. Variables et constantes ...................... 39

    Quest-ce quune variable ? ............... 39

    Dfinition dune variable .................... 44

    Cration de plusieurs variables la fois 48

    Affectation de valeurs aux variables .. 48

    Cration dalias avec typedef ............. 50

    short ou long : que choisir ? ............... 51

    Variables caractre .............................. 54

    Constantes .......................................... 57

    Constantes numres ........................ 59

    Questions-rponses ............................. 62

    Testez vos connaissances .................... 63

    Exercices ............................................ 64

    C++ Livre Page V Jeudi, 7. mai 2009 9:45 09

  • VI Le langage C++

    4. Expressions et instructions ............... 65

    Instructions ......................................... 66

    Expressions ........................................ 67

    Oprateurs .......................................... 69

    Combinaison doprateurs daffectation et doprateurs mathmatiques .......... 72

    Incrmentation et dcrmentation ...... 72

    Priorit des oprateurs ....................... 75

    Parenthses imbriques ..................... 76

    Vrai ou faux ....................................... 77

    Linstruction if .................................... 78

    Utilisation daccolades dans les instructions if imbriques ..... 86

    Oprateurs logiques ........................... 89

    valuation en court-circuit ................. 90

    Priorit des oprateurs relationnels .... 90

    Vrai ou faux ....................................... 91

    Oprateur conditionnel (ternaire) ....... 92

    Questions-rponses ............................ 93

    Testez vos connaissances ................... 94

    Exercices ............................................ 95

    5. Fonctions ............................................ 97

    Quest-ce quune fonction ? ............... 98

    Valeurs renvoyes, paramtres formelset effectifs ........................................... 99

    Dclaration et dfinition de fonctions 99

    Excution des fonctions ..................... 103

    Porte des variables ............................ 104

    Instructions des fonctions .................. 111

    Retour sur les paramtres des fonctions 111

    Retour sur les valeurs renvoyes ....... 112

    Paramtres par dfaut ......................... 115

    Surcharge de fonctions ....................... 117

    Pour en savoir plus sur les fonctions .. 121

    Principe des fonctions ........................ 128

    Questions-rponses ............................ 132

    Testez vos connaissances ................... 133

    Exercices ............................................ 133

    6. Programmation oriente objet ......... 135

    C++ est-il orient objet ? ................... 135

    Cration de nouveaux types ................ 137

    Prsentation des classes et des membres 138

    Accs aux membres dune classe ....... 141

    Accs priv et accs public ................ 142

    Implmentations des mthodes de la classe .......................................... 148

    Ajout de constructeurs et de destructeurs 151

    Inclure des fonctions membres const .. 156

    Interface et implmentation ................ 156

    O placer les dclarations de classes et les dfinitions de mthodes ? .......... 159

    Implmentation en ligne ..................... 161

    Classes imbriques ............................. 163

    Les structures ...................................... 168

    Questions-rponses ............................. 169

    Testez vos connaissances .................... 170

    Exercices ............................................. 171

    7. Droulement dun programme ......... 173

    Les boucles ......................................... 173

    Les boucles while ............................... 175

    Les boucles do...while ........................ 183

    Linstruction do...while ....................... 184

    Les boucles for ................................... 186

    Rsum des boucles ............................ 195

    Contrler le flux avec des instructions switch .................................................. 198

    Utilisation de switch dans un menu ... 201

    Questions-rponses ............................. 204

    Testez vos connaissances .................... 205

    Exercices ............................................. 206

    Partie II ................................................... 207

    8. Pointeurs ............................................. 209

    Quest-ce quun pointeur ? ................. 210

    Utilit des pointeurs ............................ 220

    La pile et lespace mmoire adressable (tas) ..................................................... 220

    En savoir plus sur les fuites mmoire . 225

    Cration dobjets sur le tas ................. 226

    Suppression dobjets du tas ................ 226

    C++ Livre Page VI Jeudi, 7. mai 2009 9:45 09

  • Table des matires VII

    Accs aux donnes membres .............. 228

    Cration de donnes membres dans le tas 229

    Le pointeur this ................................... 232

    Pointeurs perdus, incontrlables ou pointeurs fous ................................ 233

    Pointeurs const .................................... 237

    Questions-rponses ............................. 240

    Testez vos connaissances .................... 241

    Exercices ............................................. 241

    9. Rfrences .......................................... 243

    Quest-ce quune rfrence ? .............. 244

    Utilisation de loprateur adresse de (&) sur des rfrences ................................ 245

    Rfrencement des objets ................... 248

    Pointeurs nuls et rfrences nulles ..... 250

    Passage de paramtres par rfrence .. 251

    En-ttes et prototypes de fonctions ..... 256

    Renvoi de plusieurs valeurs ............... 257

    Efficacit du passage de paramtres par rfrence ....................................... 260

    Choisir entre rfrences et pointeurs .. 269

    Mlanger les rfrences et les pointeurs dans une liste de paramtres ............... 269

    Renvoi de rfrences dobjet hors de porte ............................................. 271

    Renvoi dune rfrence un objet dans le tas ............................................ 272

    O le pointeur est-il pass ? ................ 275

    Questions-rponses ............................. 275

    Testez vos connaissances .................... 276

    Exercices ............................................. 276

    10. Fonctions avances ........................... 279

    Fonctions membres surcharges ......... 279

    Utilisation de valeurs par dfaut ......... 282

    Choisir entre des valeurs par dfaut et des fonctions surcharges ............... 284

    Le constructeur par dfaut .................. 285

    Surcharge des constructeurs ............... 285

    Initialisation des objets ....................... 287

    Le constructeur de copie ..................... 288

    Surcharge des oprateurs .................... 293

    Conversion de type (transtypage) ....... 312

    Questions-rponses ............................. 317

    Testez vos connaissances .................... 318

    Exercices ............................................ 319

    11. Analyse et conception oriente objet 321

    Les modles ........................................ 322

    Conception : le langage de modlisation 322

    Conception : le processus .................. 324

    tape 1 La conceptualisation : commencer par la vision .................... 327

    tape 2 Lanalyse : collecter les besoins 327

    tape 3 La conception .................... 341

    tapes 4 6 Implmentation, tests et dploiement .................................... 355

    Itrations ............................................. 355

    Questions-rponses ............................. 355

    Testez vos connaissances .................... 356

    Exercices ............................................ 356

    12. Hritage ............................................ 357

    Quest-ce que lhritage ? .................. 357

    Priv ou protg ? ............................... 362

    Lhritage avec les constructeurset les destructeurs ............................... 365

    Redfinition des mthodes de la classe de base ............................. 372

    Mthodes virtuelles ............................ 378

    Questions-rponses ............................. 392

    Testez vos connaissances .................... 393

    Exercices ............................................ 393

    13. Tableaux et chanes .......................... 395

    Quest-ce quun tableau ? ................... 395

    Accs aux lments de tableau ........... 396

    criture dlments hors limite .......... 398

    Erreurs dintervalle ............................ 401

    Initialisation des tableaux ................... 402

    Dclaration de tableaux ...................... 402

    Tableaux dobjets ............................... 404

    Tableaux multidimensionnels ............ 406

    C++ Livre Page VII Jeudi, 7. mai 2009 9:45 09

  • VIII Le langage C++

    Initialisation de tableaux plusieurs dimensions ........................................ 407

    Construire des tableaux de pointeurs . 409

    Larithmtique des pointeurs, un sujet complexe ............................... 411

    Dclaration de tableaux sur le tas ...... 414

    Pointeurs sur tableau et tableaux de pointeurs ........................................ 415

    Pointeurs et noms de tableaux ........... 415

    Suppression des tableaux stocks

    sur le tas ............................................. 417

    Redimensionner les tableaux en cours dexcution ......................................... 418

    Tableaux de caractres et chanes ..... 421

    Les fonctions strcpy() et strncpy() ..... 423

    La classe String .................................. 425

    Listes chanes et autres structures .... 433

    Cration de classes tableaux ............. 434

    Questions-rponses ............................ 434

    Testez vos connaissances ................... 435

    Exercices ............................................ 436

    14. Polymorphisme ................................ 437

    Problmes lis lhritage simple ..... 437

    Hritage multiple ............................... 445

    Types abstraits de donnes (TAD) ..... 463

    Questions-rponses ............................ 477

    Testez vos connaissances ................... 478

    Exercices ............................................ 479

    Partie III ................................................ 481

    15. Classes et fonctions spciales .......... 483

    Partage dinformations entre objets de mme type : donnes membres statiques 484

    Mthodes membres statiques ............. 489

    Pointeurs sur des fonctions ................ 492

    Pointeurs sur des fonctions membres . 507

    Questions-rponses ............................ 512

    Testez vos connaissances ................... 513

    Exercices ............................................ 513

    16. Concepts avancs dhritage ........... 515

    Agrgation ......................................... 515

    Hritage et Dlgation/Agrgation .... 531

    Hritage priv ..................................... 541

    Classes amies ...................................... 550

    Fonctions amies .................................. 560

    Fonctions amies et surcharge doprateur .......................................... 560

    Surcharge de operator

  • Table des matires IX

    Questions-rponses ............................. 637

    Testez vos connaissances .................... 638

    Exercices ............................................. 639

    19. Les modles ...................................... 641

    Quest-ce quun modle ...................... 641

    Construire une dfinition de modle ... 643

    Passer des objets modles instancis aux fonctions ....................................... 651

    Modles et amis .................................. 652

    Utilisation des des modles ................ 660

    La bibliothque des modles standard 676

    Les conteneurs .................................... 676

    Les conteneurs squentiels ................. 677

    Les conteneurs associatifs .................. 687

    Les classes dalgorithmes ................... 692

    Questions-rponses ............................. 695

    Testez vos connaissances .................... 696

    Exercices ............................................. 697

    20. Gestion des erreurs et exceptions ... 699

    Erreurs logiques et fautes de syntaxe .. 700

    Les coulisses des exceptions ............... 702

    Produire ses propres exceptions .......... 706

    Crer une classe dexception .............. 708

    Placement des blocs try et catch ......... 712

    Donnes dans les exceptions et noms des objets exceptions .......................... 719

    Exceptions et modles ........................ 727

    Exceptions et erreurs .......................... 730

    Recherche des erreurs ......................... 731

    Questions-rponses ............................. 733

    Testez vos connaissances .................... 734

    Exercices ............................................. 734

    21. Et maintenant ? ................................ 737

    Le prprocesseur et le compilateur ..... 738

    La directive de prprocesseur #define . 738

    Inclusions et clauses dinclusion ........ 741

    Les macros ......................................... 742

    Manipulation des chanes ................... 745

    Les macros prdfinies ....................... 747

    La macro assert() ............................... 747

    Les fonctions inline ............................ 757

    Oprations sur les bits ........................ 758

    Styles de programmation .................... 765

    Commentaires ..................................... 768

    Comment poursuivre votre dveloppement C++ .................. 770

    Questions-rponses ............................. 772

    Testez vos connaissances .................... 773

    Exercices ............................................ 774

    A. Mots-cls C++ ................................... 775

    B. Priorit des oprateurs ..................... 777

    C. Solutions des exercices ..................... 779

    Chapitre 1 ........................................... 779

    Chapitre 2 ........................................... 780

    Chapitre 3 ........................................... 782

    Chapitre 4 ........................................... 784

    Chapitre 5 ........................................... 784

    Chapitre 6 ........................................... 787

    Chapitre 7 ........................................... 791

    Chapitre 8 ........................................... 793

    Chapitre 9 ........................................... 794

    Chapitre 10 ......................................... 797

    Chapitre 11 ........................................ 802

    Chapitre 12 ......................................... 804

    Chapitre 13 ........................................ 805

    Chapitre 14 ........................................ 806

    Chapitre 15 ........................................ 808

    Chapitre 16 ......................................... 815

    Chapitre 17 ......................................... 819

    Chapitre 18 ........................................ 822

    Chapitre 19 ......................................... 823

    Chapitre 20 ......................................... 828

    Chapitre 21 ......................................... 834

    D. tude des listes chanes .................. 837

    Les composants dune liste chane ... 838

    Index ....................................................... 849

    C++ Livre Page IX Jeudi, 7. mai 2009 9:45 09

  • C++ Livre Page X Jeudi, 7. mai 2009 9:45 09

  • Introduction

    Ce livre a t conu pour vous initier la programmation en C++. Vous y apprendrez lesprincipaux concepts du langage (gestion des entres-sorties, boucles et tableaux, modles,etc.) et de la programmation oriente objet. Chaque chapitre contient des exemples deprogrammes qui mettent en uvre les concepts tudis et qui sont analyss en dtail.

    Tous les chapitres se terminent par un jeu de questions-rponses, un quiz et des exercicesdont vous trouverez les rponses lAnnexe D.

    Les listings de code de chacun des chapitres sont disponibles sur le site www.pearson.fr, la page consacre cet ouvrage.

    Public visIl nest pas ncessaire davoir une exprience pralable de la programmation pour tirerparti de ce livre car il part de zro et vous apprend la fois le langage et les concepts deprogrammation C++. Les nombreux exemples de syntaxe et les analyses dtailles desextraits de code constituent un excellent guide touristique pour votre voyage dans cet envi-ronnement si riche. Que vous soyez un programmeur dbutant ou expriment, vous pour-rez constater que cet ouvrage vous permettra dapprendre rapidement et simplement lelangage C++.

    C++ Livre Page 1 Jeudi, 7. mai 2009 9:45 09

  • 2 Le langage C++

    Conventions typographiques

    Ces paragraphes soulignent des informations qui amlioreront lefficacit devos programmes C++.

    Ces notes fournissent des prcisions sur le sujet abord.

    Ces avertissements vous vitent de tomber dans les piges les plus communsqui peuvent vous gcher lexistence.

    Les encadrs

    Ils prcisent la syntaxe dune instruction.

    Il peut aussi sagir daparts destins attirer votre attention sur un cas particulier ou unesituation exceptionnelle.

    Cet ouvrage utilise galement des polices de caractres diffrentes pour distinguer le codeC++ du texte classique :

    Les commandes, variables et autres lments de code apparaissent dans le texte dansune police chasse fixe spciale.

    Les termes nouveaux ou importants sont crits en italique.

    Les parties variables dans les descriptions de syntaxe apparaissent en police chasse fixe italique. Ce style signale que vous devez remplacer lespace rservpar le nom rel du fichier, du paramtre ou de tout autre lment quil reprsente.

    En outre, toutes les lignes de code sont numrotes. Vous constaterez parfois que certaineslignes trop longues pour le format de ce livre ont t dcoupes en plusieurs lignes : en cecas, les lignes de continuation ne seront pas numrotes et vous devrez saisir ces lignescomme une seule ligne dans votre diteur de texte.

    Faire Ne pas faire

    Un rappel des conseils suivre. Les erreurs ou confusions viter.

    Astuce

    Info

    Attention

    C++ Livre Page 2 Jeudi, 7. mai 2009 9:45 09

  • Partie I

    Dans les sept chapitres qui constituent cette partie, vous ferez vos premiers pas enprogrammation en gnral et en C++ en particulier. Les Chapitres 1 et 2 abordent lesnotions de base de la programmation et le droulement dune application. Au Chapi-tre 3, vous apprendrez grer des variables et des constantes dans un programme. LeChapitre 4 est consacr aux branchements conditionnels raliss laide dinstruc-tions et dexpressions. Vous vous initierez, au Chapitre 5, lutilisation des fonctions,et celle des classes et des objets au Chapitre 6. Enfin, partir du Chapitre 7, vousserez en mesure de comprendre le droulement dune application et dcrire vospremiers programmes orients objet.

    C++ Livre Page 3 Jeudi, 7. mai 2009 9:45 09

  • C++ Livre Page 4 Jeudi, 7. mai 2009 9:45 09

  • 1Bien dbuter en C++Au sommaire de ce chapitre

    Pourquoi choisir le langage C++ ?

    Les tapes du cycle de dveloppement dun programme

    crire, compiler et lancer votre premier programme C++

    IntroductionBienvenue dans Le Langage C++ de la collection Le Programmeur ! Cet ouvrage a pourobjectif de vous initier efficacement la programmation en langage C++.

    Un peu dhistoire...Les langages de programmation ont considrablement volu depuis les premiers calcula-teurs qui avaient t conus pour les calculs de trajectoires dartillerie durant la secondeguerre mondiale. cette poque, les programmeurs travaillaient avec le langage informa-tique le plus primitif qui soit le langage machine ce qui les obligeait grer de longues

    C++ Livre Page 5 Jeudi, 7. mai 2009 9:45 09

  • 6 Le langage C++

    chanes de 1 et de 0. Puis, les premiers assembleurs apparurent, afin de rendre les instruc-tions machine plus comprhensibles et plus faciles utiliser puisquelles taient dsormaisreprsentes par des instructions mnmoniques comme MOV et ADD.

    Dans les annes 60 apparurent des langages plus volus comme BASIC et COBOL, quipermettaient aux programmeurs dutiliser une syntaxe proche de la langue anglaise (lecode source), avec des instructions et des mots comme Let I = 100. Les lignes dinstructionstaient ensuite traduites en langage machine par des interprteurs ou des compilateurs.

    Un interprteur traduit et excute une une les instructions du programme (ou codesource) et les transforme directement en actions.

    Un compilateur passe par une tape intermdiaire (la compilation) qui produit dabord unfichier objet. Le compilateur fait ensuite appel un diteur de liens (ou linker) qui trans-forme ce fichier objet en programme excutable.

    Les interprteurs lisent les instructions ligne ligne et excutent le code immdiatement,ce qui en simplifie lutilisation. Aujourdhui, les programmes interprts sont gnralementappels scripts.

    Certains langages, comme Visual Basic 6, dsignent linterprteur sous le nom de biblio-thque dexcution. Dautres langages, comme Visual Basic .NET et Java, disposent dun autrecomposant, appel "machine virtuelle" (VM, Virtual Machine) ou excuteur. Bien que la VMsoit aussi un interprteur, il ne sagit plus dun interprteur de code source qui se contentede traduire un langage lisible en code objet : la VM interprte et excute un "langagemachine indpendant de lordinateur" compil, parfois appel "langage intermdiaire".

    Les compilateurs ajoutent les tapes supplmentaires de compilation du code source(comprhensible par lhomme) en code objet (lisible par la machine). Ceci pourrait appa-ratre comme un inconvnient mais, en ralit, cette tape permet de crer un programmedont la vitesse dexcution est optimise puisque la traduction du fichier source en langagemachine a dj t ralis une fois pour toutes, au moment de la compilation. Il nest doncplus ncessaire de retraduire le programme chaque fois quon lexcute.

    Lautre avantage des langages compils comme C++ tient la diffusion des programmespuisque lon peut distribuer un fichier excutable des personnes qui ne disposent pas ducompilateur. Avec un langage interprt, par contre, lutilisateur doit ncessairementpossder linterprteur pour pouvoir excuter le programme.

    C++ est gnralement un langage compil, mme sil existe quelques interprteurs C++. linstar de nombreux langages compils, il a la rputation de produire des programmesrapides et performants.

    En fait, pendant longtemps, la principale proccupation des programmeurs tait de conce-voir des applications trs courtes pouvant sexcuter rapidement, car la mmoire et letemps de calcul cotaient cher. Avec la miniaturisation des ordinateurs, laugmentation de

    C++ Livre Page 6 Jeudi, 7. mai 2009 9:45 09

  • Chapitre 1 Bien dbuter en C++ 7

    leurs performances et la chute des prix, les priorits ont chang. Dsormais, le cot dedveloppement dpasse largement celui dun ordinateur de type PC ou mini. Limportantest dcrire des programmes performants, bien construits et faciles mettre jour (cest--dire sans surcot excessif).

    Le mot programme a deux sens. Il dsigne les instructions (ou code source)crites par un dveloppeur, mais galement lensemble dun logiciel excuta-ble. Cette homonymie peut tre une source de confusion et il est important defaire la distinction entre le fichier source et le programme excutable.

    Comment rsoudre les problmesLes problmes auxquels sont confronts les programmeurs sont totalement diffrents deceux quils devaient rsoudre il y a une vingtaine dannes. Dans les annes 80, lesprogrammes traitaient des volumes importants de donnes brutes. Le programmeur etlutilisateur final taient tous deux des spcialistes de linformatique. De nos jours, lesutilisateurs sont bien plus nombreux et peu connaissent tous les dtails des ordinateurs et dufonctionnement des programmes. Lutilisateur final actuel recherche des solutions prtes lemploi et capables deffectuer des oprations de gestion courantes ou ponctuelles.

    Linformatique est devenue plus conviviale, mais ce processus a galement conduit lamise en uvre de programmes de plus en plus complexes. Dans les annes 70, les utilisa-teurs taient contraints de saisir des commandes nigmatiques pour voir dfiler lcrandes volumes impressionnants de donnes brutes. Cette poque est rvolue ! Une applica-tion se compose dsormais de fentres, de menus et de botes de dialogue intgrs uneinterface conviviale.

    Avec le dveloppement du Web, les ordinateurs ont abord une re nouvelle de pntrationdu march ; les utilisateurs dordinateurs sont plus nombreux que jamais, et ils sont trsexigeants.

    Au cours des dernires annes, les applications se sont galement tendues dautres pri-phriques : lordinateur de bureau nest plus la seule cible des applications. Les tlphonesportables, les assistants personnels (PDA), les PC de poche et autres priphriques consti-tuent des cibles toutes trouves pour les applications modernes.

    Depuis la premire dition de ce livre, les programmeurs ont rpondu aux demandes desutilisateurs et les programmes sont devenus plus volumineux et plus complexes. La nces-sit de dvelopper des techniques de programmation permettant de grer cette complexitest devenue vidente.

    Les besoins changeant, les techniques et les langages voluent galement pour aider lesprogrammeurs grer la complexit des demandes. Dans cet ouvrage, nous nous

    Info

    C++ Livre Page 7 Jeudi, 7. mai 2009 9:45 09

  • 8 Le langage C++

    concentrerons uniquement sur une partie essentielle de cette volution : le passage de laprogrammation procdurale la programmation oriente objet.

    La programmation procdurale, structure et oriente objetIl y a quelques annes encore, les programmes taient conus comme des suites de proc-dures destines traiter les donnes. Une procdure galement appele fonction oumthode est un ensemble dinstructions sexcutant lune aprs lautre. Les donnes etles procdures taient totalement dissocies et le travail du programmeur consistait connatre les fonctions appeles par dautres fonctions et les donnes qui taient modi-fies. Pour faire face ce niveau de complexit, on a donc invent la programmationstructure.

    Le principe gnral de la programmation structure consiste diviser pour mieux rgner.Un programme peut alors tre considr comme un ensemble de tches. Toute oprationtrop complexe pour tre dcrite simplement est dcompose en un ensemble doprationsplus simples, jusqu nobtenir que des tches suffisamment triviales pour tre aismentcomprhensibles.

    Le calcul du salaire moyen de chaque employ dune entreprise est, par exemple, unetche assez complexe. Toutefois, il est possible de diviser le traitement en plusieurs tchessecondaires :

    1. Compter le nombre demploys.

    2. Dterminer le revenu de chaque employ.

    3. Faire le total de tous les salaires.

    4. Diviser cette valeur par le nombre demploys.

    La troisime tape (total des salaires) peut galement se diviser en tches plus simples :

    1. Lire lenregistrement de chaque salari.

    2. Extraire le salaire de chaque employ.

    3. Ajouter cette valeur au total gnral.

    4. Accder lenregistrement suivant.

    La lecture de chaque enregistrement peut, de la mme faon, tre dcompose en oprationsplus lmentaires :

    1. Ouvrir le fichier des employs.

    2. Rechercher le bon enregistrement.

    3. Lire les donnes.

    C++ Livre Page 8 Jeudi, 7. mai 2009 9:45 09

  • Chapitre 1 Bien dbuter en C++ 9

    La programmation structure rsout des problmes complexes de manire trs fiable.Toutefois, la fin des annes 80, cette mthode a montr ses limites.

    Dune part, il est naturel dassocier les donnes (les enregistrements des employs, parexemple) et leur traitement (tri, modification, etc.). Malheureusement, la programmationstructure spare les donnes des fonctions qui les manipulent et ne propose pas de moyennaturel de les regrouper. La programmation structure est donc souvent dsigne par leterme de programmation procdurale, car elle met laccent sur les procdures (plutt quesur les objets).

    Dautre part, les programmeurs devaient souvent rutiliser des fonctions. Or, certainesfonctions qui convenaient un type de donnes ne pouvaient pas toujours tre rutilisesavec dautres, ce qui limitait leurs avantages.

    La programmation oriente objet (POO)La programmation oriente objet (POO) rpond ces besoins. Elle fournit les techniquespermettant de traiter des applications trs complexes, exploite des composants logicielsrutilisables et associe les donnes aux tches qui les manipulent.

    La caractristique essentielle de la programmation oriente objet est de modliser des"objets" (cest--dire des concepts) plutt que des "donnes". Ces objets peuvent tredes lments graphiques affichables, comme des boutons ou des zones de liste, ou desobjets rels, comme des clients, des bicyclettes, des avions, des chats ou de leau.

    Les objets possdent des caractristiques, galement appeles proprits ou attributs,comme ge, rapidit, volume, noir, humide. Ils ont aussi des fonctionnalits, appelesoprations ou fonctions, comme acclrer, voler, miauler ou couler. Le rle de la program-mation oriente objet est de reprsenter ces objets dans le langage de programmation.

    C++ et la programmation oriente objetLe langage C++ permet dutiliser toutes les possibilits de la programmation orienteobjet, notamment ses trois piliers que sont lencapsulation, lhritage et le polymorphisme.

    Encapsulation

    Un technicien ne fabrique pas les composants quil assemble. Il les choisit selon leursspcifications sans se proccuper de leur fonctionnement interne.

    Lautonomie dun objet est une proprit rsultant dun processus appel encapsulation.Celle-ci permet de masquer les donnes internes dun objet et de lutiliser sans connatreles dtails de son fonctionnement, exactement comme vous utilisez votre rfrigrateur

    C++ Livre Page 9 Jeudi, 7. mai 2009 9:45 09

  • 10 Le langage C++

    sans comprendre le principe des compresseurs. Il reste possible de modifier ce fonction-nement interne sans affecter celui du programme, condition toutefois que les spcifica-tions soient respectes (le compresseur du rfrigrateur peut tre remplac par un autre deconception similaire).

    Lorsque notre technicien veut utiliser un composant lectronique, il na pas besoin denconnatre les rouages internes. Toutes les proprits de ce composant sont encapsulesdans lobjet composant, elles ne sont pas communiques au circuit mont. Il nest pasncessaire de connatre le fonctionnement du composant pour lutiliser efficacement.Ce fonctionnement est masqu par son botier.

    Le langage C++ gre lencapsulation laide de types dfinis par lutilisateur : les classes.Pour en savoir plus sur la conception dune classe, reportez-vous au Chapitre 6. Si elle estcorrectement dfinie, une classe agit comme une entit encapsule elle fonctionnecomme un composant autonome. Comme pour un objet du monde rel, son fonctionne-ment interne peut tre masqu. Les utilisateurs dune classe bien conue nont pas besoinde savoir comment elle fonctionne, mais uniquement comment lutiliser.

    Hritage et rutilisabilit

    Lorsquils souhaitent concevoir une nouvelle voiture, les ingnieurs de Superauto ont lechoix entre monter un projet partir de zro et modifier un modle existant. Le modlePipo est peut-tre parfait pour la ville, mais cette voiture manque de nervosit sur auto-route. Les ingnieurs ont donc dcid de lui adjoindre un turbo-compresseur et une bote six vitesses. Le responsable du projet prfre donc partir dun modle existant, le perfec-tionner, le tester, et lappeler Star. La Star sera donc une sorte de Pipo, mais il sagiradune version spciale, disposant de nouvelles fonctionnalits.

    Le langage C++ implmente la notion dhritage. Grce lhritage, vous pouvez dclarerun nouveau type partir dun type existant. On dit que la sous-classe obtenue drive dutype existant ; on la nomme quelquefois "type driv". Si la Star est drive de la Pipo ethrite donc de toutes ses qualits, certaines proprits peuvent lui tre ajoutes, dautresmodifies. Pour en savoir plus sur lhritage et son application en C++, reportez-vous auxChapitres 12 et 16.

    Polymorphisme

    La Star ne rpondra pas ncessairement de la mme faon que la Pipo un appui surlacclrateur. En effet, la premire peut utiliser son injection et son turbo alors que laseconde devra se contenter de sa carburation classique. Quoi quil en soit, il suffit auconducteur de dmarrer son vhicule et de se dplacer o bon lui semble. Il nest pasoblig de connatre les dtails du moteur.

    C++ Livre Page 10 Jeudi, 7. mai 2009 9:45 09

  • Chapitre 1 Bien dbuter en C++ 11

    En C++, des objets diffrents peuvent avoir des comportements adquats diffrents enrponse la mme action grce au polymorphisme de fonction et de classe. Poly signifieplusieurs et morphe signifie forme. Le polymorphisme se traduit donc par un nom uniquepouvant prendre plusieurs formes, et il est trait aux Chapitres 10 et 14.

    volution de C++ Lorsque les qualits de la programmation, de la conception et de lanalyse orientes objetcommencrent tre reconnues, Bjarne Stroustrup cra C++ partir du langage le plusutilis pour le dveloppement des logiciels professionnels, le langage C. Il lui ajouta tousles lments ncessaires la programmation oriente objet.

    On a coutume de dire que C++ est un surensemble de langage C et que, par consquent,tout programme C est virtuellement un programme C++. Pourtant, ces deux langages sonttrs diffrents. Pendant longtemps, C++ a attir les programmeurs C car ces derniers trou-vaient sa syntaxe familire. Toutefois, pour tirer le meilleur profit des fonctionnalits deC++, de nombreux dveloppeurs ont compris quils devaient laisser de ct une partiede leurs acquis en C et aborder les problmes diffremment.

    Est-il ncessaire dapprendre dabord le langage C ? Nombreux parmi vous sont ceux qui vont se poser cette question, puisque C++ est unsurensemble du langage C. La rponse de son crateur et de la plupart des program-meurs C++ est la suivante : il est inutile dapprendre le langage C, voire prfrable decommencer directement par le langage C++.

    La programmation C est fonde sur les concepts de programmation structure, alors que laprogrammation C++ repose sur ceux de la programmation oriente objet. Si vous apprenezdabord le langage C, vous devrez alors vous dfaire des habitudes nfastes lies celangage.

    Ce livre ne sadresse pas obligatoirement un public ayant une exprience pralable de laprogrammation. Si vous tes programmeur C, vous pouvez vous contenter de survoler lespremiers chapitres du livre. Le dveloppement orient objet nest rellement abord qupartir du Chapitre 6.

    C++, Java et C# C++ est lun des principaux langages pour le dveloppement de logiciels professionnels.Ces dernires annes, Java a eu un temps la faveur des programmeurs. Toutefois, nombre

    C++ Livre Page 11 Jeudi, 7. mai 2009 9:45 09

  • 12 Le langage C++

    dentre eux, qui avaient abandonn C++ au profit de Java, ont depuis fait marche arrire.En tout tat de cause, les deux langages sont si semblables quapprendre lun revient connatre 90 % de lautre.

    C# (prononcez C sharp) est un langage plus rcent dvelopp par Microsoft pour la plate-forme .NET. Il utilise la mme syntaxe que C++ et, bien que ces deux langages diffrenten quelques points importants, lapprentissage de C++ apporte la majorit des connaissan-ces ncessaires lutilisation de C#. Si vous dcidiez par la suite dapprendre C#, linves-tissement ralis dans lapprentissage de C++ vous sera trs bnfique.

    Extensions gres de Microsoft pour C++Avec larrive de .NET, Microsoft a introduit les extensions gres pour C++ (ManagedC++). Il sagit dune extension du langage C++ lui permettant dutiliser la nouvelle plate-forme Microsoft et ses bibliothques. Managed C++ permet surtout un programmeurC++ de profiter des fonctionnalits avances de lenvironnement .NET. Au cas o vousdcideriez de crer des applications spcifiquement conues pour la plate-forme .NET,vous devrez tendre votre connaissance du C++ standard pour y inclure ces extensions.

    Norme ANSI Le comit daccrditation des standard, qui dpend de lANSI (American National StandardsInstitute), a labor un standard international pour C++.

    Le standard C++ est galement appel norme ISO (International Organization for Stan-dardization), norme NCITS (National Committee for Information Technology Standards),norme X3 (ancienne appellation de NCITS), ou norme ANSI/ISO. Dans ce livre, nouscontinuerons faire rfrence la norme ANSI car cest le terme le plus utilis.

    Lobjectif du standard ANSI est de garantir la portabilit du C++ afin que le code que vousallez crire pour le compilateur de Microsoft, par exemple, ne gnre pas derreur avec unautre compilateur. Le code prsent dans ce livre tant compatible ANSI, il pourra trecompil sans erreur sur des plates-formes Macintosh, Windows ou Unix.

    Pour la plupart des utilisateurs C++, le standard ANSI est transparent. La version la plusrcente de cette norme est lISO/IEC 14882-2003. La version prcdente, lISO 14882-1998,a bnfici dune stabilit durable et tous les fournisseurs de renom la prennent en charge.Nous nous sommes efforcs dassurer une totale compatibilit ANSI du code dans cettedition.

    Toutefois, noubliez pas que les compilateurs ne sont pas tous totalement compatibles avecla norme. En outre, certaines parties de la norme ont t laisses au choix du concepteur

    C++ Livre Page 12 Jeudi, 7. mai 2009 9:45 09

  • Chapitre 1 Bien dbuter en C++ 13

    du compilateur : il nest donc pas garanti que ces parties se compilent ou fonctionnent dela mme manire avec des compilateurs diffrents.

    Les extensions gres pour C++ ne sappliquant qu la plate-forme .NET et,ne faisant pas partie de la norme ANSI, elles ne sont pas traites dans cetouvrage.

    Prparation la programmationPlus que tout autre langage, C++ oblige le dveloppeur concevoir soigneusement uneapplication avant de lcrire. Les programmes figurant dans les premiers chapitres de cetouvrage ne ncessitent pas danalyse car ils sont triviaux. En revanche, les problmescomplexes rencontrs en programmation professionnelle ne peuvent tre rsolus quaveccette approche. La conception et lanalyse permettent de mieux cerner les diffrentsaspects du problme. Un programme bien construit ne contient pas derreurs et peut ais-ment tre mis jour. Daprs des tudes rcentes, on estime que le cot dun programmerepose 90 % sur la mise au point et la maintenance. La phase de conception permet derduire les cots et, par l mme, le prix de revient du logiciel.

    Avant de passer la conception dun programme, vous devez connatre parfaitement leproblme rsoudre. Les programmes les plus simples comme les plus complexes sarti-culent autour dun droulement clair et logique.

    Il convient galement de dterminer si le problme peut tre rsolu laide dun programmeexistant qui sera modifi, ou laide dun logiciel du commerce. Quil choisisse lune oulautre solution, le programmeur ne manquera de toutes faons pas de travail : trouver dessolutions moins coteuses des problmes actuels produira toujours de nouvelles oppor-tunits un peu plus tard.

    En supposant que le problme rsoudre ait t bien compris et quil faille crire unnouveau programme, vous tes prt commencer votre conception.

    Le processus dapprhension totale du problme (analyse) et dlaboration dun plan pourune solution (conception) est indispensable lobtention dune application professionnellede carrure internationale.

    Votre environnement de dveloppementPour utiliser ce livre, nous supposons que vous disposez dun compilateur permettant desaisir des donnes directement sur une "console" (par exemple une fentre de commandeMS-DOS ou une fentre shell), cest--dire sans vous proccuper dun environnement

    Info

    C++ Livre Page 13 Jeudi, 7. mai 2009 9:45 09

  • 14 Le langage C++

    graphique comme Windows ou Macintosh. Recherchez une option comme console oueasy window ou consultez la documentation de votre compilateur.

    Votre compilateur peut faire partie dun environnement de dveloppement intgr (IDE)ou possder son propre diteur de texte pour saisir le code source des programmes. Vouspouvez galement utiliser un diteur de texte spar ou un logiciel de traitement de textedu moment que vous produisez des fichiers texte sans formatage ni style particuliers. LeBloc-notes de Windows, lditeur Edit de DOS, les diteurs Brief, Epsilon, Emacs et visont particulirement bien adapts la saisie des codes sources. Si vous disposez dun trai-tement de texte tel que WordPerfect ou Word (ou autre), utilisez la commande denregis-trement au format texte simple.

    Les documents crs partir dun diteur de texte sappellent des fichiers sources. En C++,ils portent traditionnellement lextension .cpp, .cp ou .c. Dans cet ouvrage, nous avonschoisi lextension .cpp. Vrifiez que votre compilateur la prend en charge.

    La plupart des compilateurs C++ acceptent toutes les extensions et affectentpar dfaut lextension .cpp aux fichiers sources. Toutefois, soyez prudents, carcertains compilateurs traitent les fichiers .c comme du code C et les fichiers.cpp comme du code C++. Vrifiez la documentation du compilateur. Danstous les cas, une utilisation cohrente des .cpp pour les fichiers du code sourceC++ facilitera la tche des programmeurs qui devront comprendre votre code.

    Cration du programmeLa premire tape de la cration dun programme consiste crire les commandes adap-tes (instructions) dans un fichier source. Mme si les instructions du fichier sourcesemblent quelque peu mystrieuses pour ceux qui ne connaissent pas C++, il sagit quandmme dun format lisible. Le fichier source nest pas un programme : il vous sera impossiblede le lancer ou de lexcuter comme vous le feriez avec un programme excutable.

    Faire Ne pas faire

    crire le fichier source laide de lditeur de texte fourni avec le compilateur ou dun diteur externe.

    Enregistrer votre fichier source avec lexten-sion .c, .cp ou .cpp.

    Consulter la documentation du compilateur et de lditeur de liens pour connatre les diff-rentes tapes de la cration du programme.

    Utiliser les fonctions de mise en forme dun traitement de texte. Si vous utilisez un traite-ment de texte, sauvegardez le fichier source au format texte ASCII.

    Utiliser une extension .c si votre compila-teur considre ces fichiers comme du code C et non du code C++.

    Info

    C++ Livre Page 14 Jeudi, 7. mai 2009 9:45 09

  • Chapitre 1 Bien dbuter en C++ 15

    Cration dun fichier objet laide du compilateurPour transformer le code source en programme, vous allez utiliser un compilateur. Linvo-cation et la configuration de cet outil variant dun compilateur un autre, il est vivementrecommand de consulter la documentation.

    La compilation produit un fichier objet. Le plus souvent, il porte lune des extensions .objou .o. Toutefois, il ne sagit pas encore dun programme excutable. Pour crer le fichier.exe, vous devez utiliser lditeur de liens (linker).

    Cration dun fichier excutable laide de lditeur de liens Les programmes C++ sont produits en liant un ou plusieurs fichiers objet (.obj ou .o)avec une ou plusieurs bibliothques. Une bibliothque regroupe des fichiers fournis avec lecompilateur, achets sparment ou que vous crez et compilez vous-mme. Tous lescompilateurs C++ sont livrs avec une bibliothque de fonctions et de classes trs utiles,que vous pouvez inclure dans vos programmes. Nous traiterons les classes et les fonctionsplus en dtail ultrieurement.

    La cration dun fichier excutable se dcompose en trois tapes :

    1. Cration dun fichier source portant lextension .cpp.

    2. Compilation du code source en un fichier objet portant lune des extensions .obj ou .o.

    3. Liaison du fichier objet avec les diffrentes bibliothques, afin dobtenir le programmeexcutable.

    Cycle de dveloppementSi chaque programme fonctionnait parfaitement ds le premier coup, le cycle de dvelop-pement complet serait : criture du programme, compilation du code source, dition desliens et lancement de lapplication. Malheureusement, rares sont les programmes qui necontiennent aucune erreur. Certaines feront chouer la compilation du programme,dautres ldition des liens, dautres encore ne se dclareront quau moment de lexcution(celles-ci sont souvent appeles "bogues").

    Toute erreur, quelle quelle soit doit tre corrige. Ceci implique de modifier le codesource, de le compiler nouveau, de recrer les liens et de relancer le programme.La Figure 1.1 illustre les diffrentes tapes de ce cycle de dveloppement.

    C++ Livre Page 15 Jeudi, 7. mai 2009 9:45 09

  • 16 Le langage C++

    Votre premier programme C++ : BONJOUR.cppLes ouvrages traitant de programmation proposent traditionnellement un programme quipermet dafficher "Bonjour" lcran. Nous ne drogerons donc pas cette rgle !

    Ouvrez lditeur de texte, puis tapez le code source du Listing 1.1 en respectant scrupuleu-sement la syntaxe (ne tenez pas compte de la numrotation des lignes qui ne sert ici quclarifier les choses). Aprs vrification, enregistrez le fichier, compilez-le, ditez les liens,puis lancez-le. Si tout se passe correctement, "Bonjour !" apparat lcran. Ne vous souciezpas des instructions utilises ici ; pour le moment, nous nous contentons de vous prsenter

    Figure 1.1Les tapes du cycle de dveloppement dun programme C++.

    Dbut

    Ecriture/modification

    du code source

    Compilation

    Erreurs de compilation ?

    Edition de liens

    Erreurs d'dition de liens ?

    Lancement du programme

    Erreurs d'excution ?

    Oui

    Oui

    Oui

    Non

    Non

    Non

    Fin

    C++ Livre Page 16 Jeudi, 7. mai 2009 9:45 09

  • Chapitre 1 Bien dbuter en C++ 17

    le cycle de dveloppement. En fait, les diffrents aspects de ce programme seront traitsdans les deux prochains chapitres.

    Le listing suivant est numrot gauche afin de vous permettre de suivre pas passon droulement. Vous ne devez pas taper ces numros. Dans le premier exemple,vous devez uniquement taper pour la premire ligne :

    #include

    Listing 1.1 : Programme bonjour.cpp

    1: #include 2: 3: int main()4: {5: std::cout

  • 18 Le langage C++

    Sous Windows, essayez de lancer bonjour.exe (en remplaant lextension de lexcuta-ble par celle de votre systme dexploitation ; sous Unix, par exemple, excutez bonjour,car les excutables ne possdent pas dextension). Lexcution du programme doitafficher :

    Bonjour!

    Si cest le cas, bravo ! Tout va pour le mieux. Vous venez de crer votre premierprogramme C++. Il nest peut-tre pas spectaculaire, mais cest ainsi quont dbut laplupart des programmeurs professionnels.

    Certains programmeurs utilisant des IDE (comme Visual Studio ou Borland C++ Builder)risquent de voir apparatre brivement le programme dans une fentre qui disparatra rapi-dement, sans laisser le temps de lire ce quelle contient. Dans ce cas, ajoutez ces lignes votre source, juste avant linstruction return:

    char reponse;std::cin >> reponse;

    Ces lignes forcent le programme faire une pause jusqu ce que vous ayez saisi un carac-tre suivi dun appui sur la touche Entre. Elles permettent donc de voir les rsultats devotre test. Si elles sont ncessaires pour le fichier bonjour.cpp, elles le seront srementpour la plupart des programmes de cet ouvrage.

    Utilisation des bibliothques standard

    Si votre compilateur est trs ancien, il peut refuser de compiler le code ci-dessus car il netrouvera pas les nouveaux fichier enttes du standard ANSI. Dans ce cas, modifiez votreprogramme de la faon suivante :

    1: #include 2: 3: int main() 4: { 5: cout

  • Chapitre 1 Bien dbuter en C++ 19

    Comment tirer parti de votre compilateur Ce livre nest pas spcifique un compilateur donn ; les programmes inclus fonctionne-ront donc avec nimporte quel compilateur C++ compatible ANSI, sur nimporte quelleplate-forme (Windows, Macintosh, Unix, Linux, etc.).

    Ceci dit, une grande majorit de programmeurs travaillent sous lenvironnement Windowset la plupart des dveloppeurs professionnels ont recours aux compilateurs Microsoft. Ilnest pas possible dindiquer ici les dtails de la compilation et de ldition de liens avectous les compilateurs possibles, mais nous pouvons vous montrer comment dbuter avecMicrosoft Visual C++ ; cela ne devrait pas tre trs diffrent avec votre compilateur, bienquil soit conseill de vous reporter sa documentation spcifique.

    Construction du projet BonjourLes tapes ncessaires la cration et au test du programme Bonjour sont les suivantes :

    1. Lancez le compilateur.

    2. Choisissez Nouveau/Projet dans le menu Fichier.

    3. Choisissez Application Console Win32 et entrez un nom pour le projet, Bonjour, parexemple, puis cliquez sur Terminer.

    4. Slectionnez Projet vide dans les choix proposs et cliquez sur OK. Une bote dedialogue contenant des informations sur le nouveau projet saffiche.

    5. Cliquez sur OK. Vous revenez la fentre principale de lditeur.

    6. Choisissez Nouveau dans le menu Fichier.

    7. Choisissez Fichier C++ et donnez-lui un nom : bonjour, par exemple, que vous saisirezdans la zone de texte Nom du fichier.

    8. Cliquez sur OK. Vous revenez la fentre principale de lditeur.

    9. Saisissez le code du Listing prcdent.

    10. Choisissez Gnrer bonjour dans le menu Gnrer.

    11. Vrifiez que vous navez pas derreurs de compilation. Vous trouverez ces informationsau bas de lditeur.

    12. Excutez le programme en appuyant sur Ctrl+F5.

    13. Appuyez sur la barre despacement pour terminer le programme.

    C++ Livre Page 19 Jeudi, 7. mai 2009 9:45 09

  • 20 Le langage C++

    Le programme sexcute, mais laffichage est si rapide que je nai pas le temps de lire. Quest-ce qui ne va pas ?

    Consultez la documentation de votre compilateur ; vous devez pouvoir contraindre leprogramme respecter une pause aprs son excution. Avec les compilateurs Microsoft ilsuffit dutiliser la combinaison de touches Ctrl+F5.

    Avec nimporte quel compilateur, vous pouvez insrer les lignes suivantes immdiatementavant linstruction return (cest--dire entre les lignes 5 et 6 du Listing 1.1) :

    char reponse;std::cin >> reponse;

    Le programme fera une pause pour attendre que vous entriez une valeur. Pour terminerle programme, entrez un nombre (par exemple 1) puis appuyez sur Entre (si ncessaire).

    La signification des termes std::cin et std::cout sera prsente dans les prochainschapitres ; pour linstant, utilisez-les sans vous poser de questions.

    Erreurs de compilationLes erreurs de compilation peuvent survenir dans un certain nombre de cas. Le plussouvent, il sagit dune faute de frappe ou dun oubli. Les bons compilateurs mettront laligne incrimine en vidence et vous indiqueront lerreur que vous avez commise. Les plusperformants proposeront mme une solution au problme rencontr !

    Pour tester les fonctionnalits de votre compilateur, il suffit dinsrer dlibrment uneerreur dans le programme bonjour.cpp, en tant la ligne 7 o doit se trouver laccoladefermante.

    Listing 1.2 : Erreur de compilation

    1: #include 2: 3: int main() 4: { 5: std::cout

  • Chapitre 1 Bien dbuter en C++ 21

    Vous constatez que le message est un petit peu nigmatique et quil y est question duneerreur qui correspond la ligne 7. Ici, le compilateur indique quil manque des lignessources et quil a atteint la fin du fichier sans dtecter laccolade fermante. En rgle gn-rale, les messages derreur contiennent un numro de ligne, ce qui permet de rsoudre leproblme plus aisment.

    Parfois, ces messages ne vous indiqueront que la proximit du problme : si un compilateurpouvait parfaitement identifier toutes les erreurs, il les corrigerait lui-mme.

    Questions-rponsesQ Quelle est la diffrence entre un diteur de texte et un traitement de texte ?

    R Contrairement un traitement de texte, un diteur de texte gnre des fichiers textesans code de formatage ni de mise en page. Un simple diteur de texte contient dutexte brut, sans caractres gras, italiques, etc.

    Q Mon compilateur comprend un diteur intgr. Dois-je lutiliser ?

    R La plupart des compilateurs seront capables de traiter du code tap laide dun di-teur de texte. Un diteur intgr permet de se dplacer rapidement dans le fichiersource et de suivre pas pas le cycle de dveloppement avant et aprs compilation. Lescompilateurs modernes prsentent lavantage de pouvoir consulter laide en ligne, decompiler le code en direct et de rsoudre les problmes sans quitter lenvironnementde dveloppement.

    Q Le compilateur a produit des messages davertissement. Puis-je les ignorer ?

    R Les compilateurs produisent gnralement des avertissements et des erreurs. En casderreurs, le programme ne pourra pas tre totalement construit. En ce qui concerneles avertissements, le compilateur poursuivra son travail et crera tout de mme leprogramme.

    Bien que de nombreux livres ne donnent pas de rponse cette question, la ntre estnon ! Ds maintenant, considrez les messages davertissement comme des messagesderreur. Le compilateur vous informe que quelque chose danormal ou de suspect at dtect. Lisez le message lcran, puis corrigez lerreur. Certains compilateursdisposent mme dun paramtre qui permet de traiter tous les avertissements commedes erreurs et donc dempcher que le programme ne devienne un excutable.

    Q Quest-ce que la compilation ?

    R La vritable compilation intervient lorsque vous lancez le compilateur. Il sagit de ltapequi prcde ldition de liens et le lancement du programme. Les programmeurs ont

    C++ Livre Page 21 Jeudi, 7. mai 2009 9:45 09

  • 22 Le langage C++

    tendance utiliser ce terme comme un raccourci dsignant la vritable tape de compi-lation suivie de ldition de liens.

    Testez vos connaissances1. Quelle est la diffrence entre un interprteur et un compilateur ?

    2. Comment compiler un fichier source ?

    3. quoi sert lditeur de liens ?

    4. Quelles sont les diffrentes tapes du cycle de dveloppement ?

    Exercices1. Examinez le listing qui suit et, sans lexcuter, devinez ce quil permet de faire.

    1: #include 2: int main() 3: { 4: int x = 5; 5: int y = 7; 6: std::cout

  • 2Anatomie dun programme C++Au sommaire de ce chapitre

    La structure dun programme C++

    Les interactions entre ses composants

    La nature et le rle dune fonction

    Un programme C++ se compose dobjets, de fonctions, de variables et dun certainnombre dautres composants. Lessentiel de cet ouvrage est consacr lexplicationdtaille de ces diffrents lments mais, pour comprendre comment ils sarticulentensemble, il convient dtudier un programme complet.

    C++ Livre Page 23 Jeudi, 7. mai 2009 9:45 09

  • 24 Le langage C++

    Un programme simpleLe programme bonjour.cpp du Chapitre 1 est intressant bien des gards. Pour information,le Listing 2.1 reproduit la version originale du fichier source.

    Listing 2.1 : Le programme bonjour.cpp prsente une structure type dapplication C++

    1: #include 2: 3: int main() 4: { 5: std::cout ) placs autour du nom du fichier demandent au prprocesseur de rechercher ce fichieraux emplacements habituels. Si linstallation a t ralise correctement, le prprocesseurtrouvera le fichier iostream dans le rpertoire contenant tous les fichiers include. Cefichier (dont le nom est labrviation de Input-Output-Stream) est utilis par cout, quipermet dafficher le rsultat lcran. Le rle de la ligne 1 est dinclure le fichieriostream dans ce programme, comme si vous laviez vous-mme saisi.

    Le prprocesseur est lanc avant le compilateur. Il traduit toutes les lignescommenant par le signe dise (#) en commandes spciales qui rendent votrecode directement exploitable par le compilateur.

    Les compilateurs ne sont pas tous cohrents dans leur prise en charge de#include lorsque lon omet lextension des fichiers. Si vous obtenez des messa-ges derreur, vous devrez peut-tre modifier le chemin de recherche de includepour votre compilateur ou ajouter lextension au fichier inclus.

    Info

    Info

    C++ Livre Page 24 Jeudi, 7. mai 2009 9:45 09

  • Chapitre 2 Anatomie dun programme C++ 25

    Le programme commence vraiment en ligne 3, avec la fonction main(). Cette fonction estobligatoire dans tous les programmes C++. Une fonction est un bloc dinstructions quieffectue une ou plusieurs actions et qui peut tre appele par une autre fonction, maismain() est spciale car elle est appele automatiquement au lancement du programme.

    Comme toutes les fonctions, main() doit indiquer le type de la valeur quelle renvoie.Dans le programme bonjour.cpp, il sagit de int, ce qui signifie que la fonction renverraune valeur entire au systme dexploitation lorsquelle se terminera. Ici, elle renvoie lavaleur 0, comme le montre la ligne 6. Cette valeur renvoye a relativement peu dimpor-tance et est assez rarement utilise, mais le standard C++ exige que la fonction main() soitdclare ainsi.

    Certains compilateurs permettent de dclarer main() comme renvoyant void,ce qui signifie quaucune valeur nest renvoye. Ceci nest plus autoris enC++ et il est prfrable de ne pas prendre cette mauvaise habitude. Dclarezmain() comme renvoyant int et renvoyez simplement la valeur 0 la dernireligne de la fonction main().

    Tous les systmes dexploitation permettent de tester la valeur renvoye par unprogramme. La convention consiste renvoyer 0 pour indiquer que le programmesest termin correctement, et une valeur diffrente de zro dans le cascontraire.

    Toutes les fonctions commencent par une accolade ouvrante ({) et se terminent par uneaccolade fermante (}). Dans notre programme, les accolades de la fonction main() figu-rent aux lignes 4 et 7. Toute instruction comprise entre ces deux accolades fait partie de lafonction.

    Le plat de rsistance du programme se trouve la ligne 5.

    Lobjet cout permet dafficher un message lcran. Les objets et leurs particularitsseront prsents au Chapitre 6 et lobjet cout et son alter ego cin seront dcrits au Chapi-tre 17. En C++, ces deux objets permettent de grer respectivement les sorties (notamment lcran) et les entres (au clavier, par exemple).

    cout est un objet fourni par la bibliothque standard. Une bibliothque est une collectionde classes. La bibliothque standard est fournie avec tout compilateur compatible ANSI.

    On indique au compilateur que lobjet cout que lon souhaite utiliser fait partie de labibliothque standard laide du spcificateur despace de nom std. Vous pouvez en effetavoir des objets portant le mme nom, mais provenant de fournisseurs diffrents et cest laraison pour laquelle C++ prvoit lutilisation des "espaces de noms". Un espace de nomest une faon de dire : "Lorsque je dis std::cout, je fais rfrence lobjet cout faisant

    Attention

    Info

    C++ Livre Page 25 Jeudi, 7. mai 2009 9:45 09

  • 26 Le langage C++

    partie de lespace de nom standard, et daucun autre". Vous le faites savoir au compilateuren indiquant le terme std suivi de deux caractres deux-points avant lobjet cout. Nousreparlerons des espaces de noms ultrieurement.

    La syntaxe de cout est relativement simple. Ce terme est suivi de loprateur de redirec-tion de sortie (

  • Chapitre 2 Anatomie dun programme C++ 27

    9: std::cout

  • 28 Le langage C++

    Le chiffre suit immdiatement la chane de caractres, car vous navez pas insr de sautde ligne. Sans le savoir, vous avez concatn deux valeurs.

    La ligne 7 affiche un message puis utilise le manipulateur std::endl qui a pour butdcrire une nouvelle ligne lcran (Pour en savoir plus sur endl, reportez-vous auChapitre 16). endl faisant aussi partie de la bibliothque standard, on utilise le prfixestd::, comme pour cout.

    endl signifie end line (ligne finale). La dernire lettre est bien la lettre "l" et non lechiffre 1.

    Lutilisation de endl est prfrable celle de \n, car il est adapt au systmedexploitation utilis. En revanche, \n risque de ne pas reprsenter le caractre denouvelle ligne complet exig sur un systme dexploitation ou une plate-formeparticuliers.

    la ligne suivante, vous dcouvrez un nouveau caractre de formatage : \t. Il permetdinsrer une tabulation pour aligner les chanes de caractres (lignes 10 16). La ligne 10montre que lon peut afficher tous les nombres entiers, quel que soit leur type. laligne 14, on passe une addition (8 + 5) cout, qui affiche 13.

    la ligne 15, la fraction 5/8 est transmise cout. Le terme (float) indique quune valeurdcimale ( virgule flottante) doit safficher. Lexpression 7000 * 7000 est ensuite trans-mise cout (ligne 17) et le terme double indique cout quil sagit dune valeur virgule flottante. Pour obtenir des informations dtailles sur les types de donnes, reportez-vous au Chapitre 3.

    Aux lignes 18 et 20, vous avez remplac le nom du programmeur par le vtre. Si cest lecas, la sortie confirmera que vous tes un programmeur C++, ce qui doit tre vrai puisquecest lordinateur qui le dit !

    Utilisation de lespace de nom standardLutilisation systmatique de std:: devant cout et endl pouvant devenir plutt fastidieuse la longue, la norme ANSI propose deux solutions ce petit problme.

    La premire consiste indiquer au compilateur, au dbut du code, que vous allez utiliserles objets cout et endl de la bibliothque standard, comme au Listing 2.3 (lignes 5 et 6).

    Listing 2.3 : Utilisation du mot-cl using

    1: // Listing2.3 - Utilisation du mot-cl using 2: #include

    Info

    C++ Livre Page 28 Jeudi, 7. mai 2009 9:45 09

  • Chapitre 2 Anatomie dun programme C++ 29

    3: int main() 4: { 5: using std::cout; 6: using std::endl; 7: 8: cout

  • 30 Le langage C++

    Listing 2.4 : Utilisation du mot-cl namespace

    1: // Listing2.4 - Utilisation de lespace de nom standard 2: #include 3: int main() 4: { 5: using namespace std; 6: 7: cout

  • Chapitre 2 Anatomie dun programme C++ 31

    par le compilateur. Ils ont pour but dinformer le lecteur sur telle ou telle action duprogramme.

    Les diffrents types de commentairesC++ utilise deux types de commentaires : les commentaires sur une seule ligne et lescommentaires multilignes.

    Les premiers sont introduits par deux caractres slashs (//) qui indiquent au compilateurquil doit ignorer tout ce qui suit jusqu la fin de la ligne.

    Les seconds sont introduits par les caractres slash-toile (/*) et demandent au compi-lateur de ne pas traiter les caractres qui suivent, jusquau symbole de fin de commen-taires toile-slash (*/). Ces marques peuvent se trouver sur la mme ligne ou trespares par plusieurs lignes. chaque symbole /* doit correspondre un symbole de finde commentaires */.

    En gnral, les programmeurs C++ utilisent le double slash, puis une ligne de commen-taire. Ils rservent les commentaires de plusieurs lignes pour dlimiter de grandes partiesdun programme. Vous pouvez inclure des commentaires dune ligne dans un bloc"comment" : ce qui figure entre les symboles de commentaires multilignes nest pas prisen compte, y compris les doubles slashs.

    Les commentaires sur plusieurs lignes sont connus sous le nom de "style C" carils ont t introduits par le langage C. Les commentaires dune ligne sont appa-rus avec le C++ et sont donc devenus le "style C++". Les normes actuelles deces deux langages intgrent les deux styles.

    Utilisation des commentairesCertains prconisent dcrire des commentaires au dbut de chaque fonction pour indiquerson rle et les valeurs quelle renvoie.

    Cette recommandation est discutable, car ce type de commentaire mis en en-tte nestpratiquement jamais remis jour lors des diffrentes volutions du programme. Les nomsde fonctions doivent tre suffisamment explicites pour viter toute ambigut et lesportions de code trop nigmatiques doivent tre rcrites pour tre suffisamment clairespar elles-mmes. Les commentaires ne doivent pas tre une excuse dun code obscur.

    Ceci ne veut pas dire que les commentaires ne servent rien, mais simplement quils nedoivent pas se substituer un code lisible : il est toujours prfrable de clarifier un codeplutt que dexpliquer ce quil fait. Bref, crivez du code lisible et nutilisez les commen-taires que pour fournir des informations supplmentaires.

    Info

    C++ Livre Page 31 Jeudi, 7. mai 2009 9:45 09

  • 32 Le langage C++

    Le Listing 2.5 va vous familiariser avec lusage des commentaires. Il dmontre que ceux-ci ninfluent en rien sur le traitement et sur laffichage des donnes.

    Listing 2.5 : aide.cpp montre lusage des commentaires

    1: #include 2: 3: int main() 4: { 5: using std::cout; 6: 7: /* Ceci est un commentaire qui se termine 8: lorsque le symbole toile-slash 9: est rencontr */ 10: cout

  • Chapitre 2 Anatomie dun programme C++ 33

    En rsum, les commentaires ne doivent pas dire ce qui se passe, mais expliquer pourquoicela arrive.

    Les fonctions Bien que main() soit une fonction, ses caractristiques la distinguent des autres. En effet,lutilit des fonctions standard est quelles peuvent tre appeles ou invoques tout momentdans un programme ; or la fonction main() est appele par le systme dexploitation.

    Le droulement dun programme est squentiel (cest--dire quil suit lordre des lignes decode). Quand il rencontre une instruction dappel dune fonction, il se droute pour excutercette dernire. Lorsque la fonction se termine, le programme continue son excution avecla ligne place immdiatement aprs lappel de la fonction.

    Comparons lappel dune fonction une action de la vie courante : alors que vous dessinezun paysage, la mine de votre crayon se casse. Vous cessez immdiatement de dessiner afinde tailler votre crayon. Puis vous reprenez votre activit artistique l o vous laviez inter-rompue. Il en est de mme dans un programme. Lorsque celui-ci a besoin dun service, ilfait appel une fonction, puis reprend son droulement une fois que celle-ci est termine.Le Listing 2.6 illustre ce concept.

    Pour plus dinformations sur les fonctions, reportez-vous au Chapitre 5. Lestypes de donnes prises en charge seront prsentes au Chapitre 3. Ce chapi-tre-ci donne uniquement un aperu des fonctions, car on les retrouvera dans laplupart des programmes C++.

    Listing 2.6 : Appel de fonction dans un programme

    1: #include 2: 3: // Fonction DemoFonction 4: // affiche un message dinformation 5: void DemoFonction() 6: { 7: std::cout

  • 34 Le langage C++

    16: DemoFonction(); 17: std::cout

  • Chapitre 2 Anatomie dun programme C++ 35

    Une fonction peut renvoyer une valeur laide de linstruction return. Le type de cettevaleur doit correspondre celui qui a t dclar dans len-tte de la fonction. En outre,lexcution de linstruction return provoque galement la fin de lexcution de la fonc-tion. Une fonction qui se termine sans passer par une instruction return renvoie void(rien) lorsquelle atteint son accodade fermante. En outre, une fonction cense renvoyerune valeur mais se terminant sans instruction return peut provoquer un message daver-tissement ou une erreur avec certains compilateurs.

    Dans le Listing 2.7, la fonction attend deux paramtres entiers et renvoie une valeur entire.Pour le moment, ne vous attardez pas sur la syntaxe et sur le traitement des valeursentires (comme int x). Vous dcouvrirez ces sujets au Chapitre 3.

    Listing 2.7 : Mise en uvre dune fonction simple

    1: #include 2: int Somme (int x, int y) 3: { 4: std::cout

  • 36 Le langage C++

    Somme() a recu 3 et 5

    Retour dans main().c vaut maintenant 8Fin du traitement...

    Dfinie la ligne 2, la fonction Somme() reoit deux paramtres entiers et renvoie unevaleur entire. Le programme commence la ligne 8 ; il affiche un message invitantlutilisateur entrer deux nombres (ligne 16), spars par un espace. Ces nombres sontplacs dans les variables a et b aux lignes 17 et 18. Pour valider, tapez sur Entre. Lafonction main() passe ces deux nombres en paramtres la fonction Somme()(ligne 20).

    Le programme se droute dans la fonction Somme() qui commence la ligne 2. Lesvaleurs de a et b sont reues, respectivement, par les paramtres x et y. La fonction afficheces valeurs puis les additionne ; le rsultat obtenu est renvoy la ligne 5, puis la fonctionrend la main la fonction qui la appele la fonction main(), ici.

    Dans les lignes 17 et 18, lobjet cin permet dobtenir des valeurs pour les variables a et b,qui sont ensuite affiches laide de lobjet cout. Nous traiterons en dtail les variables etles diffrents aspects dun programme dans les chapitres suivants.

    Mthodes ou fonctionsIl faut noter ici que les diffrents langages de programmation et les diffrentes mtho-dologies peuvent dsigner les fonctions par un autre nom. Lun des termes les plushabituels est celui de mthode. Une mthode est simplement une fonction qui fait partiedune classe.

    Questions-rponsesQ Quelle est la signification du terme #include ?

    R Il sagit dune directive du prprocesseur qui sexcute lorsque vous appelez le compi-lateur. Cette directive insre le fichier dont le nom est indiqu entre chevrons, commesi vous laviez saisi en totalit, dans le code source du programme.

    Q Quelle est la diffrence entre les commentaires // et les commentaires de type /* ?

    R Les commentaires double slash (//) (commentaires sur une ligne) prennent fin avec leretour la ligne, alors que les commentaires slash-toile (/*) (commentaires sur plu-sieurs lignes) se terminent avec un symbole de fermeture (*/). Noubliez pas de fermertous les commentaires multilignes afin dviter toute erreur de compilation.

    C++ Livre Page 36 Jeudi, 7. mai 2009 9:45 09

  • Chapitre 2 Anatomie dun programme C++ 37

    Q Quest-ce qui distingue un bon commentaire dun mauvais ?

    R Un bon commentaire indique les actions qui vont tre ralises par une fonction, uneinstruction ou un bloc dinstructions. Un mauvais commentaire surcharge le code deformules redondantes et dexplications inutiles. Le code des programmes doit trecrit de faon se comprendre aisment par lui-mme. Une ligne bien crite ne devraitpas avoir besoin dun commentaire pour expliquer ce quelle fait, mais cest vous dedistinguer ce qui mrite commentaire et ce qui est vident pour tous.

    Testez vos connaissances1. Quelle est la diffrence entre un compilateur et un prprocesseur ?

    2. Quelles sont les particularits de la fonction main() ?

    3. Quels sont les deux types de commentaires admis en C++ ? En quoi diffrent-ils ?

    4. Est-il possible dimbriquer des commentaires ?

    5. Un commentaire peut-il tre plus long quune ligne ?

    Exercices1. crivez un programme qui affiche "Jadore C++" lcran.

    2. crivez le plus petit programme pouvant tre compil, li, puis lanc.

    3. CHERCHEZ LERREUR : compilez ce programme. Pourquoi choue-t-il ? Corrigezlerreur.

    1: #include 2: main()3: {4: std::cout

  • C++ Livre Page 38 Jeudi, 7. mai 2009 9:45 09

  • 3Variables et constantes

    Au sommaire de ce chapitre

    Dclarer et dfinir des variables et des constantes

    Affecter des valeurs aux variables, puis grer ces valeurs

    Afficher le contenu dune variable lcran

    Les programmes doivent mmoriser les donnes quils utilisent ou les crer pour les ruti-liser lors de lexcution du programme. Pour cela, les variables et les constantes proposentplusieurs mthodes pour reprsenter, stocker et manipuler des informations.

    Quest-ce quune variable ? En C++, une variable est un emplacement destin recevoir des donnes. Cette zone sesitue dans la mmoire vive de votre ordinateur et reoit une valeur qui peut ensuite trerelue.

    Les variables sont utilises pour un stockage temporaire. Si vous quittez un programme etarrtez votre ordinateur, linformation stocke dans ces variables est perdue. Un stockage

    C++ Livre Page 39 Jeudi, 7. mai 2009 9:45 09

  • 40 Le langage C++

    permanent est un autre problme. Gnralement, pour stocker des valeurs de faon persis-tante, vous devez les enregistrer soit dans une base de donnes, soit dans un fichier sur ledisque. Cette dernire mthode est prsente au Chapitre 16.

    Stockage des donnes en mmoireLa mmoire de votre ordinateur peut tre compare un ensemble de cases alignes lesunes ct des autres. Ces emplacements sont numrots squentiellement par desnombres appels adresses mmoire. Une variable peut occuper une ou plusieurs cases afinde stocker la valeur quelle contient.

    Le nom de la variable (par exemple, maVariable) est une tiquette place sur lune descases. Il identifie la variable et vous pargne de devoir connatre son adresse relle enmmoire. La Figure 3.1 est une reprsentation symbolique de lagencement de lammoire. Comme vous pouvez le constater, maVariable commence ladresse mmoire103. En fonction de sa taille, elle peut occuper une ou plusieurs adresses.

    RAM est lacronyme de Random Access Memory (mmoire accs direct).Lorsque vous lancez un programme, il est charg du disque vers la RAM.La mmoire vive est galement le sige de toutes les variables duprogramme. En programmation, le terme mmoire dsigne le plus souvent lammoire vive.

    Gnralits sur la mmoire En C++, vous devez attribuer un type chaque variable que vous dfinissez. Il peut sagirdune variable de type entier, dun nombre virgule flottante, dun caractre, etc. Grce ces informations, le compilateur dtermine lespace attribuer la variable en mmoire,ainsi que le type des donnes quelle pourra contenir. Cela permet aussi au compilateur devous avertir ou de produire un message derreur si vous tentez, par inadvertance, de stockerune valeur dun type erron dans votre variable (cette caractristique de certains langagesde programmation sappelle typage fort).

    Figure 3.1Reprsentation schmatique de la mmoire.

    maVariable

    100 101 102 103 104 105 106

    Nom de la variable

    RAM

    Adresse

    Info

    C++ Livre Page 40 Jeudi, 7. mai 2009 9:45 09

  • Chapitre 3 Variables et constantes 41

    Chaque emplacement de la RAM occupe un octet. Si le type de variable cr a une taillede 4 octets, celle-ci occupera donc quatre emplacements en mmoire. Le type de la variable(int, par exemple) indique au compilateur combien despace mmoire (ou demplacements)rserver dans la RAM.

    une poque, les programmeurs devaient imprativement comprendre la notion de bits etdoctets, qui sont en fait les units de base de stockage. Bien que les langages actuelspermettent de faire abstraction de ces dtails, il demeure intressant de comprendrecomment sont stockes les donnes. Pour en savoir plus, reportez-vous lAnnexe A.

    Taille des entiersDun ordinateur un autre, les tailles occupes par les diffrents types de variablespeuvent tre diffrentes, mais elles seront toujours les mmes sur un ordinateur donn.Ainsi, un entier peut occuper deux octets sur une machine ou quatre sur une autre, maiscette proprit ne variera jamais sur lune ou lautre de ces machines.

    Les caractres simples, comme les lettres, les chiffres ou les symboles, sont stocks dansdes variables de type char, qui occupent gnralement un octet.

    Pour les nombres entiers les plus petits, on peut employer une variable de type short qui,sur la plupart des ordinateurs, occupera deux octets, alors quune variable de type longoccupe gnralement quatre octets. Si vous nindiquez pas le mot-cl short ou long, lataille dun entier varie de deux quatre octets selon les ordinateurs.

    En fait, contrairement ce que lon pourrait attendre, le langage ne le prcise pas exacte-ment. Tout ce que nous savons est que la taille dun entier short doit tre infrieure ougale celle dun int qui, son tour, doit tre infrieure ou gale celle dun entier long.

    Ceci dit, vous travaillez srement sur un ordinateur ayant des short sur deux octets et desint et des long de quatre octets.

    La taille dun entier est dtermine par le processeur (16 bits, 32 bits ou 64 bits) et lecompilateur que vous utilisez. Sur une machine 32 bits (Pentium) utilisant des compilateursmodernes, les entiers occupent quatre octets.

    Lorsque vous crivez des programmes, ne faites jamais de supposition sur lataille mmoire utilise pour reprsenter un type particulier.

    Pour dterminer la taille exacte des types pris en charge par votre ordinateur, compilez etexcutez le programme du Listing 3.1.

    Attention

    C++ Livre Page 41 Jeudi, 7. mai 2009 9:45 09

  • 42 Le langage C++

    Listing 3.1 : Dterminer la taille des types de variables sur votre ordinateur

    1: #include 2: 3: int main() 4: { 5: using std::cout; 6: 7: cout

  • Chapitre 3 Variables et constantes 43

    Les lignes 7 20 font appel loprateur sizeof, qui est utilis comme une fonction.Il renvoie la taille de lobjet qui lui a t pass en paramtre. Par exemple, la ligne 8, le motcl int est pass sizeof. Vous verrez plus loin dans ce chapitre que int permet de dcrireune variable entire standard. Si lon utilise sizeof sur un Pentium 4 sous Windows XP, lataille dune valeur int quivaut celle dun entier long, soit quatre octets.

    Les autres lignes du Listing 3.1 affichent les tailles des autres types de donnes. Vous ensaurez plus sur les valeurs que ces types de donnes peuvent stocker et ce qui les diffrencieun peu plus loin.

    signed et unsignedToutes les variables entires ont deux variantes : signe (signed) ou non signe (unsi-gned). En effet, on a parfois besoin de nombre ngatifs, parfois non. Les entiers dclarssans le mot-cl unsigned sont considrs comme signs. Les entiers signs sont soit ngatifs,soit positifs, alors que les entiers non signs sont toujours positifs.

    Les entiers, quils soient signs ou non, occupent le mme espace mmoire. De ce fait, unepartie de la place de stockage dun entier sign sera donc utilise pour indiquer sil est positifou ngatif. La valeur la plus leve que vous pouvez stocker dans un entier non sign corres-pond donc au double du nombre positif le plus lev contenu dans une variable entire signe.

    Par exemple, si un entier short est stock sur deux octets, un entier short non sign peutcontenir une valeur comprise entre 0 et 65 535. Pour un entier short sign, la moiti desvaleurs admises correspond des nombres ngatifs. Lintervalle autoris se situe doncentre 32 768 et +32 767.

    Types fondamentauxC++ dispose de plusieurs types prdfinis, qui peuvent tre diviss en types entiers (voirplus haut), en types flottants et en type caractre.

    Les variables virgule flottante peuvent tre exprimes sous la forme de fractions, ce sontdes nombres rels. Les variables de type caractre noccupent gnralement quun seuloctet et servent souvent stocker les 256 caractres et symboles du jeu ASCII standard etdes jeux ASCII tendus (en vigueur dans certaines langues).

    Le jeu de caractres ASCII est un ensemble normalis de lettres, de nombres etde symboles reconnu par tous les ordinateurs. ASCII est lacronyme de Ameri-can Standard Code for Information Interchange. Cette norme de codage estprise en charge par la plupart des systmes dexploitation, bien que nombredentre eux prennent ga