Post on 14-Apr-2018
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