aide-mémoire de c++

Upload: sirgeeko

Post on 14-Apr-2018

303 views

Category:

Documents


18 download

TRANSCRIPT

  • 7/27/2019 Aide-Mmoire de C++

    1/221

    Aide-mmoire

    SCIENCES SUP

    AIDE-MMOIRE

    DE C++

    Jean-Michel Rveillac

    BTS IUT Licence coles dingnieurs

  • 7/27/2019 Aide-Mmoire de C++

    2/221

    AIDE-MMOIREDE C++

  • 7/27/2019 Aide-Mmoire de C++

    3/221

  • 7/27/2019 Aide-Mmoire de C++

    4/221

    AIDE-MMOIREDE C++

    Jean-Michel Rveillac

    Matre de confrences luniversit de Bourgogne

  • 7/27/2019 Aide-Mmoire de C++

    5/221

    Illustration de couverture : Digital Vision

    Dunod, Paris, 2004

    ISBN 2 10 007621 3

  • 7/27/2019 Aide-Mmoire de C++

    6/221

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    Table des matires

    AVERTISSEMENT IX

    INTRODUCTION XI

    CHAPITRE 1 LANGAGE C++, LES BASES 1

    1.1 Structure dun programme simple 11.2 Les commentaires 3

    1.3 Les variables 5

    1.4 Les types entiers 7

    1.5 Les types rels 9

    1.6 Les types numrations 11

    1.7 Les constantes 14

    1.8 Les oprateurs arithmtiques 15

    1.9 Les oprateurs unaires 18

    1.10 Loprateur conditionnel 19

    1.11 Les oprateurs relationnels, de comparaison et logiques 19

    1.12 La priorit des oprateurs 22

  • 7/27/2019 Aide-Mmoire de C++

    7/221

    VI Table des matires

    CHAPITRE 2 ENTRES ET STRUCTURES DE CONTRLE 25

    2.1 Entre 25

    2.2 Le test conditionnel 26

    2.3 Les boucles 31

    2.4 Les instructions break et continue 36

    2.5 Linstruction switch 38

    2.6 Linstruction goto 43

    CHAPITRE 3 LES FONCTIONS 47

    3.1 Introduction 47

    3.2 Les fonctions personnalises 49

    3.3 Fonction rcursive 55

    3.4 La fonction void 56

    3.5 Dclaration, dfinition et prototypage de fonctions 57

    3.6 Passage par valeurs et par rfrence 59

    3.7 Surcharge dune fonction 63

    3.8 Quelques prcisions 64

    3.9 La fonction inline 67

    CHAPITRE 4 LES TABLEAUX 69

    4.1 Premire approche 69

    4.2 Dclaration dun tableau 70

    4.3 Tableau et fonctions 75

    4.4 Quelques exemples et cas particuliers 77

  • 7/27/2019 Aide-Mmoire de C++

    8/221

    Table des matires VII

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    CHAPITRE 5 LES POINTEURS 85

    5.1 Le concept 85

    5.2 Dclaration et utilisation 86

    5.3 Pointeur et fonction 87

    5.4 Pointeur et tableau 89

    5.5 De nouveaux oprateurs 92

    5.6 Quelques remarques 95

    CHAPITRE 6 STRUCTURES ET DFINITIONS DE TYPE 101

    6.1 Dclaration et dfinition 101

    6.2 Accs 102

    6.3 Tableau et structure 103

    6.4 Structures et pointeurs 106

    6.4 Structures imbriques 109

    6.5 Dfinitions de type 111

    CHAPITRE 7 LES CLASSES 115

    7.1 Rappels sur la programmation objet 115

    7.2 Les classes 1167.3 Constructeurs et destructeurs 120

    CHAPITRE 8 FONCTIONS AMIES ET SURCHARGE DES OPRATEURS 131

    8.1 Fonction amie 131

    8.2 Le mot-cl pointeur this 133

    8.3 Surcharge des oprateurs 134

  • 7/27/2019 Aide-Mmoire de C++

    9/221

    VIII Table des matires

    8.4 Surcharge doprateurs arithmtiques 135

    8.5 Surcharge doprateurs relationnels 137

    8.6 Surcharge de loprateur daffectation 138

    8.8 Surcharge des oprateurs dentre-sortie 140

    CHAPITRE 9 HRITAGE, POLYMORPHISME ET PATRONS 145

    9.1 Hritage 145

    9.2 Hritage multiple 149

    9.3 Polymorphisme 150

    9.4 Patrons 153

    CONCLUSION 157

    BIBLIOGRAPHIE 159

    ANNEXES 161

    A CRATION DUN PROJET EN MODE CONSOLE AVEC VISUAL C++ 6.0 163

    B LES OPRATEURS DU LANGAGE C++ 169

    C LES PRINCIPALES SQUENCES DCHAPPEMENT 173

    D LES TYPES DE DONNES C++ 175

    E MOTS RSERVS OU MOTS-CLS 177

    F CODE ASCII 181

    G FONCTIONS EXTERNES PRDFINIES 189

    H LES FICHIERS DEN-TTE DE LA BIBLIOTHQUE C++ STANDARD 197

    INDEX 201

  • 7/27/2019 Aide-Mmoire de C++

    10/221

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    Avertissement

    Dans cet ouvrage, chaque chapitre commence par une liste dopra-

    teurs, de mots-cls et de fonctions nouvellement utilises.

    Les termes spcifiques la manipulation ou la description du

    langage sont en italique.

    Les programmes dexemples qui mettent en application un ou

    plusieurs principes spcifiques sont placs dans des encadrs constitus

    de trois parties :

    lensemble des lignes de code du programme ;

    laffichage des rsultats lors de son excution ;

    des commentaires qui viennent claircir son fonctionnement.

    Vous ne trouverez pas de commentaires lintrieur mme du code,

    sous la forme ddie au langage C++. Je nai pas voulu alourdir les

    exemples pour que le lecteur puisse les analyser le mieux possible.

    En fin douvrage, de nombreuses annexes viennent complter

    lensemble des notions prsentes dans chacun des chapitres.Ce livre est une introduction au langage C++. Il essaie de prsenter

    chacune des fonctionnalits principales du langage par le biais dexem-

    ples de code concis que le lecteur pourra tudier de faon approfondie.

    Il est impratif que le lecteur comprenne que le manque de rigueur

    dans lcriture du C++ conduit au dveloppement de programmes trs

    vite illisibles et difficiles maintenir.

    Jai essay de respecter un style de programmation toujours iden-

    tique sur lensemble des chapitres.

  • 7/27/2019 Aide-Mmoire de C++

    11/221

    X Avertissement

    Les exemples ont t tests sur un micro-ordinateur de type PC,

    oprant avec le systme dexploitation Microsoft Windows XP Pro.

    Ldition du code et la compilation ont t raliss avec Microsoft

    Visual C++ 6.0 sous la forme de programmes excutables en modeconsole (voir annexe A).

    Vous trouverez ci-dessous quelques liens de tlchargement de

    compilateurs C++ gratuits ou shareware :

    Compilateur Digital Mars C/C++ 8.29 :

    www.digitalmars.com

    Environnement de programmation et compilateur Bloodshed Dev-

    C++ 4.0 :

    www.bloodshed.net Compilateur DJGPP C/C++ pour PC sous DOS :

    www.delorie.com/djgpp/

    Compilateur Borland C++ 5.5 US :

    www.borland.com

    http://www.digitalmars.com/http://www.digitalmars.com/http://www.bloodshed.net/http://www.bloodshed.net/http://www.delorie.com/djgpphttp://www.borland.com/http://www.borland.com/http://www.delorie.com/djgpphttp://www.bloodshed.net/http://www.digitalmars.com/
  • 7/27/2019 Aide-Mmoire de C++

    12/221

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    Introduction

    LE CONTENU DE CET OUVRAGE

    Ce livre est une introduction au langage C++. Il essaie, en peu plusdune centaine de pages, dexposer de faon claire et prcise les prin-cipes et concepts cls du langage.

    crire un livre si concis sur le langage C++, comme pour toutlangage de programmation est une tche ardue et difficile, les possibi-

    lits de traitement des donnes tant inpuisables.Je pense tre honnte et objectif en prcisant que le langage C++ est

    complexe mais que ltude dexemples basiques autorise son apprentis-sage de faon simple. Toutefois, seule sa pratique enrichira les connais-sances que vous pourrez acqurir par la lecture de cet ouvrage.

    Fixez-vous un objectif, afin davoir dvelopper une application sipetite soit elle. Les erreurs et les difficults rencontres lors de laprogrammation vous permettront de parfaire vos connaissances.

    Jai essay de rassembler ici les principes de bases en considrantque le lecteur ne connat rien de ce langage mais possde dj uneexprience de la programmation.

    UN BREF RAPPEL HISTORIQUE

    Le langage C++ est n en 1983. Il a pour origine le langage C qui a tcr au dbut des annes 1970 par Dennis MACALISTAIR RITCHIE puis

  • 7/27/2019 Aide-Mmoire de C++

    13/221

    XII Introduction

    Brian W. KERNIGHAN qui la rejoint, tous deux travaillant pour le labo-ratoire de recherche AT&T Bell.

    Son but initial tait la rcriture dun nouveau systme dexploita-

    tion UNIX, devant tre rapide lexcution et portable.Les deux crateurs rdigeront The C programming language ,ouvrage de rfrence sur la programmation C.

    En 1983, linstitut national amricain de normalisation (ANSI,American National Standards Institute) commence un travail denormalisation du langage qui aboutira lapprobation dune norme CANSI en 1988.

    En 1989, LISO (International Organization for Standardization, ou

    Organisation Internationale de Normalisation), standardise le C sous ladnomination C89, qui sera mise jour en 1999, pour dfinir C99.Le langage C est un langage de bas niveau qui manipule des

    nombres, des caractres et des adresses. Son avantage rside avant toutdans le code concis et optimal gnr par les compilateurs.

    La communaut des dveloppeurs trouvant le langage C limit,Bjarne STROUSTRUP eut lide de reprendre, dans les annes 1980, celangage pour le faire voluer vers un langage orient objet. En 1998, le

    langage C++ est standardis (ISO/IEC 14882).

    QUELQUES CONSEILS POUR LA LECTURE

    Les chapitres de ce livre sont conus de faon suivre une progressioncroissante dans lapprentissage du langage C++. Toutefois, le lecteurdj averti pourra consulter directement les notions qui lintressent,

    laide de la table des matires, sans respecter la progression, chaqueexemple tant conu indpendamment.

    Bonne lecture et que le C++ soit avec vous !Jean-Michel RVEILLAC

  • 7/27/2019 Aide-Mmoire de C++

    14/221

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    Chapitre 1

    Langage C++, les bases

    1.1 STRUCTURE DUN PROGRAMME SIMPLE

    +, -, *, /, %, ++, --, ||, !, ?, //, /#, #/, &&, char,

    const, cout, double, endl, enum, float, include, int,

    long, main, return, short, signed, unsigned

    #include

    main(){cout

  • 7/27/2019 Aide-Mmoire de C++

    15/221

    2 1 Langage C++, les bases

    Description

    La premire ligne de notre programme intgre une directive #include

    qui permet dappeler le fichier den-tte 1 qui fait partie

    des bibliothques standards de C++ et dans lequel se trouve lobjet coutqui est utilis un peu plus bas. Les symboles < et > sont l pour indiquer

    quils encadrent un fichier de la bibliothque.

    La seconde ligne contient len-tte de la fonction main(). Elle est

    obligatoire dans un programme C++. Cest le dbut du programme

    pour le compilateur. Les parenthses qui suivent main sont elles aussi

    obligatoires.

    La troisime ligne est constitue dune accolade ouvrante : {. Elle

    marque le dbut de la fonction main dont la fin, en sixime ligne, estindique par une accolade fermante : }.

    La ligne suivante demande laffichage du mot bonjour sur lcran du

    systme.

    Lobjet cout (console out) dfini la sortie, en gnral lcran du

    systme. Les symboles

  • 7/27/2019 Aide-Mmoire de C++

    16/221

    1.2 Les commentaires 3

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    Il faut remarquer que loprateur de sortie

  • 7/27/2019 Aide-Mmoire de C++

    17/221

    4 1 Langage C++, les bases

    Il existe deux faons pour inclure des commentaires. Il faut savoir

    que le compilateur doit pouvoir ignorer ces lignes supplmentaires et

    donc les reconnatre pour pouvoir les diffrencier des lignes de code.

    Une premire solution est de faire prcder le commentaire de deux// (slash), mais dans ce cas, il ne peut stendre sur plus dune ligne.

    Cest le style le plus utilis et dfini dans la norme C++.

    La seconde solution est dencadrer le commentaire des deux carac-

    tres /* et */ (cette notation vient du langage C).

    //Mon premier programme avec ses commentaires//-------------------------------------------#include //Directive de compilationmain()

    {cout

  • 7/27/2019 Aide-Mmoire de C++

    18/221

    1.3 Les variables 5

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    1.3 LES VARIABLES

    Une variable est un identificateurqui dsigne un type dinformation

    dans le programme. Elle est place un endroit prcis dans la mmoirede la machine. Une variable reprsente souvent une donne lmen-

    taire, cest--dire une valeur numrique ou un caractre.

    Le mcanisme qui consiste associer une valeur une variable est

    appel affectation et son oprateur en langage C++ est le signe =.

    Une variable va donc possder un type qui va permettre au compila-

    teur de dfinir lencombrement mmoire de cette dernire. Les types de

    donnes de base sont les suivant :

    int : valeur entire ; char : caractre simple ;

    float : nombre rel en virgule flottante ;

    double : nombre rel en virgule flottante double prcision.

    Des qualificateurs (ou spcificateurs) comme short, long, signed,

    unsigned peuvent prciser les types de donnes. Un tableau rsumant

    lensemble total des types est disponible en annexe D.

    En langage C++, on doit informer le compilateur du type des varia-bles qui seront utilises dans la programmation, pour ce faire on va

    effectuer une opration de dclaration.

    Pour dclarer une variable on prcise son type, suivi de son identifi-

    cateur(son nom).

    Lidentificateurdune variable peut tre compos de chiffres ou de

    lettres dans un ordre quelconque, la seule restriction est que le premier

    caractre soit une lettre. Les minuscules et les majuscules sont autori-

    ses, le caractre _ (underscore ou blanc soulign) est admis. Il fautveiller ne pas utiliser des mots-cls ou mots rservs du langage C++

    (voir annexe E) ou des squences dchappement (voir annexe C).

    Vous trouverez ci-dessous quelques exemples didentificateurs auto-

    riss.

    X x

    x15 taux

    T_V_A Total

    somme_totale _montant

  • 7/27/2019 Aide-Mmoire de C++

    19/221

    6 1 Langage C++, les bases

    On peut assimiler la dclaration dune variable la cration en

    mmoire dun contenant dont le type sera la dimension et la valeur de la

    variable le contenu.

    Lorsquaucune valeur na encore t affecte la variable seule saplace est rserve, son contenu ntant pas encore dfini.

    On peut dclarer une variable tout moment au cours de la rdaction

    des lignes de code, cependant, pour des raisons de comprhension, les

    dclarations sont souvent regroupes.

    Dans une dclaration, on peut mentionner le type une seule fois pour

    plusieurs variables. Il suffit simplement de les sparer par des virgules.

    #include main(){

    //dclarations des variables entiresint multiplicateur, multiplicande;//dclarations de variables rellesfloat x, pi;//affectation des variables

    multiplicateur = 1234;multiplicande=5678;x=9.0976;pi=3.14;//cration du flux de sortie, affichage crancout

  • 7/27/2019 Aide-Mmoire de C++

    20/221

    1.4 Les types entiers 7

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    Une dclaration peut tre associe une affectation ce qui permet

    dinitialiser la variable.

    Il existe dautres possibilits pour la dclaration et laffectation.

    int x = 4 ;

    int y = x*15 ;

    int x=4, y=15 ;

    1.4 LES TYPES ENTIERS

    Ce sont des nombres qui peuvent tre positifs ou ngatifs. Ils existent

    des entiers signs et des entiers non signs qui sont rpartis suivant neuf

    types diffrents en langage C++.

    #include

    main(){

    //dclarations et initialisations des variablesint multiplicateur=55;int multiplicande=15;int produit;produit=multiplicande*multiplicateur;//cration du flux de sortiecout

  • 7/27/2019 Aide-Mmoire de C++

    21/221

    8 1 Langage C++, les bases

    int, short int, long int,

    unsigned int, unsigned short int, unsigned long int,

    char, signed char, unsigned car

    Ils sont tous diffrents car ils couvrent des plages de valeurs diff-rentes. Ces plages varient en fonction de la machine et du compilateur.

    Sur un PC type Pentium 4, avec Microsoft Visual C++, les plages

    couvertes sont indiques dans le tableau 1.1.

    Le type caractre, char, comme on le voit est un type entier et cela

    permet de manipuler des caractres comme des entiers lintrieur

    dun programme C++. En fait le compilateur considre toujours la

    valeur ASCII (voir annexe F) du caractre.

    TABLEAU 1.1 PLAGESCOUVERTES.

    Type Mini Maxi

    Taille

    (octets)

    int -2 147 483 648 2 147 483 647 4

    short int -32 768 32767 2

    long int -2 147 483 648 2 147 483 647 4

    unsigned int 0 4 294 967 295 4

    unsigned short int 0 65 535 2

    unsigned long int 0 4 294 967 295 4

    char -128 127 1

    signed char -128 127 1

    unsigned char 0 255 1

  • 7/27/2019 Aide-Mmoire de C++

    22/221

    1.5 Les types rels 9

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    1.5 LES TYPES RELS

    Il existe trois types de nombres rels en C++, float, double et long

    double. Le tableau 1.2 prsente les plages couvertes sur un PC type

    Pentium 4, avec Microsoft Visual C++.

    #include

    main()

    {

    char a,b,c;

    a=5;

    b=10;

    c=15;

    char d=a+b+c+35;

    cout

  • 7/27/2019 Aide-Mmoire de C++

    23/221

    10 1 Langage C++, les bases

    Les nombres rels sont souvent exprims en notation scientifique.Dans cette notation le nombre est suivi de la lettre e, elle-mme suivi

    dun nombre qui reprsente lexponentiation. Par exemple le nombre

    2.25225e-8 reprsente 2.25225 x 108 soit 0,0000000225225.

    Quand la valeur absolue du nombre est comprise entre 0.1 et 999

    999, les nombres ne sont pas affichs au format scientifique.

    La manipulation de nombres rels par le langage C++ peut amener

    des erreurs darrondi, il faut donc rester vigilant, certaines imprcisions

    pouvant apparatre.

    #include

    main()

    {

    double base,hauteur;

    base=12.525;

    hauteur=10.85;

    cout

  • 7/27/2019 Aide-Mmoire de C++

    24/221

    1.6 Les types numrations 11

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    1.6 LES TYPES NUMRATIONS

    En langage C++, lutilisateur peut crer son propre type de donnes. Il

    existe plusieurs mthodes pour atteindre ce but. Elles seront toutes

    dcrites dans cet ouvrage que ce soit les numrations, les structures ou

    les classes.

    Nous allons commencer par les numrations, les autres mthodes

    seront dcrites dans les chapitres 6 et 7.

    Un type numration est constitu dun ensemble fini de valeurs ou

    numrateurs. Il peut tre utilis comme tous les autres types, il est

    simplement prcd du mot-cl enum. Sa syntaxe est la suivante :

    enum nomtype {numrateur1, numrateur2, , numrateurn}

    Un type enum peut tre dfini lintrieur dune dclaration de

    variable.

    #include

    main(){

    double x=10000;double y=x/9-1111;double z;cout

  • 7/27/2019 Aide-Mmoire de C++

    25/221

    12 1 Langage C++, les bases

    Lorsque lon dfinit un type enum, des valeurs entires de 0 n sont

    automatiquement affectes chaque numrateur. On peut modifier ces

    valeurs et mme affecter des valeurs identiques des numrateurs

    diffrents.Une variable de type enum peut tre initialise.

    Lexemple de code ci-dessous viendra claircir ces diffrentes

    notions.

    #include

    enum couleur {cyan, rouge, magenta, vert, jaune,

    bleu};enum test {non=0, oui=1, faux=0, vrai=1};enum polarite {moins=-1, plus=+1} polar1=moins,polar2;enum jour {lundi=1, mardi=2, mercredi=3, jeudi=4,vendredi=5, samedi=6, dimanche=7};

    main()

    {couleur color=jaune;if (color==4) cout

  • 7/27/2019 Aide-Mmoire de C++

    26/221

    1.6 Les types numrations 13

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    jour jsem=vendredi;

    if(jsem==5) cout

  • 7/27/2019 Aide-Mmoire de C++

    27/221

    14 1 Langage C++, les bases

    1.7 LES CONSTANTES

    Nous manipulons trs souvent lors de lcriture dun programme des

    valeurs que nous affectons des variables. Cependant il existe unepossibilit daffecter une valeur dfinitive une variable qui par ce fait

    est dnomme constante.

    C++ reconnat plusieurs types de constantes, les constantes entires,

    relles, caractres, chane de caractres et numrations.

    Ces constantes sont trs pratiques pour manipuler des valeurs

    comme le nombre PI, le nombre e, etc.

    Tous comme les variables, elles peuvent tre signes ou non signes.

    Une constante caractre est compose dun caractre unique prcisentre apostrophes.

    Une constante chane est forme dun nombre quelconque de carac-

    tres encadrs par des guillemets (apostrophes doubles).

    Le mot-cl qui permet de dfinir une constante est const.

    #include

    main()

    {

    const double PI=3.14;

    double rayon=10;

    cout

  • 7/27/2019 Aide-Mmoire de C++

    28/221

    1.8 Les oprateurs arithmtiques 15

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    Les dveloppeurs utilisent habituellement des lettres majuscules

    comme identificateur dune constante, afin de les diffrencier des

    autres.

    Nous verrons, un peu plus loin, que langage C++ dfinit galementune notion de constante symbolique.

    1.8 LES OPRATEURS ARITHMTIQUES

    Les oprateurs les plus courants sont utiliss dans larithmtique, ce

    sont : +, -, *, /, % pour la somme, la diffrence, le produit, le quotient et

    le reste de la division aussi appel modulo. Loprateur dexponentia-tion nexiste pas en C++, mais il existe une fonction externe qui remplit

    ce rle.

    Loprateur peut tre galement utilis pour la ngation dun

    nombre. On appelle ce type doprateur, un oprateurunaire. Nous en

    verrons deux autres un peu plus loin dans ce chapitre.

    #include

    main()

    {

    int a=32, b=5;

    cout

  • 7/27/2019 Aide-Mmoire de C++

    29/221

    16 1 Langage C++, les bases

    Il faut faire attention aux problmes darrondis qui peuvent survenir

    lorsque les oprandes dune division entire mettent en jeu des

    nombres ngatifs. Cependant, dans tous les cas, le quotient multipli

    par le diviseur plus le reste donnera le dividende, cest une rgle

    absolue quels que soient la machine et le compilateur utilis.

    a*b=160a/b=6reste de a/b : 2

    -b=-5

    Un exemple dutilisation des oprateurs : +, -, *, /et% surdeux nombres entiers a=32 etb=5.

    #include

    main(){

    int dividende, diviseur, quotient, reste;dividende=-69;diviseur=10;quotient=dividende/diviseur;reste=dividende%diviseur;cout

  • 7/27/2019 Aide-Mmoire de C++

    30/221

    1.8 Les oprateurs arithmtiques 17

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    Dans certains cas des oprandes de types diffrents peuvent subir

    des conversions de type pour que le systme puisse valuer correcte-

    ment le rsultat et fournir la plus grande prcision possible.

    Si les deux oprandes sont de types int et longint, le rsultat sera

    de type longint.

    Si les deux oprandes sont de types int et shortint, le rsultat serade type int.

    Si lun des oprandes est de type float, double ou long double et le

    second de type int, short int, long int ou char, le rsultat est converti

    en une variable de mme type que loprande qui est virgule flottante.

    Si les deux oprandes sont en virgule flottante avec un type de

    prcision diffrente, celui qui a la plus faible prcision prend la

    prcision de lautre et le rsultat est exprim dans cette mme

    prcision.

    On traite ici le quotient, 69/10 avec des variables de typesentiers. Dans ce cas, suivant le type dordinateur et decompilateur, le quotient peut valoir 6 ou 7 suivant

    larrondi utilis. Toutefois le reste sera 9 ou bien 1 afin derespecterdividende = quotient * diviseur + reste.

    #include

    main()

    {

    int x=10000;

    short int y=2;

    long int z=50000;

    float m=2.5;

    long double n=2000000.000001;

    cout

  • 7/27/2019 Aide-Mmoire de C++

    31/221

    18 1 Langage C++, les bases

    1.9 LES OPRATEURS UNAIRES

    Nous avons dj prsent un oprateurunaire, il sagit du signe moins

    qui prcde une valeur numrique, constante, variable ou expression. Il

    en existe dautres, notamment loprateur dincrmentation ++ et

    loprateur de dcrmentation -- qui augmentent ou diminuent de 1 la

    valeur de leur oprande.

    Ces deux oprateurs peuvent suivre ou prcder leur oprande, on

    parle alors depostou depr-incrmentation ou dcrmentation.

    Dans le cas dun traitement post, loprande est modifi avant sonaffectation alors quil est modifi aprs lors dun traitementpr. Dans

    de nombreux cas, la diffrence est fondamentale, il faut donc utiliser

    ces oprateurs avec prcaution.

    int * short int : 20000

    int * long int : 500000000

    float * int : 25000

    float * long double : 5e+006

    Les variables x, y, z, m etn sont toutes de types diffrents.On voit que le compilateur applique les rgles cites prc-demment pour chacun des calculs.

    #include

    main()

    {

    int x=1, y=1;

    cout

  • 7/27/2019 Aide-Mmoire de C++

    32/221

    1.10 Loprateur conditionnel 19

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    Loprateur sizeof est galement un oprateur unaire qui retourne la

    taille en octets de son oprande. Cest un oprateur peu employ,

    cependant il peut prsenter une certaine utilit lorsque lon recherche la

    taille des donnes, notamment dans le cadre de ladaptation dun

    programme un nouveau compilateur.

    1.10 LOPRATEUR CONDITIONNEL

    Il existe un oprateur conditionnel assez peu utilis mais qui cependant

    permet de traiter des expressions simples. Cet oprateur remplace le

    classique if then else que nous tudierons au chapitre suivant. La

    forme de cette expression est :

    expression1 ? expression2 : expression3.

    expression1 constitue la condition ; expression2 est value si lexpression1 est vraie ;

    expression3 est value si lexpression1 est fausse.

    1.11 LES OPRATEURS RELATIONNELS,DE COMPARAISON ET LOGIQUES

    Le tableau 1.3 prcise lensemble des oprateurs.

    ++x = 2

    x = 2

    y++ = 1y = 2

    Les variables entires x, y sont initialises 1 puis pr-incrmentes pour x et post-incrmentes poury. On voitque x est dj incrment puis plac dans le flux de sortiealors que y est plac avec sa valeur initiale dans le flux desortie puis incrment.

  • 7/27/2019 Aide-Mmoire de C++

    33/221

    20 1 Langage C++, les bases

    Les oprateurs relationnels et de comparaison sont dune grande

    importance comme dans la plupart des langages et sont donc trs

    employs. Ils tablissent une relation ou une comparaison entre lesinstructions quils relient, gnralement pour rpondre une condition.

    TABLEAU 1.3

    Relationnel

    < infrieur

    suprieur

    >= suprieur ou gal

    Relationnel de

    comparaison

    == identique

    != diffrent de

    Logique

    && et

    || ou

    ! non

    #include

    main(){

    int x=10, y=5, z=10;cout

  • 7/27/2019 Aide-Mmoire de C++

    34/221

    1.11 Les oprateurs relationnels, de comparaison et logiques 21

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    Les oprateurs logiques sont le OU, le ET et le NON logique, ils suivent

    les tables de vrit classiques (cf. tableau 1.4 et 1.5).

    x 1

    x>y -> 0

    x 0

    x==z -> 0

    x!=z -> 1

    Nous trouvons ici une illustration des oprateurs relation-nels, de comparaison et conditionnel avec les diffrentesexpressions values.

    TABLEAU 1.4 TABLESDEVRIT ET ET OU (AVEC 0 FAUX ; 1 VRAI).

    ET OU

    a b a&&b a||b

    0 0 0 0

    1 0 0 1

    0 1 0 1

    1 1 1 1

    TABLEAU 1.5 TABLEDEVRIT NON (AVEC 0FAUX ; 1 VRAI).NON

    a !a

    1 0

    0 1

  • 7/27/2019 Aide-Mmoire de C++

    35/221

    22 1 Langage C++, les bases

    Ces oprateurs agissent sur des oprandes qui sont eux-mmes des

    expressions logiques et combinent ainsi des conditions lmentaires

    afin de dfinir des conditions composes qui seront vraies ou fausses.

    1.12 LA PRIORIT DES OPRATEURS

    Les oprateurs du langage C++ possdent une priorit qui devient trs

    importante lors de la manipulation dexpressions arithmtiques

    complexes. Lannexe B prsente lensemble des oprateurs avec leurs

    priorits.

    #include

    main(){

    int a=5, b=10, c=15, x, y, z;x=(a

  • 7/27/2019 Aide-Mmoire de C++

    36/221

    1.12 La priorit des oprateurs 23

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    Quand deux oprateurs de mme niveau de priorit sont prsents

    dans une expression, on tient compte de lassociativit de chacun qui

    dtermine dans quel sens, de gauche droite ou de droite gauche,

    seront valus les oprateurs.

    Une des autres caractristiques lies la priorit des oprateurs est

    laritqui indique si loprateur manipule un ou deux oprandes.

    #include

    main()

    {

    {

    int x=1 , y=5, z=10;

    x-=(y=20)?--y:z/-y;cout

  • 7/27/2019 Aide-Mmoire de C++

    37/221

  • 7/27/2019 Aide-Mmoire de C++

    38/221

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    Chapitre 2

    Entres et structures

    de contrle

    2.1 ENTRE

    En C++, les donnes de lentre sont diriges vers un flux dentre, dela mme manire que pour linstruction cout. Les donnes sont rcup-

    res par linstruction cin qui appartient, elle aussi, au fichier externe

    iostream.h.

    break, cin, continue, do, else, for,

    goto, if, switch, while

    Oprateurs, mots-cls et fonctions

  • 7/27/2019 Aide-Mmoire de C++

    39/221

    26 2 Entres et structures de contrle

    laide de cin on peut aussi dfinir des entres multiples qui serontlues de gauche droite. La syntaxe est simple il suffit de mettre lasuite les entres dans le flux.

    cin

  • 7/27/2019 Aide-Mmoire de C++

    40/221

    2.2 Le test conditionnel 27

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    construite suivant lexpression classique si alors sinon qui offre

    le test dune condition et qui rpond suivant deux alternatives.

    En C++, nous pouvons trouver la syntaxe simple if (condition)

    instruction, ou la syntaxe volue if (condition) instruction1else instruction2 si la seconde alternative du test est explicite.

    Linterprtation dun test est vraie lorsque la valeur de lexpression

    interprte dans la condition est non nulle. Une valeur nulle entrane un

    test faux. Les valeurs vrai et faux sont ici prises en compte au sens

    boolen du terme.

    Dans lexemple prcdent, aucun traitement nest ralis en cas

    dentre dun nombre ngatif. Nous pouvons pallier ce problme par

    lutilisation du test classique deux alternatives (si alors sinon).

    #include

    main(){

    int x;cout > x;if (x>0) cout

  • 7/27/2019 Aide-Mmoire de C++

    41/221

    28 2 Entres et structures de contrle

    Chacune des alternatives qui suivent la condition peut tre constitue

    dun ensemble dinstructions insres entre des accolades : { }.

    #include

    main(){

    int x;cout > x;if (x>0) cout > b;

    //Condition qui teste si le code ASCII de a est

    suprieur b

  • 7/27/2019 Aide-Mmoire de C++

    42/221

    2.2 Le test conditionnel 29

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    Les instructions ifelse peuvent tre imbriques les unes dans les

    autres suivant diffrentes formes.

    if condition1 if condition2 rsultat1

    else rsultat2

    if (a>b) {

    //Intervertit a et b par lintermdiaire de x

    x=b;

    b=a;a=x;

    cout

  • 7/27/2019 Aide-Mmoire de C++

    43/221

    30 2 Entres et structures de contrle

    else if condition3 rsultat3

    else rsultat4

    if condition1 rsultat1

    else if condition2 rsultat2

    if condition1 rsultat1

    else if condition2 rsultat2

    else rsultat3

    if condition1 if condition2 rsultat1else rsultat2

    if condition1 if condition2 rsultat1

    else rsultat2

    else rsultat3

    if condition1

    {

    if condition2 rsultat1

    else rsultat2

    }

    if condition1

    {

    if condition2 rsultat1

    }

    else rsultat2

    Dans tous les cas et par convention en langage C++, else esttoujours associ linstruction if la plus proche qui ne possde pasencore de else.

    laide de linstruction conditionnelle if, des expressionsboolennes peuvent tre manipules de faon simple.

  • 7/27/2019 Aide-Mmoire de C++

    44/221

    2.3 Les boucles 31

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    2.3 LES BOUCLES

    La plupart des langages de programmation possdent des instructions

    ddies la ralisation ditrations. Litration est la rptition dune

    ou plusieurs instructions. Le C++ dispose de trois instructions

    itratives : while, dowhile et for.

    2.3.1 Linstruction while

    Sa forme suit la construction suivante :

    while (condition) expression

    La ou les instructions constituant lexpression sont rptes tant que

    la valeur de la condition nest pas fausse (gale 0).

    #include

    main(){

    int x=0, y=2, D=3, d=2;if (x) cout

  • 7/27/2019 Aide-Mmoire de C++

    45/221

    32 2 Entres et structures de contrle

    2.3.2 Linstruction dowhile

    La diffrence fondamentale de cette instruction avec la prcdente

    rside dans la position du test. Dans linstruction dowhile le test

    seffectue en fin dexcution de lexpression.Sa forme est la suivante :

    do expression while (condition)

    La ou les instructions constituant lexpression sont excutes de

    faon rptitive tant que la valeur de la condition nest pas fausse (gale

    0). Quoi quil en soit, lexpression est toujours value au moins une

    fois puisque la condition nest prise en compte quaprs une premire

    excution de ou des instructions.

    #include

    main(){

    int i=0, n, somme=0;cout > n;while (i

  • 7/27/2019 Aide-Mmoire de C++

    46/221

    2.3 Les boucles 33

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    2.3.3 Linstruction for

    Linstruction for est lune des plus utilises pour la ralisation de

    boucle dinstructions. Elle est compose de plusieurs lments. Une

    expression qui gre la valeur initiale dun index (initialisation), une

    expression qui teste lindex (condition) et enfin une expression qui

    modifie lindex. Sa forme est la suivante :

    for (expression1 ; expression2 ; expression3) expression4

    Linitialisation (expression1) correspond gnralement une affec-

    tation et la modification dindex (expression3) une expression unaire.

    Lors de lexcution de linstruction for, la condition (expression2)

    est value et teste avant chaque parcours de ou des instructions qui

    composent expression4. Cette dernire est dfinie comme la boucledinstructions.

    #include

    main(){

    int i=1, n, produit=1;cout > n;do{produit*=i;++i;

    }while (i

  • 7/27/2019 Aide-Mmoire de C++

    47/221

    34 2 Entres et structures de contrle

    Une boucle for peut utiliser plusieurs index initialiss diffremment

    qui peuvent tre aussi modifis de faon individuelle.

    #include

    main()

    {

    int i, n, somme=0;

    cout > n;

    for (i=0; i

  • 7/27/2019 Aide-Mmoire de C++

    48/221

    2.3 Les boucles 35

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    Lors de lcriture dun programme en langage C++, les boucles

    peuvent tre imbriques les unes dans les autres avec des structures de

    contrles diffrentes. Attention cependant, les chevauchements sont

    interdits et les index de chacune des boucles doivent tre diffrents.

    i = 0 / j = 0i = 1 / j = -5i = 2 / j = -10

    .

    .

    .i = 100 / j = -500

    La boucle traite deux indexi etj. Le premier compte de 1 100 avec un incrment de 1 et le second de 5 en 500 avec unincrment gal -5. La condition darrt repose sur la

    valeur de i qui doit tre infrieure ou gale 100.

    #include

    main(){

    int n,exp,i,j,puiss=1;for (i=1;i n;cout > exp;for (j=1;j

  • 7/27/2019 Aide-Mmoire de C++

    49/221

    36 2 Entres et structures de contrle

    2.4 LES INSTRUCTIONS BREAK ET CONTINUE

    Dans certains cas il est utile de pouvoir mettre fin une boucle, cest le

    rle de linstruction break que lon peut placer dans les boucles de type

    while, dowhile et for.

    Lors de son excution la boucle est vritablement rompue et litra-

    tion en cours se termine cet endroit prcis.

    Entrer le nombre : 2Entrer lexposant : 82 exposant 8 = 256

    Entrer le nombre : 4Entrer lexposant : 24 exposant 2 = 16Entrer le nombre : 5Entrer lexposant : 35 exposant 3 = 125Entrer le nombre : 15Entrer lexposant : 4

    15 exposant 4 = 50625

    Deux boucles i etj imbriques. La premire demande lutilisateur une valeur n et un exposant exp, la secondeexcute le calcul nexp, puis la premire affiche le rsultat.Cette opration est rpte quatre fois. La boucle j estimbrique dans la boucle i.

    #include main(){

    int n,exp,i,puiss=1;while (1){cout > n;

    if (n==0) break;

  • 7/27/2019 Aide-Mmoire de C++

    50/221

    2.4 Les instructions break et continue 37

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    Linstruction continue arrte elle aussi lexcution du bloc

    dinstructions en cours mais, la diffrence de break ne rompt pas la

    boucle. Elle permet la reprise de cette dernire litration suivante.

    cout > exp;for (i=1;i

  • 7/27/2019 Aide-Mmoire de C++

    51/221

    38 2 Entres et structures de contrle

    2.5 LINSTRUCTION SWITCH

    Cette instruction autorise le choix dun groupe dinstructions parmi

    dautres. La slection est dtermine par lvaluation dune expression

    lie linstruction switch.

    Sa forme est la suivante :

    switch (expression) {

    case constante1 : instructions1 ;

    while (1){

    cout > n;

    if (n==0) break;if (n

  • 7/27/2019 Aide-Mmoire de C++

    52/221

    2.5 Linstruction switch 39

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    case constante2 : instructions2 ;

    .

    .

    .case constanteN : instructionsN ;

    default : instructionsDefault ;

    }

    Derrire linstruction switch, expression reprsente un caractre ou

    un entier. Celui-ci est ensuite compar chacune des constantes de cas

    dtermines par linstruction case. En cas dgalit la suite dinstruc-

    tions correspondantes est excute sinon cest le bloc dinstructions

    dfinies derrire default qui est pris en compte.Chaque bloc dinstructions doit se terminer par linstruction break

    dj rencontre plus haut, afin de marquer la fin du bloc.

    #include

    main()

    {double n1, n2, r;char operation;while (1){cout > n1;if (n1==0) break;cout > n2;cout > operation;switch (operation){

    case A:r=n1+n2;cout

  • 7/27/2019 Aide-Mmoire de C++

    53/221

    40 2 Entres et structures de contrle

    r=n1-n2;

    cout

  • 7/27/2019 Aide-Mmoire de C++

    54/221

    2.5 Linstruction switch 41

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    Le cas default est optionnel. Sil nest pas prcis aucun des traite-ments prsents dans les blocs dinstructions nest ralis.

    Le programme demande lutilisateur deux nombres n1 etn2, puis une opration A, S, M, D ou F (Addition, Soustrac-tion, Multiplication, Division ou Fin). Dans le cas o

    lopration existe, linstruction switch dirige les 2 nombressaisis vers le calcul puis laffichage du rsultat.

    Si lopration nexiste pas (erreur de saisie), linstructionswitch choisit le cas default et affiche un message derreur.

    Si lutilisateur donne 0 comme premier nombre n1, leprogramme se termine.

    #include

    main(){

    double n1, n2, r;

    char operation;while (1){cout > n1;if (n1==0) break;cout > n2;cout > operation;switch (operation){

    case A:r=n1+n2;cout

  • 7/27/2019 Aide-Mmoire de C++

    55/221

    42 2 Entres et structures de contrle

    cout

  • 7/27/2019 Aide-Mmoire de C++

    56/221

    2.6 Linstruction goto 43

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    2.6 LINSTRUCTION GOTO

    Les instructions break, continue et switch provoquent des sauts des

    endroits dtermins dans lensemble des instructions qui composent le

    programme. Linstruction goto va elle aussi gnrer un saut mais, dansce cas, la destination est prcise par une tiquette. Cette instruction

    peut permettre de bouleverser la logique dexcution dun programme.

    Ltiquette qui suit goto est un identificateur suivi dun point-

    virgule. La destination ou cible du saut est cette mme tiquette suivie

    de deux-points.

    La syntaxe est donc la suivante :

    goto etiquette ;

    .

    .

    .

    etiquette : instruction

    Ltiquette doit tre unique dans le programme (ou au sein de la

    fonction, voir plus loin dans cet ouvrage).

    Si lopration nexiste pas (erreur de saisie), linstructionswitch ignore la demande et neffectue aucun calcul.

    Si lutilisateur donne 0 comme premier nombre n1, leprogramme se termine.

    #include #include

    main(){

    double n, r;saisie:cout

  • 7/27/2019 Aide-Mmoire de C++

    57/221

  • 7/27/2019 Aide-Mmoire de C++

    58/221

    2.6 Linstruction goto 45

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    Lutilisation de linstruction goto est sujette de nombreuses contro-

    verses dans la communaut des dveloppeurs par le fait quelle peut

    mettre rapidement en cause lintgrit de la logique dun programme.

    Je vous conseille donc de lutiliser avec parcimonie, celle-ci pouvanttoujours tre remplace.

    Linstruction goto

  • 7/27/2019 Aide-Mmoire de C++

    59/221

  • 7/27/2019 Aide-Mmoire de C++

    60/221

  • 7/27/2019 Aide-Mmoire de C++

    61/221

    48 3 Les fonctions

    50 fichiers den-tte. Ces 50 fichiers sont forms des 18 fichiers

    dentte de la bibliothque C standard plus 32 autres fichiers appels

    en-ttes STL (Standard Template Library).

    Lannexe H fournit une liste de lensemble des 50 fichiers retenuspar la norme ISO (International Organization for Standardization).

    #include #include #include #include

    const double PI=3.14;

    main(){

    char chaine[9];cout

  • 7/27/2019 Aide-Mmoire de C++

    62/221

    3.2 Les fonctions personnalises 49

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    3.2 LES FONCTIONS PERSONNALISES

    En marge des fichiers den-ttes et des fonctions qui les constituent, lelangage C++ autorise la cration et lutilisation de fonctions personna-

    lises.

    Elles vont permettre au programmeur de dcomposer un programme

    important en un certain nombre de sous-ensembles plus petits permet-

    tant ainsi une modularit du code.

    Les fonctions peuvent tre compiles et testes sparment pour

    offrir une mise au point plus rapide et un dbogage plus efficace dans lacration et la mise au point dun programme complexe.

    La lisibilit du programme sen trouvera galement amliore et sa

    portabilit sen trouvera favorise du fait de lisolement des fonctionna-

    lits spcifiques.

    date (mm/jj:aa) : 01/06/04

    heure (hh:mm:ss) : 06:12:35

    Utilisation des fichiers den-tte de la bibliothque C++standard pour des fonctions mathmatiques (math.h), degestion de chanes de caractres (string.h) et de temps(time.h).

    #include

    double surf(int x, int y, int z)

    {

    return ((x+y)*z)/2;

    }

    main()

    {

    int b, B, h;

    cout

  • 7/27/2019 Aide-Mmoire de C++

    63/221

    50 3 Les fonctions

    Une fonction doit tre compose dun ensemble dinstructions qui

    vont former un sous-ensemble du programme destin assurer unetche parfaitement dfinie.

    Un programme peut tre constitu de plusieurs fonctions et il en

    possde au moins une, cest celle que nous avons dnomme main et

    que nous utilisons dans chaque programme depuis le dbut de cet

    ouvrage.

    Quand un programme contient plusieurs fonctions, leur ordre dcri-

    ture est indiffrent.

    Des fonctions ne peuvent jamais tre imbriques les unes dans lesautres ou se chevaucher.

    Lutilisation dune fonction seffectue par un appel qui peut tre

    rpt plusieurs fois au cours de lexcution du programme.

    Une fonction a pour objectif de traiter les informations qui lui sont

    transmises et de gnrer en retour un ou plusieurs rsultats.

    Une fonction cre possde deux parties qui sont len-tte et le

    corps. Dans len-tte on prcise quel est le nom du rsultat qui sera

    retourn, son type et ses arguments (paramtres). Le corps est le bloc

    cin >> b;

    cout > B;

    cout > h;

    cout

  • 7/27/2019 Aide-Mmoire de C++

    64/221

    3.2 Les fonctions personnalises 51

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    dinstructions qui suit len-tte, cest le code mme de la fonction, il se

    termine par return qui renvoie lemplacement de son appel.

    Les arguments (paramtres) employs dans la fonction sont

    dnomms arguments formels (paramtres formels).La ou les fonctions doivent tre crites avant le programme principal

    (fonction principale) main sauf si lon utilise leprototypage (voir plus

    bas dans ce chapitre).

    La syntaxe gnrale est la suivante :

    type nomfonction (argumentformel1, argumentformel2,,

    argumrentformeln)

    {

    .

    .

    .

    return expression ;

    }

    main()

    {

    .

    .

    .

    nomfonction (argumenteffectif1, argumenteffectif2,,

    argumenteffectifn)

    .

    .

    .

    }

    La transmission des informations la fonction se fait au moyen des

    arguments formels (ou paramtres formels) sous forme didentifica-

    teurs spcifiques. Le retour du rsultat est assur par linstruction

    return.

    Les arguments formels tablissent le lien entre la partie appelante du

    programme et la fonction. Linstruction return rend le contrle la

    fonction principale main du programme. Lexpression qui la suit fait en

    gnral rfrence la donne renvoye au programme appelant. Cette

    expression est facultative dans certains cas de figure et seul return peut

  • 7/27/2019 Aide-Mmoire de C++

    65/221

    52 3 Les fonctions

    tre spcifi. Le programme appelant reprend alors son cours dexcu-

    tion du fait de return qui lui redonne le contrle.

    Dans le cas o linstruction return est seule, il faut noter quelle

    nest pas obligatoire mais reste conseille pour assurer une bonne traa-bilit du code.

    Lappel de la fonction est effectu en spcifiant son nom, suivi, entre

    parenthses de la liste des arguments (ou paramtres) qui lui sont

    ncessaires. Ces arguments sont souvent appels arguments effectifs

    (paramtres effectifs) ou arguments rels (paramtres rels).

    Les arguments formels peuvent tres des constantes, des variables

    ou des expressions. Ils mentionnent le type de ces dernires.

    #include

    const double PI=3.14159;

    double surf(const double pi, double x){

    double z;

    z=x*x*pi;return z;

    }

    main(){

    double r;cout > r;cout

  • 7/27/2019 Aide-Mmoire de C++

    66/221

    3.2 Les fonctions personnalises 53

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    Une instruction return ne peut contenir quune expression unitaire

    et ne renvoyer de ce fait quune seule valeur. Cependant une dfinition

    de fonction peut contenir plusieurs return avec des expressions

    distinctes dans le cas o des alternatives au sein mme de la fonction

    sont ncessaires.

    Les arguments effectifs ou rels sontPI et r, on les trouvederrire lappel de la fonction dans main.

    La valeurz est lexpression retourne par la fonction surfmain.

    #include double ttc(double prix, int codeTVA){

    if (codeTVA==1) return prix*1.186 ;if (codeTVA==2) return prix*1.055 ;else return prix*1.3333 ;

    }

    main(){

    int tva;double ht;cout > ht;cout > tva;cout

  • 7/27/2019 Aide-Mmoire de C++

    67/221

    54 3 Les fonctions

    Quand une fonction renvoie un entier ou un caractre le type peut

    tre omis.

    Si une fonction ne comporte pas dargument, elle est suivie dune

    paire de parenthses.

    On voit ici que la fonction ttc possde plus dune instructionreturn. Cette instruction apporte une sortie de la fonctionpar rapport au taux de TVA choisi.

    #include puissance (int n, int e){

    int x=1;for (int i=1; i nbr;cout > exp;cout

  • 7/27/2019 Aide-Mmoire de C++

    68/221

  • 7/27/2019 Aide-Mmoire de C++

    69/221

    56 3 Les fonctions

    3.4 LA FONCTION VOID

    Une fonction qui ne retourne aucune valeur utilise le mot-cl void la

    place de la spcification du type.

    #include

    int fact(int x)

    {

    if (x==1)

    return x;

    else

    x=(x*fact(x-1));

    return x;

    }

    main(){

    int n;

    cout > n;

    cout

  • 7/27/2019 Aide-Mmoire de C++

    70/221

    3.5 Dclaration, dfinition et prototypage de fonctions 57

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    3.5 DCLARATION, DFINITION ET

    PROTOTYPAGE DE FONCTIONS

    La plupart des programmeurs donnent len-tte de la fonction avant le

    programme principal (main) et sa dfinition complte aprs.

    En adoptant cette mthode, les fonctions peuvent tre places

    nimporte o dans le programme.

    Cette criture de fonctions porte le nom de prototypage. La

    dclaration de la fonction est leprototype et la fonction complte, en-

    tte plus corps est la dfinition de la fonction.

    void volume(double R)

    {

    double v;

    v=4.0/3*PI*R*R*R;

    cout

  • 7/27/2019 Aide-Mmoire de C++

    71/221

    58 3 Les fonctions

    La dclaration dune fonction est identique la dclaration dune

    variable, elle contient comme argument (paramtres) les types des

    diffrentes variables qui seront utilises.

    Sa syntaxe est la suivante :type nomfonction (argument1, argument2,, argumrentn)

    #include

    void bougering(int, char, char, char);

    main()

    {int nbdisk;cout

  • 7/27/2019 Aide-Mmoire de C++

    72/221

    3.6 Passage par valeurs et par rfrence 59

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    Dans une fonction les variables dclares dans la liste des arguments

    de la fonction et celle dclares dans son corps sont dites locales. Cette

    notion de localit vient du fait que ces variables ne sont accessibles

    qu lintrieur mme du bloc constituant la fonction.

    3.6 PASSAGE PAR VALEURS

    ET PAR RFRENCE

    Les fonctions que nous avons tudies jusqu prsent utilisaient des

    arguments qui taient transmis dans la fonction par lintermdiaire dun

    processus nommpassage par valeur.

    Lors de lappel de la fonction on value largument et on laffecte

    ensuite largument prsent dans len-tte de la fonction avant den

    commencer lexcution. Par ce moyen des expressions peuvent tre

    utilises comme argument.

    TOUR DE HANOI

    Combien de disques : 3

    Les piliers sont numerotes de 1, 2, 3 de la gauche

    vers la droiteLes disques sont au depart du jeu sur le pilier 1

    (a gauche)

    Passer le disque 1 du pilier 1 au pilier 3

    Passer le disque 2 du pilier 1 au pilier 2

    Passer le disque 1 du pilier 3 au pilier 2

    Passer le disque 3 du pilier 1 au pilier 3

    Passer le disque 1 du pilier 2 au pilier 1

    Passer le disque 2 du pilier 2 au pilier 3Passer le disque 1 du pilier 1 au pilier 3

    Ce programme est un exemple de programmation du jeu des Tours de Hano .

    On voit quil utilise une fonction nomme bougeringdclare comme prototype devant la fonction main.

    Lalgorithme repose sur un appel rcursif de cette fonction.

  • 7/27/2019 Aide-Mmoire de C++

    73/221

    60 3 Les fonctions

    Cette mthode de travail avec les fonctions est la plus courante

    toutefois dans quelques cas de figure on peut tre amen travailler

    autrement. On utilise alors lepassage par rfrence.

    En effet, lepassage par valeurne modifie en rien la valeur de largu-

    ment que lon passe la fonction, mme si celui-ci est manipul dans le

    corps de la fonction. Lors de lutilisation du passage par rfrence,

    largument peut prendre une nouvelle valeur au retour de la fonction.

    #include

    double volume(double surfBase, int hauteur)

    {

    double volume;

    volume=surfBase*hauteur;

    return volume;

    }

    main()

    {

    int R, H;cout > R;

    cout > H;

    cout

  • 7/27/2019 Aide-Mmoire de C++

    74/221

    3.6 Passage par valeurs et par rfrence 61

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    Pour passer un argument par rfrence, il suffit dajouter un & (et

    commercial) derrire le type de largument ou devant sa variable.

    Voici sa syntaxe :

    type nomfonction (type argument1& variableargument,)ou

    type nomfonction(type argument1 &variableargument1,)

    #include

    double volume(double surfBase, int& hauteur){

    double volume;hauteur=hauteur*2;volume=surfBase*hauteur;return volume;}

    main(){

    int R, H;cout > R;cout > H;cout

  • 7/27/2019 Aide-Mmoire de C++

    75/221

    62 3 Les fonctions

    Il existe un autre moyen deffectuer le passage dun argument, cest

    lepassage par rfrence constante.

    Une autre des caractristiques du passage par rfrence cest que

    cette technique vite la duplication de largument lorsquil est pass la fonction.

    Le fait que cette duplication nest pas lieu allge la mmoire et rend

    donc plus efficace le programme.

    Pour utiliser lepassage par rfrence tout en maintenant lefficacit

    on peut utiliser lepassage par rfrence constante qui consiste faire

    prcder largument du mot-cl const.

    #include

    double volume(double surfBase,const int& hauteur)

    {

    double volume;

    volume=surfBase*hauteur;

    return volume;}

    main()

    {int R, H;

    cout > R;

    cout > H;

    cout

  • 7/27/2019 Aide-Mmoire de C++

    76/221

    3.7 Surcharge dune fonction 63

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    3.7 SURCHARGE DUNE FONCTION

    Le langage C++ autorise lutilisation dun mme nom pour plusieurs

    fonctions qui peuvent porter des arguments diffrents.Afin que le compilateur puisse les diffrencier, la rgle qui est appli-

    que consiste leurs faire porter des arguments de types diffrents ou

    en nombres diffrents.

    #include

    double volume(double surfBase, int hauteur1);

    double volume(double surfBase, int hauteur2);

    double volume(double surfBase);

    main()

    {

    int R, H1, H2;

    cout > R;

    cout > H1;

    cout > H2;

    cout

  • 7/27/2019 Aide-Mmoire de C++

    77/221

    64 3 Les fonctions

    3.8 QUELQUES PRCISIONS

    Comme nous lavons dj mentionn en dbut de ce chapitre, la fonc-

    tion main est obligatoire dans un programme C++.

    La plupart des compilateurs acceptent le fait que main soit dclare

    comme une fonction void avec la syntaxe suivante :

    void main()

    double volume;

    volume=surfBase*hauteur1;

    return volume;}

    double volume(float surfBase,int hauteur2)

    {

    double volume;

    volume=surfBase*hauteur2;

    return volume;}

    double volume(double surfBase)

    {

    double volume;volume=surfBase*20;

    return volume;

    }

    Entrez le rayon du cercle : 15

    Entrez la hauteur du cylindre N.1 : 5

    Entrez la hauteur du cylindre N.2 : 10

    Volume du cylindre N.1 : 3532.5

    Volume du cylindre N.2 : 7065

    Volume du cylindre N.3 de hauteur 20 : 14130

    Dans ce programme on a plac trois prototypes de la fonc-tion volume qui sont diffrencis par des types dargumentsdiffrents ou bien un nombre darguments diffrents. Lecompilateur C++ excute les trois calculs sans faillir grce la surcharge possible de la fonction volume.

  • 7/27/2019 Aide-Mmoire de C++

    78/221

    3.8 Quelques prcisions 65

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    Dans quelques cas exceptionnels on peut tre amen vouloir

    terminer lexcution dun programme lintrieur dune fonction. Pour

    cela C++ dispose de la fonction exit().

    Lutilisation de cette fonction ncessite de faire appel au fichier

    den-tte stdlib.h et donc de linclure dans le programme.

    Un autre lment important dans la manipulation des fonctions, cest

    laporte de chacun des lments manipuls, fonctions et variables. La

    #include #include #include

    void puissance8(int);

    main()

    {int n;cout > n;puissance8(n);return 0;

    }void puissance8(int x){cout

  • 7/27/2019 Aide-Mmoire de C++

    79/221

    66 3 Les fonctions

    porte dfinie leur limite dutilisation dans le programme. Cette notion

    fait appel aux deux qualificatifs local et global.

    Une fonction globale ou une variable globale sont valides et accessi-

    bles dans lensemble du fichier programme manipul. Elles sont dcla-res lextrieur de toute fonction.

    Une fonction locale ou une variable locale est valide et accessible

    dans la fonction qui la contient. Elle est dclare lintrieur du bloc

    constituant le corps de la fonction.

    #include

    double inverse (int);

    main()

    {

    int n;

    double carreinverse(int);

    cout > n;

    cout

  • 7/27/2019 Aide-Mmoire de C++

    80/221

    3.9 La fonction inline 67

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    Cette notion deporte est trs sensible et souvent source derreur. Il

    faut donc veiller tout particulirement sa bonne utilisation.

    3.9 LA FONCTION INLINE

    Quand le temps dexcution est de premire importance dans un

    programme, on peut faire appel la fonction inline.

    Quand le compilateur rencontre cette fonction, il incorpore imm-

    diatement les instructions de la fonction qui suit, contrairement untraitement normal qui passe par une procdure dappel puis une proc-

    dure de retour.

    Par ce biais on va donc faire une conomie substantielle de temps

    machine au dtriment cependant dune consommation mmoire plus

    importante, puisqu chaque appel de la fonction les instructions

    correspondantes sont gnres.

    La syntaxe est la suivante :

    inline type nomfonction(...)

    La fonction inverse est de type globale puisquelle est endehors de toute fonction, ce qui lui confre la possibilitdtre appele par toutes les fonctions.

    La fonction carreinverse est locale la fonction main et nepeut donc tre appele que depuis celle-ci.

    La variable n est locale et nest utilisable que dans la fonc-tion main.

    #include

    inline double inverse(int);

    main()

    {

    La fonction inline

  • 7/27/2019 Aide-Mmoire de C++

    81/221

    68 3 Les fonctions

    Lutilisation de la fonction inline ne doit pas tre systmatique, son

    emploi doit rester attach des cas de programmation bien spcifiques.Il faut aussi remarquer quil nest pas possible de compiler spar-

    ment une fonction inline contrairement une fonction classique.

    int n;

    double carreinverse(int);

    cout > n;

    cout

  • 7/27/2019 Aide-Mmoire de C++

    82/221

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    Chapitre

    4

    Les tableaux

    4.1 PREMIRE APPROCHEPour traiter un nombre de donnes importantes, on utilise des listes

    dlments qui sont rangs sous la forme dun vecteur ou dune

    matrice. Dans la vie courante un vecteurde donnes est simplement

    reprsent par une liste de valeurs et une matrice par un tableau

    plusieurs entres, lignes et colonnes.

    En langage C++, un vecteurou une matrice sont toujours considrs

    comme un tableau dont la dimension va varier en fonction du nombredentres. Chaque lment du tableau va tre repr par un indice. Il y

    a autant de sries dindices quil y a de dimensions dans le tableau.

    Un tableau qui possde un indice est dit unidimensionnel

    (tableau 4.1), partir de deux, il est multidimensionnel (tableau 4.2).

  • 7/27/2019 Aide-Mmoire de C++

    83/221

    70 4 Les tableaux

    Les indices viennent indexer la position des lments. Cette numro-

    tation des lments est entire et commence toujours 0. On traitera

    donc du ime lment dun tableau.

    4.2 DCLARATION DUN TABLEAU

    La dclaration dun tableau en langage C++ est identique celle dune

    variable ordinaire sauf quelle doit tre suivie de sa taille, cest--dire

    de son nombre dlments ou indice, entre crochets.

    La syntaxe est la suivante :

    type nomtableau[nblment]

    TABLEAU 4.1 UNTABLEAUDEDIMENSION 1 (VECTEUROULISTE).

    indices 0 1 2 3 n

    lments e[0] e[1] e[2] e[3] ... e[n]

    TABLEAU 4.2 UNTABLEAUDEDIMENSION 2 (MATRICEOUTABLEAU 2 ENTRES).

    indices 0 1 2 3 n

    0 e[0] [0] e[1] [0] e[2] [0] e[3] [0] e[n] [0]

    1 e[0] [0] e[1] [1] e[2] [1] e[3] [1] e[n] [1]

    2 e[0] [0] e[1] [2] e[2] [2] e[3] [2] e[n] [2]

    3 e[0] [0] e[1] [3] e[2] [3] e[3] [3] e[n] [3]

    ...

    m e[0] [m] e[1] [m] e[2] [m] e[3] [m] e[n] [m]

  • 7/27/2019 Aide-Mmoire de C++

    84/221

  • 7/27/2019 Aide-Mmoire de C++

    85/221

    72 4 Les tableaux

    #include

    main(){

    int i,j;int pt[3][2];for(i=0;i

  • 7/27/2019 Aide-Mmoire de C++

    86/221

    4.2 Dclaration dun tableau 73

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    Il faut tenir compte du fait que la valeur des indices commence partir de zro. Cest--dire quun tableau dimensionn pour une taille

    de 5 lments comportera un indice maximal gal 4. Ce point est

    important car en C++, le dpassement de lindice maximal du tableau

    nest pas vrifi et peut donc amener des rsultats pour le moins

    bizarres. En effet, si lindice suprieur du tableau est dpass, le compi-

    lateur ira chercher en mmoire une valeur qui ne fera pas partie du

    tableau et qui possdera une valeur totalement imprvisible.

    Ligne 1/colonne 0 Poids = 65 : ligne 1/colonne1

    Taille = 160

    Ligne 2/colonne 0 Poids = 85 : ligne 2/colonne1

    Taille = 180

    Le tableau pt est initialis avec deux indices de valeur 3 et 2,il est donc multidimensionnel ou bidimensionnel. On peutlassimiler une matrice constitue de 3 lignes et 2colonnes. La boucle dindice i incrmente les lignes [3] et laboucle dindice j, les colonnes [2].

    #include

    main()

    {

    int i;

    int nbr[5];

    for (i=0;i nbr[i];

    }

    for (i=0;i

  • 7/27/2019 Aide-Mmoire de C++

    87/221

    74 4 Les tableaux

    Un tableau peut tre initialis avec une liste dlments prdfinis.

    Les affectations se font dans leur ordre dapparition.

    La syntaxe est la suivante :

    type nomtableau[nblment]={lment1, lment2,...,

    lmentn}

    ou

    type nomtableau[]={lment1, lment2,...,lmentn}

    Si la taille nest pas prcise, cest le nombre dlments de la liste

    dinitialisation qui la dtermine.

    Entrer un entier : 2

    Entrer un entier : 4

    Entrer un entier : 16

    Entrer un entier : 3Entrer un entier : 345

    Entree 0=2

    Entree 1=4

    Entree 2=16

    Entree 3=3

    Entree 4=345

    Entree 5=1245120

    Entree 6=4213225Entree 7=3456671

    Le tableau nbr est rempli par cinq valeurs (de 0 4) saisiespar lutilisateur.

    Lors de sa relecture, la boucle i appelle 8 valeurs (de 0 7)et effectue ainsi une erreur de dbordement, ce qui conduit laffichage de valeurs totalement imprvisibles pour lesentres 5, 6 et 7 dont la saisie na pas t ralise.

    Ces valeurs sont celles contenues dans la mmoire de lamachine lors de la lecture.

    Lors de la compilation, le compilateur ne prcise aucuneerreur car il ne vrifie pas les valeurs dindice.

  • 7/27/2019 Aide-Mmoire de C++

    88/221

    4.3 Tableau et fonctions 75

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    4.3 TABLEAU ET FONCTIONS

    Il arrive souvent que lon veuille effectuer le passage dun tableau une

    ou plusieurs fonctions.

    #include

    main()

    {

    int nbr[10]={12, 14, 5, 678, 89, 56, 1, 2, 89,

    54};

    int somme=0;

    for (int i=0;i

  • 7/27/2019 Aide-Mmoire de C++

    89/221

    76 4 Les tableaux

    Pour effectuer cette opration il suffit de prciser le type des

    lments du tableau ainsi que son nom.

    #include

    float moy(float []);

    main()

    {

    float note[10];

    for (int i=0;i note[i];}

    cout

  • 7/27/2019 Aide-Mmoire de C++

    90/221

  • 7/27/2019 Aide-Mmoire de C++

    91/221

    78 4 Les tableaux

    cin >> nbr;

    for (int i=0;i

  • 7/27/2019 Aide-Mmoire de C++

    92/221

  • 7/27/2019 Aide-Mmoire de C++

    93/221

    80 4 Les tableaux

    double tab3[NBLIG][NBCOL];

    void lectab(int, int, double tab[NBLIG][NBCOL]);

    void produit(int, int, double tab1[NBLIG][NBCOL],double tab2[NBLIG][NBCOL]);

    void affich(int, int, double tab3[NBLIG][NBCOL]);

    main()

    {

    cout

  • 7/27/2019 Aide-Mmoire de C++

    94/221

    4.4 Quelques exemples et cas particuliers 81

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    void produit(int nl, int nc, double tab1[NBLIG][NB-

    COL], double tab2[NBLIG][NBCOL])

    {

    for (int i=0;i

  • 7/27/2019 Aide-Mmoire de C++

    95/221

    82 4 Les tableaux

    4.4.3 Traitement de chanes de caractres

    Une chane de caractre peut tre considre comme un tableau de

    caractres. Considrant cette situation, il devient facile de manipuler

    celles-ci en associant au traitement, des fonctions spcifiques emprun-

    tes au fichier den-tte string.h.

    Produit des 2 tableaux

    ligne/colonne -> 1/1 : 1.5

    ligne/colonne -> 1/1 : 5

    ligne/colonne -> 1/1 : 10.5ligne/colonne -> 1/1 : 18

    ligne/colonne -> 1/1 : 27.5

    ligne/colonne -> 1/1 : 39

    Le programme ci-dessus effectue le produit de deux tableauxbidimensionnels tab1 et tab2 dune taille maximum de100 lignes (NBLIG) par 100 colonnes (NBLOG).

    La fonction lectab permet la saisie de lensemble desvaleurs pour chacun des tableaux suivant un nombre delignes nbl et de colonnes nbc prcis auparavant par lutili-sateur dans la fonction main.

    Le rsultat est calcul par la fonction produit qui range lesvaleurs obtenues dans le tableau tab3.

    La fonction affich lit le tableau tab3 et affiche les valeursquil contient.

    #include

    #include

    const int NBMOT=100;

    const int LGMOT=30;

    void tri(int, char tab[NBMOT][LGMOT]);

    void affich(int, char tab[NBMOT][LGMOT]);

  • 7/27/2019 Aide-Mmoire de C++

    96/221

  • 7/27/2019 Aide-Mmoire de C++

    97/221

  • 7/27/2019 Aide-Mmoire de C++

    98/221

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    Chapitre 5

    Les pointeurs

    5.1 LE CONCEPT

    Lors de la programmation dans un langage volu, nous manipulons

    des variables qui sadaptent au systme en occupant un nombre

    doctets en mmoire dpendant de leurs types. Le langage C++

    nchappe pas cette rgle et utilise des variables qui reprsentent

    ladresse mmoire de la donne manipule et non sa valeur.

    Cette possibilit est un des atouts majeurs de C et C++ qui apporte

    une souplesse et une puissance nouvelle dans un langage de program-

    mation.

    Chaque donne manipule par lordinateur occupe un emplacement

    mmoire particulier reprsent par une ou plusieurs cellules mmoires

    contigus dune taille dtermine (un ou plusieurs octets en fonction du

    type).

    &, *, new, delete, pow, sqrt

    Oprateurs, mots-cls et fonctions

  • 7/27/2019 Aide-Mmoire de C++

    99/221

    86 5 Les pointeurs

    Ladresse de lemplacement dune variable en mmoire sobtient en

    faisant prcder la variable du symbole & ( et commercial). Lopra-

    teur & est appel oprateur dadresse, celui-ci a dautres utilisations

    possibles comme nous lavons vu dans le chapitre 4 (passage par rf-rence) ou comme nous le verrons un peu plus loin.

    Pour atteindre le contenu, on fera prcder la variable de loprateur

    *, qui est un oprateur unaire dindirection.

    La variable qui contient ladresse est appelepointeurcar elle pointe

    sur ladresse mmoire ou se situe la valeur considre.

    Lopration qui consiste retrouver la valeur dune variable depuis

    son pointeur sappelle dfrencement.

    5.2 DCLARATION ET UTILISATION

    La dclaration dun pointeur ncessite que le nom de la variable soit

    prcd du symbole * (astrisque).

    La syntaxe est la suivante :

    type *pointeur

    #include

    main(){

    int x,y, *px, *py;x=100;cout

  • 7/27/2019 Aide-Mmoire de C++

    100/221

    5.3 Pointeur et fonction 87

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    5.3 POINTEUR ET FONCTION

    Nous allons souvent tre amens passer un pointeur comme argument

    dune fonction. La technique la plus souvent retenue est unpassage par

    rfrence comme nous lavons expliqu au chapitre 3.

    Cest en effet comprhensible puisque la donne (le contenu de

    ladresse) sera modifie de faon globale, dans la fonction et le

    programme qui lappelle.

    cout

  • 7/27/2019 Aide-Mmoire de C++

    101/221

  • 7/27/2019 Aide-Mmoire de C++

    102/221

    5.4 Pointeur et tableau 89

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    5.4 POINTEUR ET TABLEAU

    Pour le compilateur, le nom dun tableau est un pointeur vers le premier

    lment. En prenant en compte cette constatation nous pouvons dire

    quune expression &nomtableau[0] est quivalente nomtableau en

    terme dadresse. En extrapolant on arrive ainsi nomtableau[i] quiva-

    lent *[nomtableau+i] si on considre les contenus.

    *m=99;*n=100;cout

  • 7/27/2019 Aide-Mmoire de C++

    103/221

    90 5 Les pointeurs

    Il est bien sr possible de parcourir un tableau laide dun pointeur.

    Il faut remarquer que ladresse ntant pas de type entier, nous pouvons

    coutnb;

    for(int i=0;i

  • 7/27/2019 Aide-Mmoire de C++

    104/221

    5.4 Pointeur et tableau 91

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    tout de mme lincrmenter comme si elle ltait. Le compilateur se

    charge de dimensionner correctement la taille de lincrment qui

    dpend de lobjet auquel le pointeur est attach.

    On peut dire que lincrment est plutt un dcalage (offset) depuisune adresse de base qui est dfinie par lemplacement du premier

    lment du tableau.

    #include

    main()

    {

    int tab[10]={1, 2, 3, 5, 7, 11, 13, 17, 19, 23};int j=0;

    for(int *n=tab; n

  • 7/27/2019 Aide-Mmoire de C++

    105/221

    92 5 Les pointeurs

    5.5 DE NOUVEAUX OPRATEURS

    En langage C++ , deux oprateurs, new et delete, de gestion de la

    mmoire sont prsents aux cts de malloc et free existant en C.

    Quand un pointeur est dclar, on nest pas certain que ladressequil va utiliser nest pas dj alloue une autre variable. Si cest le

    cas, une erreur est gnre et le pointeur nest pas initialis.

    Pour ne pas avoir ce problme, loprateur unairenew vient notre

    secours.

    Cet oprateur va allouer de la mmoire au pointeur concern.

    Voici quelques exemples dutilisation de cet oprateur.

    float *x;x=new float;

    *x = 2.718;

    ou

    float *x=new float;

    *x = 2.718;

    La variable pointeur x est dclare de typefloat. Une zone mmoire

    est alloue pour le flottant x puis, *x qui a t allou, reoit 2.718.

    n=0x0012FF58

    tab[7]=17 adresse : 0x0012FF74

    n=0x0012FF58

    tab[8]=19 adresse : 0x0012FF78

    n=0x0012FF58

    tab[9]=23 adresse : 0x0012FF7C

    Lors de la lecture du tableau tab, n est un pointeur surint, ilavance donc de 4 octets chaque incrmentation de laboucle et lit chacune des valeurs entires contenues dans letableau tab.

    Linstruction int *n=tab initialise le pointeurn ladressede dpart du tableau tab.

  • 7/27/2019 Aide-Mmoire de C++

    106/221

    5.5 De nouveaux oprateurs 93

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    float *tab[10];

    tab[1] = new float(2.718);

    Dans le cas o les lments dun tableau sont des pointeurs, nous

    pouvons allouer une zone mmoire chacun des lments comme lors

    dune utilisation classique.

    Par ce moyen nous pouvons manipuler un tableau constitu de poin-

    teurs.

    #include

    const int NBVAL=100;

    main()

    {

    void tri(int, int *tab[NBVAL]);

    void affich(int, int *tab[NBVAL]);

    void saisie(int, int *tab[NBVAL]);

    int nbr;int *tab[NBVAL];

    cout > nbr;

    saisie(nbr, tab);

    tri(nbr, tab);

    affich (nbr, tab);

    return 0;

    }

    void saisie(int nb, int *tab[NBVAL])

    {

    int v;

    for (int i=0;i

  • 7/27/2019 Aide-Mmoire de C++

    107/221

  • 7/27/2019 Aide-Mmoire de C++

    108/221

    5.6 Quelques remarques 95

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    Loprateur delete a la fonction inverse de loprateur new, il libre

    la mmoire alloue. Il nest applicable que sur des pointeurs dj

    allous.

    Cette opration permet de librer la zone mmoire.

    Quand un pointeur est dsallou, il nest plus initialis et ne pointe

    sur plus rien.

    5.6 QUELQUES REMARQUES

    Nous pouvons nous demander ce qui se passe quand une dclaration de

    fonction est prsente lintrieur dune autre fonction. On cherche l,

    dfinir une fonction de fonction.

    Dans ce cas, nous allons tre amens spcifier comme argumentdune fonction le nom dune autre fonction.

    La syntaxe adopte est la suivante :

    type (* nomfonction)(argument1, argument2,, argumentn)

    Lexemple qui suit montre les principes qui viennent dtre exposs.

    Dans ce programme de tri, le programme utilise un tableaude pointeurs tab[NBVAL] une dimension (vecteur).Lors de la saisie, on alloue un emplacement mmoire

    chaque lment : tab[i]=new int(v).

    #include

    #include

    double add(double (*)(double),int);double racine(double);double carre(double);

    main(){

    cout

  • 7/27/2019 Aide-Mmoire de C++

    109/221

    96 5 Les pointeurs

    cout

  • 7/27/2019 Aide-Mmoire de C++

    110/221

    5.6 Quelques remarques 97

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    Une possibilit qui peut galement survenir lors dun programme,

    est la dfinition dun pointeur de pointeur. Ce traitement est tout fait

    possible.

    Racine de 9 = 3Racine de 10 = 3.16228Somme des racines : 22.4683

    Carre de 1 = 1Carre de 2 = 4Carre de 3 = 9Carre de 4 = 16Carre de 5 = 25Carre de 6 = 36Carre de 7 = 49Carre de 8 = 64

    Carre de 9 = 81Carre de 10 = 100Somme des carres : 385

    La fonction add value la fonction sur laquelle pointe pt.

    La boucle i calcule ensuite la somme des racines carresdes nombres de 1 10, puis la somme des carrs desnombres de 1 10.

    Le fichier den-tte math.h est prsent pour fournir les fonc-tions sqrt (racine carre) etpow (puissance dun nombre).

    #include

    main(){

    int x=5;cout

  • 7/27/2019 Aide-Mmoire de C++

    111/221

    98 5 Les pointeurs

    Vous trouverez ci-dessous quelques exemples comments de dcla-

    rations utilisant des pointeurs :

    int *pt

    pt est un pointeur sur un entier.

    int *pt[100]

    pt est un tableau de 100 pointeurs sur des entiers.

    int (*pt)[100]pt est un pointeur vers un tableau de 100 entiers.

    int pt(char *x)

    pt est une fonction ayant pour argument un pointeur de type char.

    Elle renvoie un entier.

    int (*pt)(char *x)

    pt est un pointeur de fonction ayant pour argument un pointeur de

    type char.

    Elle renvoie un entier.

    int **ptptx=&ptx;

    cout

  • 7/27/2019 Aide-Mmoire de C++

    112/221

    5.6 Quelques remarques 99

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    int *pt(char *x)

    pt est une fonction ayant pour argument un pointeur de type char.

    Elle renvoie un pointeur sur un entier.

    int *(*pt)(char *a[])pt est un pointeur vers une fonction ayant pour argument un tableau

    de pointeurs de type char.

    Elle retourne un pointeur sur un entier.

    int *(*pt)(char (*a)[])

    pt est un pointeur vers une fonction ayant pour argument un pointeur

    vers un tableau de type char.

    Elle renvoie un entier.

  • 7/27/2019 Aide-Mmoire de C++

    113/221

  • 7/27/2019 Aide-Mmoire de C++

    114/221

  • 7/27/2019 Aide-Mmoire de C++

    115/221

    102 6 Structures et dfinitions de type

    typechampn nomchampn ;} ;

    Le mot-cl struct est optionnel et deux champs de la structure ne

    peuvent pas possder un mme nom.Tous les types de donnes sont admis.

    Lorsque la structure a t dclare on peut prciser les variables qui

    seront du type spcifi. On dsigne ces variables par le terme variables

    structures.

    Le nom des variables structurs peut suivre la dclaration de la

    structure, suivant la syntaxe suivante :

    struct nomstructure {typechamp1 nomchamp1 ;typechamp2 nomchamp2 ;...typechampn nomchampn ;

    } nomvariable1, nomvariable2,, nom variable3;

    6.2 ACCS

    Pour accder aux champs dune variable structure, on utilise lopra-

    teur . (point) qui sera plac entre le nom de la variable et le nom du

    champ choisi.

    La syntaxe est la suivante :

    nomvariable.nomchamp

    #include

    struct fichier{int ref;int nb;float longueur;float diametre;

    }article1, article2;

  • 7/27/2019 Aide-Mmoire de C++

    116/221

  • 7/27/2019 Aide-Mmoire de C++

    117/221

    104 6 Structures et dfinitions de type

    #include struct personne{

    char nom[25];char prenom[25];int age;float taille;float poids;

    }patient[100];

    main(){

    void saisie(int i);void lecture(int i);

    int i,nb;

    coutnb;for(i=0; i

  • 7/27/2019 Aide-Mmoire de C++

    118/221

    6.3 Tableau et structure 105

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    }

    void lecture(int i)

    {cout

  • 7/27/2019 Aide-Mmoire de C++

    119/221

    106 6 Structures et dfinitions de type

    6.4 STRUCTURES ET POINTEURS

    Ladresse de dpart de rangement des variables dune structure

    sobtient classiquement laide de loprateur & (adresse). On peutdclarer un pointeur sur cette variable comme pour toute autre.

    On peut accder un membre dune structure par lintermdiaire de

    sa variable pointeur via la syntaxe suivante :

    pointeurvarstruct->membrestruct

    o pointeurvarstruct est une variable pointeur associe la structure

    et -> un oprateur dun type quivalent . (point), prsent prcdem-

    ment.

    #include #include

    struct film{char titre[40];int annee;

    }cine1, *cine2;

    main(){

    char tampon[40];cine2=&cine1;cout

  • 7/27/2019 Aide-Mmoire de C++

    120/221

    6.4 Structures et pointeurs 107

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    Lexpression prcdente est quivalente :(*pointeurvarstruct).membrestruct

    La variable cine1 est de type film et la variable cine2 est unpointeur sur la structure film. On affecte ce pointeurladresse de dpart de la variable structure film par

    cine2=&cine1.

    La fonction cin.getline(cine2->titre, 40) lit les caractres dutitre du film sur le flot qui la appel et les place dans titresuivant une longueur de 40 caractres. Il est en de mmepour lanne du film.

    La fonction atoi retourne lentier reprsent par tampon.

    #include #include

    struct film{

    char titre[40];int annee;}cine1, *cine2;

    main(){

    char tampon[40];cine2=&cine1;cout

  • 7/27/2019 Aide-Mmoire de C++

    121/221

    108 6 Structures et dfinitions de type

    Il faut bien distinguer (*pointeurvarstruct).membrestruct qui

    dsigne le membre point par la structure de lexpression *(pointeur-

    varstruct.membrestruct) qui pointe le membre de la structure.

    Loprateur -> peut aussi tre employ pour accder un lment

    dun tableau qui est membre dune structure suivant la syntaxe :

    pointeurvariable->membrestruct[expression]

    o expression est une valeur positive ou nulle qui dsigne un lment

    du tableau.

    Titre du film : Le docteur JivagoAnnee : 1965Le docteur Jivago Annee : 1965

    Idem lexemple prcdent avec le remplacement decine2->titre par(*cine2).titre.

    #include

    #include

    struct film{char titre[40];int annee;

    }cine1,*cine2;

    main(){

    char tampon[40];cine2=&cine1;cout

  • 7/27/2019 Aide-Mmoire de C++

    122/221

    6.4 Structures imbriques 109

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    6.4 STRUCTURES IMBRIQUES

    Une structure peut tre membre dune autre structure.

    cout

  • 7/27/2019 Aide-Mmoire de C++

    123/221

    110 6 Structures et dfinitions de type

    }membreclub[100];

    void saisie(int i);

    void lecture(int i);

    main()

    {

    int i, nbm;

    coutnbm;

    for (i=0; i

  • 7/27/2019 Aide-Mmoire de C++

    124/221

    6.5 Dfinitions de type 111

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    6.5 DFINITIONS DE TYPE

    Le langage C++ offre la possibilit de dfinir ses propres types comme

    nous lavons dj vu au chapitre 1 avec les types enum mais aussi des

    types qui sont des alias de types dj existants.Cest la directive utilisant le mot-cl typedef qui se charge de cette

    opration.

    La syntaxe est la suivante :

    typedef type typealias

    Nombre de membres a traiter : 2

    Nom : DUPONT

    Prenom : Marie

    Film prefere : RicochetAnnee : 1991

    Nom : DUMAS

    Prenom : Paul

    Film prefere : Solaris

    Annee : 1972

    DUPONT Marie film prefere : Ricochet 1991

    DUMAS Paul film prefere : Solaris - 1972

    La structure film est imbrique dans la structure cinefil.

    #include

    typedef double reel;typedef int entier;

    const reel PI=3.14159;

    main(){

  • 7/27/2019 Aide-Mmoire de C++

    125/221

    112 6 Structures et dfinitions de type

    Les dfinitions de type sont utilisables dans la dclaration de

    tableaux, comme dans lexemple suivant :typedef float degre

    degre celsius[50], fahrenheit[50]

    Cette forme est quivalente celle-ci :

    typedef float degre[50]

    degre celsius, fahrenheit

    La directive typedef est applicable sur les structures, o ellesimplifie leur utilisation, lorsque le programmeur doit manipuler

    plusieurs structures identiques de noms diffrents.

    typedef struct{

    int ref;

    int qte;

    char designation[50];

    int taille;

    float cout;

    entier i;

    for(i=1; i

  • 7/27/2019 Aide-Mmoire de C++

    126/221

    6.5 Dfinitions de type 113

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    }article;

    article vetFemme, vetHomme;

    Dans lexemple ci-dessus vetFemme et vetHomme sont dfinis commedes variables structures ayant le type article.

  • 7/27/2019 Aide-Mmoire de C++

    127/221

  • 7/27/2019 Aide-Mmoire de C++

    128/221

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    Chapitre 7

    Les classes

    7.1 RAPPELS SUR LA PROGRAMMATION

    OBJET

    La programmation oriente objet (POO) apporte une amlioration de la

    fiabilit du code et une rutilisation possible des lments dun dve-

    loppement.Elle repose sur quatre grands concepts ou principes :

    lencapsulation ;

    les classes ;

    lhritage ;

    le polymorphisme.

    Un objet est un composant logiciel avec lequel on va manipuler des

    donnes et des fonctions qui vont apporter des fonctionnalits au

    programme.

    ~, ::, class, private, protected, public, static

    Oprateurs, mots-cls et fonctions

  • 7/27/2019 Aide-Mmoire de C++

    129/221

    116 7 Les classes

    Par lintermdiaire de lencapsulation, un objet va pouvoir treutilis tout en masquant son fonctionnement interne.

    lintrieur dun objet on trouve des informations concernant les

    donnes qui sont dfinies en C++, comme tant des attributs et desfonctions de traitement des donnes dnommes mthodes.Les attributs et les mthodes sont appels des membres de lobjet.Une classe peut tre vue comme une structure (voir chapitre 6)

    possdant des fonctions en plus des champs habituels.Un objet est obtenu par linstanciation dune classe. Cette instancia-

    tion nest autre que sa dclaration.Lhritage ou drivation autorise la cration de sous-classe partir

    dune autre classe (dite aussi super-classe ou sur-classe).Lepolymorphisme permet tout objet instancidune classe anctre

    dtre remplac par un objet dune classe descendante de la classeanctre. Par exemple, si nous possdons deux objets instancis desclasses anctres rectangle et triangle, nous pouvons dfinir un objet(instance) dune classe polygone qui pourra manipuler des rectangleset des triangles. Nous avons donc dfini unpolymorphisme dobjets.

    Note : ces notions sont loin dtre compltes, jinvite le lecteur quivoudrait approfondir ces notions consulter la bibliographie de cetouvrage.

    7.2 LES CLASSES

    La manipulation dobjets va ncessiter la cration de classes. Une

    classe dfinie la structure dun objet.Le mot-cl retenu est class.Une classe va contenir des donnes, appeles donnes membres et

    des traitements appels traitements membres.Les donnes membres sont des variables qui sont ranges lint-

    rieur dune classe. Comme toutes variables, elles doivent tre prc-des de leur type et possder un nom. On regroupe ensuite ces variablessous une tiquette qui mentionne laporte, cest--dire laccs que leprogramme pourra avoir vis--vis de cette donne.

  • 7/27/2019 Aide-Mmoire de C++

    130/221

    7.2 Les classes 117

    D

    u

    nodLaphotocopienonautorise

    estundlit.

    class nomclasse{

    ...

    } ;

    Il y a trois tiquettes possibles que lon appelle aussi des qualificatifs

    daccs :

    private : elle dfinit un accs aux membres seulement depuis lint-

    rieur de la classe ;

    public : elle dfinit un accs aux membres seulement depuis lext-

    rieur de la classe ;

    protected : elle dfinit un accs aux membres seulement aux classes

    drives ou amies (voir chapitre 8).

    Lexemple