Franois Laroussinie c
Dept. dInformatique, ENS de Cachan
2 novembre 2005
Introduction
Introduction
Algorithme et programmation
Algorithme: mthode pour rsoudre un probl`me e e e Pour un probl`me donn, il peut y avoir plusieurs e e algorithmes. . . ou aucun ! NB: pour la plupart des probl`mes intressants, il nexiste pas e e dalgorithme (ni aujourdhui, ni demain !) Dans les probl`mes qui restent, la grande majorit ont des e e algorithmes beaucoup trop durs pour tre utiliss ! e e On cherche des algorithmes simples, ecaces, lgants. . . ee Programme: . . . sadresse ` une machine ! a
Introduction
Le langage C++
Dbut en 1983. e Amlioration du langage C: e Abstraction de donnes e Programmation oriente objet e Programmation gnrique e e tr`s utilis ! e e
Introduction
Programmer
Une fois trouv lalgorithme, programmer en C++ comporte 3 e phases: 1. Editer le programme avec votre diteur de texte favori. . . e
Introduction
Programmer
Une fois trouv lalgorithme, programmer en C++ comporte 3 e phases: 1. Editer le programme avec votre diteur de texte favori. . . e 2. Compiler le programme (avec g++)
Introduction
Programmer
Une fois trouv lalgorithme, programmer en C++ comporte 3 e phases: 1. Editer le programme avec votre diteur de texte favori. . . e 2. Compiler le programme (avec g++) 3. Excuter le programme e
Introduction
Programmer
Une fois trouv lalgorithme, programmer en C++ comporte 3 e phases: 1. Editer le programme avec votre diteur de texte favori. . . e 2. Compiler le programme (avec g++) 3. Excuter le programme e ... 4. TESTER et DEBUGGER : retour au point 1 ! Ca peut durer assez longtemps...
Introduction
Un exemple
Linvitable hello world: e
#i n c l u d e <i o s t r e a m > u s i n g namespace s t d ; i n t main ( ) { c o u t << h e l l o w o r l d ! << e n d l ; }
Dmo... e
Plan
Plan
2 3 4 5 6 7 8 9 10 11 12 13
Types, variables... Expressions Instructions Entres - Sorties e Exemples Evaluation des expressions Structure gnrale dun programme C++ e e Procdures et fonctions e Rcursivit e e Complments sur les fonctions e Porte, visibilit, dure de vie des variables e e e Complments e
Plan
Programmation
Les briques de base du langage: Ce qui permet de stocker des donnes: types, variables, e tableaux, etc. Les expressions qui permettent de manipuler les donnes. e Les instructions pour construire les algorithmes.
Types, variables...
Plan
2 3 4 5 6 7 8 9 10 11 12 13
Types, variables... Expressions Instructions Entres - Sorties e Exemples Evaluation des expressions Structure gnrale dun programme C++ e e Procdures et fonctions e Rcursivit e e Complments sur les fonctions e Porte, visibilit, dure de vie des variables e e e Complments e
Types, variables...
Types lmentaires ee
int : entiers (au min 16 bits, pour des valeurs 32767) (dautres formats existent: long int (min 32 bits), short int, unsigned int) . . . (float), double et long double : nombres ` virgule a ottante (en gnral 15 chires sign. pour double). e e Par ex. 23.3 ou 2.456e12 ou 23.56e 4 char : caract`res (a,b,. . . A,. . . ,:,. . . ). e bool : boolens (true ou false). e (Et: 0 false ; tout entier non nul quivaut ` false) e a (Et aussi: des types particuliers pour les tailles de tableaux, de cha nes de caract`res, dobjets etc. size t, ::size type) e
Types, variables...
Dnition de variable e
Syntaxe : type v ; int p ; double x ; Toute variable doit tre dnie avant dtre utilise ! e e e e Une dnition peut appara nimporte o` dans un e tre u programme. Une variable est dnie jusqu` la n de la premi`re instruction e a e e e compose (marque par }) qui contient sa dnition. e (Une variable dnie en dehors de toute fonction et de tout e espace de nom est une variable globale).
Types, variables...
Dnition de variable e
Une variable peut tre initialise lors de sa dclaration, deux e e e notations sont possibles : int p=34 ; double x=12.34 ; int p (34) ; double x (12.34) ;
Une variable dun type lmentaire qui nest pas initialise, na pas ee e de valeur dnie: elle peut contenir nimporte quoi. e
Types, variables...
Constantes symboliques
Syntaxe : const type nom = val; Par exemple: const int Taille = 100 ; Il ne sera pas possible de modier Taille dans le reste du programme (erreur ` la compilation). . . a
Types, variables...
Types, variables...
Tableaux
Pour utiliser la classe vector, il faut placer en tte du chier : e # include <vector> Un tableau est typ: e vector<int> Tab(100,5) ; vector<int> Tab(50) ; vector<double> T ; Structure gnrale: vector< type > Nom(n,v ) ; e e vector< type > Nom1 = Nom2 ; les valeurs de Nom2 sont alors recopies dans Nom1. e T.size() correspond ` la taille de T. a NB: size() renvoie en fait un entier non sign, son type e exact est vector<type>::size type
Types, variables...
Tableaux
T[i] dsigne le i-`me lment avec i = 0, . . . T.size()-1. e e ee vector<vector<int> > T dnit un tableau ` deux e a dimensions. Pour linitialiser, on peut utiliser linstruction suivante : vector<vector<int> > T2(100,vector<int>(50,1)) ; . . . on initialise chacune des 100 cases de T1 avec un tableau de taille 50 rempli de 1.
Expressions
Plan
2 3 4 5 6 7 8 9 10 11 12 13
Types, variables... Expressions Instructions Entres - Sorties e Exemples Evaluation des expressions Structure gnrale dun programme C++ e e Procdures et fonctions e Rcursivit e e Complments sur les fonctions e Porte, visibilit, dure de vie des variables e e e Complments e
Expressions
Aectation
En C/C++, laectation est une expression: Soient v une variable (au sens large) et expr une expression. v = expr aecte la valeur de expr ` la variable v et retourne la a valeur aecte ` v comme rsultat. e a e Par exemple, i = (j = 0) aecte 0 ` j puis ` i et retourne 0 !! a a
Expressions
Oprateurs classiques e
Oprateurs arithmtiques: e e *, +, -, / (division enti`re et relle), % (modulo) e e Oprateurs de comparaison e < (infrieur), <= (infrieur ou gal), == (gal), > (suprieur), e e e e e >= (suprieur ou gal) et != (dirent) e e e Oprateurs boolens e e && reprsente loprateur ET, || reprsente le OU, et ! e e e reprsente le NON. e Par exemple, ((x<12) && ((y>0) || !(z>4)))
Expressions
Pr et Post incrment e e
++var incrmente la variable var et retourne la nouvelle valeur. e (++i quivaut ` i=i+1) e a var ++ incrmente la variable var et retourne lancienne valeur. e (i++ quivaut ` (i=i+1)-1) e a En dehors dune expression, i++ et ++i sont donc quivalentes. e
Expressions
Pr et Post dcrment e e e
Lexpression --var dcrmente la variable var et retourne la e e nouvelle valeur. Lexpression var -- dcrmente la variable var et retourne e e lancienne valeur.
Instructions
Plan
2 3 4 5 6 7 8 9 10 11 12 13
Types, variables... Expressions Instructions Entres - Sorties e Exemples Evaluation des expressions Structure gnrale dun programme C++ e e Procdures et fonctions e Rcursivit e e Complments sur les fonctions e Porte, visibilit, dure de vie des variables e e e Complments e
Instructions
Instructions usuelles
dnition de variables, fonctions, types etc. e expr ; { liste dinstructions } : instruction compose. e if (expr ) instr if (expr ) instr1 else instr2 if (v == 3) i =i+4 ; if ((v==3) && (i<5)) { i=i+4 ; v=v*2 ;} else v=i ; r = r*3 ;
Instructions
La boucle FOR
for (expr1 ;expr2 ;expr3 ) instr
) ( ' & # & " ! % $ #
Ex: for(i=0 ;i<235 ;i=i+1) cout << T[i] ; for(i=0,j=1 ;i<235 ;i=i+1,j=j+3) cout << T[i][j] ;
Instructions
La boucle WHILE
while (expr ) instr
Instructions
La boucle DO
do instr while (expr ) ;
Entres - Sorties e
Plan
2 3 4 5 6 7 8 9 10 11 12 13
Types, variables... Expressions Instructions Entres - Sorties e Exemples Evaluation des expressions Structure gnrale dun programme C++ e e Procdures et fonctions e Rcursivit e e Complments sur les fonctions e Porte, visibilit, dure de vie des variables e e e Complments e
Entres - Sorties e
Acher ` lcran a e
Pour utiliser les entres/sorties, il faut ajouter: e # include <iostream> Syntaxe : cout < < expr1 < < . . . < < exprn ; Cette instruction ache expr1 puis expr2 . . . Acher un saut de ligne se fait au moyen de cout < < endl. int i=45 ; cout << "la valeur de i est " << i << endl ;
Entres - Sorties e
Acher ` lcran a e
Syntaxe : cout < < expr1 < < . . . < < exprn ; cout (ou std::cout) dsigne le ot de sortie standard. e < < est un oprateur binaire: e
le premier oprande est cout (de type ot de sortie) e le second oprande est lexpression ` acher e a le rsultat est de type ot de sortie e
< < est associatif de gauche ` droite a < < est surcharg (ou sur-dni): on utilise le mme oprateur e e e e pour acher des caract`res, des entiers, des rels ou des e e cha nes de caract`res etc. e
Entres - Sorties e
Lire au clavier
Syntaxe : cin > > var1 > > . . . > > varn ; Cette instruction lit (au clavier) des valeurs et les aecte ` var1 a puis var2 . . . cin est le ot dentre standard, et > > est un oprateur similaire ` e e a < <. Les caract`res taps au clavier sont enregistrs dans un buer dans e e e lequel les cin viennent puiser des valeurs. Les espaces, les tabulations et les ns de lignes sont des sparateurs. e
Exemples
Plan
2 3 4 5 6 7 8 9 10 11 12 13
Types, variables... Expressions Instructions Entres - Sorties e Exemples Evaluation des expressions Structure gnrale dun programme C++ e e Procdures et fonctions e Rcursivit e e Complments sur les fonctions e Porte, visibilit, dure de vie des variables e e e Complments e
Exemples
Exemples...
Plan
2 3 4 5 6 7 8 9 10 11 12 13
Types, variables... Expressions Instructions Entres - Sorties e Exemples Evaluation des expressions Structure gnrale dun programme C++ e e Procdures et fonctions e Rcursivit e e Complments sur les fonctions e Porte, visibilit, dure de vie des variables e e e Complments e
Dans e1 && e2, la sous-expression e2 nest value que si e1 e e a t value ` true. eee e a if (i >=0 && T[i] > 20) blabla Dans e1 || e2, la sous-expression e2 nest value que si e1 e e a t value ` false. eee e a if (i<0 || T[i] > 20) blabla
Plan
2 3 4 5 6 7 8 9 10 11 12 13
Types, variables... Expressions Instructions Entres - Sorties e Exemples Evaluation des expressions Structure gnrale dun programme C++ e e Procdures et fonctions e Rcursivit e e Complments sur les fonctions e Porte, visibilit, dure de vie des variables e e e Complments e
Un programme C++ est rparti dans un ou plusieurs chiers. e Chacun peut contenir des dnitions/dclarations de fonctions, des e e dnitions de types et des dnitions de variables globales. e e Il existe une seule fonction main: cest la fonction qui sera excute apr`s la compilation. e e e Le prol de main est : int main() ou int main( int argc, char ** argv ) pour passer des arguments. Exemple de programme complet. . .
Procdures et fonctions e
Plan
2 3 4 5 6 7 8 9 10 11 12 13
Types, variables... Expressions Instructions Entres - Sorties e Exemples Evaluation des expressions Structure gnrale dun programme C++ e e Procdures et fonctions e Rcursivit e e Complments sur les fonctions e Porte, visibilit, dure de vie des variables e e e Complments e
Procdures et fonctions e
Dnition de fonction e
type nom( liste des param`tres) { corps } e type est le type du rsultat de la fonction. e (void si il sagit dune procdure) e La liste des param`tres (param`tres formels): e e type1 p1, ..., typen pn Le corps dcrit les instructions ` eectuer. e a Le corps utilise ses propres variables locales, les ventuelles e variables globales et les param`tres formels. e Si une fonction renvoie un rsultat, il doit y avoir (au moins) e une instruction return expr ; Dans le cas dune procdure, on peut utiliser: return ; e
Procdures et fonctions e
Exemple
Procdures et fonctions e
nom(liste des arguments) La liste des arguments (param`tres rels) est expr1 , expr2 , . . . exprn e e o` chaque expri est compatible avec le type typei du param`tre u e formel pi. Exemple : int k=34, t=5, m ; m = max(k,2*t+5) ;
Procdures et fonctions e
Exemple
int max(int a,int b) {int res=b ; if (a>b) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout<<" z = "<<z ; }
Procdures et fonctions e
Exemple
int max(int a,int b) {int res=b ; if (a>b) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout<<" z = "<<z ; } x y
Procdures et fonctions e
Exemple
int max(int a,int b) {int res=b ; if (a>b) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout<<" z = "<<z ; } x 5 y
Procdures et fonctions e
Exemple
int max(int a,int b) {int res=b ; if (a>b) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout<<" z = "<<z ; } x 5 y 10
Procdures et fonctions e
Exemple
int max(int a,int b) {int res=b ; if (a>b) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout<<" z = "<<z ; } x 5 y 10 z
Procdures et fonctions e
Exemple
int max(int a,int b) {int res=b ; if (a>b) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout<<" z = "<<z ; } x 5 y 10 z a 10 b 5
Procdures et fonctions e
Exemple
int max(int a,int b) {int res=b ; if (a>b) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout<<" z = "<<z ; } res 5 x 5 y 10 z a 10 b 5
Procdures et fonctions e
Exemple
int max(int a,int b) {int res=b ; if (a>b) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout<<" z = "<<z ; } res 10 x 5 y 10 z a 10 b 5
Procdures et fonctions e
Exemple
int max(int a,int b) {int res=b ; if (a>b) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout<<" z = "<<z ; } res 10 x 5 y 10 z a 10 b 5
Procdures et fonctions e
Exemple
int max(int a,int b) {int res=b ; if (a>b) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout<<" z = "<<z ; } x 5 y 10 z 10
Procdures et fonctions e
Exemple
int max(int a,int b) {int res=b ; if (a>b) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout<<" z = "<<z ; } x 5 y 10 z 10 z = 10
Procdures et fonctions e
Exemple
int max(int a,int b) {int res=b ; if (a>b) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout<<" z = "<<z ; } Fin
Procdures et fonctions e
void AfficherTab(vector<int> T) { for (int i=0 ; i< T.size() ; i++) cout << T[i] << " " ; }
Procdures et fonctions e
Procdures et fonctions e
Procdures et fonctions e
Procdures et fonctions e
int Recherche(vector<int> T) { if (T.size()==0) { cout << Erreur ! Tableau vide ! << endl ; return -1 ; } int res=T[0] ; for (int i=1 ; i<T.size() ;i++) if (T[i] > res) res=T[i] ; return res ; }
Procdures et fonctions e
Procdures et fonctions e
int RechercheInd(vector<int> T) { if (T.size()==0) { cout << Erreur ! Tableau vide ! << endl ; return -1 ; } int res=0 ; for (int i=1 ; i<T.size() ;i++) if (T[i] > T[res]) res=i ; return res ; }
Procdures et fonctions e
Un identicateur XXX peut tre utilis ` la ligne l de la dnition e ea e dune fonction F ssi: XXX est une variable dnie dans une instruction compose e e contenant l. XXX est un param`tre de F . e (XXX est une variable globale, i.e. dnie hors de toute e fonction.)
Procdures et fonctions e
Exemple
int max(int a,int b) {int res=b ; if (a>b) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout<<" z = "<<z ; }
Procdures et fonctions e
Exemple
int max(int a,int b) {int res=b ; if (a>b) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout<<" z = "<<z ; } x y
Procdures et fonctions e
Exemple
int max(int a,int b) {int res=b ; if (a>b) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout<<" z = "<<z ; } x 5 y
Procdures et fonctions e
Exemple
int max(int a,int b) {int res=b ; if (a>b) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout<<" z = "<<z ; } x 5 y 10
Procdures et fonctions e
Exemple
int max(int a,int b) {int res=b ; if (a>b) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout<<" z = "<<z ; } x 5 y 10 z
Procdures et fonctions e
Exemple
int max(int a,int b) {int res=b ; if (a>b) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout<<" z = "<<z ; } a 10 b 5
Procdures et fonctions e
Exemple
int max(int a,int b) {int res=b ; if (a>b) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout<<" z = "<<z ; } res 5 a 10 b 5
Procdures et fonctions e
Exemple
int max(int a,int b) {int res=b ; if (a>b) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout<<" z = "<<z ; } res 10 a 10 b 5
Procdures et fonctions e
Exemple
int max(int a,int b) {int res=b ; if (a>b) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout<<" z = "<<z ; } res 10 a 10 b 5
Procdures et fonctions e
Exemple
int max(int a,int b) {int res=b ; if (a>b) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout<<" z = "<<z ; } x 5 y 10 z 10
Procdures et fonctions e
Exemple
int max(int a,int b) {int res=b ; if (a>b) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout<<" z = "<<z ; } x 5 y 10 z 10 z = 10
Procdures et fonctions e
Exemple
int max(int a,int b) {int res=b ; if (a>b) res = a ; return res ; } ... int main() { int x,y ; x=5 ; y=10 ; int z = max(y,x) ; cout<<" z = "<<z ; } Fin
Procdures et fonctions e
Par dfaut, les param`tres dune fonction sont initialiss par une e e e copie des valeurs des param`tres rels. e e Modier la valeur des param`tres formels dans le corps de la e fonction ne change pas la valeur des param`tres rels. e e
Procdures et fonctions e
Essai de permutation
void permut(int a,int b) {int aux = b ; b = a; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout<<" x = "<<x ; }
Procdures et fonctions e
Essai de permutation
void permut(int a,int b) {int aux = b ; b = a; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout<<" x = "<<x ; } y x
Procdures et fonctions e
Essai de permutation
void permut(int a,int b) {int aux = b ; b = a; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout<<" x = "<<x ; } y x 5
Procdures et fonctions e
Essai de permutation
void permut(int a,int b) {int aux = b ; b = a; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout<<" x = "<<x ; } y 10 x 5
Procdures et fonctions e
Essai de permutation
void permut(int a,int b) {int aux = b ; b = a; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout<<" x = "<<x ; } y 10 x 5
Procdures et fonctions e
Essai de permutation
void permut(int a,int b) {int aux = b ; b = a; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout<<" x = "<<x ; } y 10 a 10 b 5 x 5
Procdures et fonctions e
Essai de permutation
void permut(int a,int b) {int aux = b ; b = a; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout<<" x = "<<x ; } y 10 a 10 b 5 aux 5 x 5
Procdures et fonctions e
Essai de permutation
void permut(int a,int b) {int aux = b ; b = a; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout<<" x = "<<x ; } y 10 a 10 b 10 aux 5 x 5
Procdures et fonctions e
Essai de permutation
void permut(int a,int b) {int aux = b ; b = a; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout<<" x = "<<x ; } y 10 a 5 b 10 aux 5 x 5
Procdures et fonctions e
Essai de permutation
void permut(int a,int b) {int aux = b ; b = a; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout<<" x = "<<x ; } y 10 x 5
Procdures et fonctions e
Essai de permutation
void permut(int a,int b) {int aux = b ; b = a; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout<<" x = "<<x ; } x=5 y 10 x 5
Procdures et fonctions e
Essai de permutation
void permut(int a,int b) {int aux = b ; b = a; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout<<" x = "<<x ; }
Procdures et fonctions e
Pour modier la valeur dun param`tre rel dans une fonction, il e e faut passer ce param`tre par rfrence. e ee Une rfrence sur une variable est un synonyme de cette variable, ee cest-`-dire une autre mani`re de dsigner le mme emplacement a e e e de la mmoire. e On utilise le symbole & pour la dclaration dune rfrence: e ee Dans la liste des param`tres de la dnition dune fonction, type & e e pi dclare le param`tre pi comme tant une rfrence sur le i eme e e e ee param`tre rel vi . e e
Procdures et fonctions e
Permutation
void permut(int & a,int & b) {int aux = b ; b = a; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout<<" x = "<<x ; }
Procdures et fonctions e
Permutation
void permut(int & a,int & b) {int aux = b ; b = a; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout<<" x = "<<x ; } x y
Procdures et fonctions e
Permutation
void permut(int & a,int & b) {int aux = b ; b = a; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout<<" x = "<<x ; } x 5 y
Procdures et fonctions e
Permutation
void permut(int & a,int & b) {int aux = b ; b = a; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout<<" x = "<<x ; } x 5 y 10
Procdures et fonctions e
Permutation
void permut(int & a,int & b) {int aux = b ; b = a; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout<<" x = "<<x ; } x 5 y 10
Procdures et fonctions e
Permutation
void permut(int & a,int & b) {int aux = b ; b = a; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout<<" x = "<<x ; } b x 5 a y 10
Procdures et fonctions e
Permutation
void permut(int & a,int & b) {int aux = b ; b = a; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout<<" x = "<<x ; } aux 5 b x 5 a y 10
Procdures et fonctions e
Permutation
void permut(int & a,int & b) {int aux = b ; b = a; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout<<" x = "<<x ; } aux 5 b x 10 a y 10
Procdures et fonctions e
Permutation
void permut(int & a,int & b) {int aux = b ; b = a; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout<<" x = "<<x ; } aux 5 b x 10 a y 5
Procdures et fonctions e
Permutation
void permut(int & a,int & b) {int aux = b ; b = a; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout<<" x = "<<x ; } x 10 y 5
Procdures et fonctions e
Permutation
void permut(int & a,int & b) {int aux = b ; b = a; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout<<" x = "<<x ; } x 10 y 5
x = 10
Procdures et fonctions e
Permutation
void permut(int & a,int & b) {int aux = b ; b = a; a = aux ; } ... int main() { int x,y ; x=5 ; y=10 ; permut(y,x) ; cout<<" x = "<<x ; } Fin
Procdures et fonctions e
Il faut que les param`tres rels soient compatibles avec un e e passage par rfrence. . . ee permut(x,5) nest pas possible ! Usage bizarre des rfrences dans la liste des param`tres: ee e const type & p Ide: le passage par rfrence est plus ecace que le passage e ee par valeur car il vite la recopie des arguments car seule e ladresse mmoire de largument est communique ` la e e a fonction.
Procdures et fonctions e
Exercice . . .
Procdures et fonctions e
Exercice . . .
Algorithmes de tri Comment trier un tableau dentiers ? rechercher le plus grand lment et le placer ` la n du tableau ee a recherche le deuxi`me plus grand et le placer en e avant-derni`re position e etc.
Procdures et fonctions e
Exercice . . .
Algorithmes de tri Comment trier un tableau dentiers Tab ? Pour IndFin = Tab.size()-1 ... 1 faire rechercher lindice IMAX du plus grand lment de Tab entre ee les indices 0 ` IndFin. a Permuter les lments placs en IMAX et IndFin. ee e
Procdures et fonctions e
Exercice . . .
Algorithmes de tri Comment trier un tableau dentiers Tab ? Pour IndFin = Tab.size()-1 ... 1 faire rechercher lindice IMAX du plus grand lment de Tab entre ee les indices 0 ` IndFin. a Permuter les lments placs en IMAX et IndFin. ee e A la premi`re tape, on slectionne le plus grand lment et on le e e e ee place ` la n du tableau ; puis on trouve le deuxi`me plus grand et a e on le place ` lavant-derni`re place etc. a e
Procdures et fonctions e
Fonction de slection e
int RechercheInd(vector<int> T, int imax) { if (T.size() < imax-1) { cout << "Erreur ! Tableau trop petit ! " << endl ; return -1 ; } int res=0 ; for (int i=1 ; i<= imax ;i++) if (T[i] > T[res]) res=i ; return res ; }
Procdures et fonctions e
Fonction de slection e
vector<int> Trier(vector<int> T) { vector<int> Taux = T ; int aux ; for (int i=Taux.size()-1 ; i>0 ; i--) { aux = RechercheInd(Taux,i) ; Permuter(Taux[aux],Taux[i]) ; } return Taux ; }
Procdures et fonctions e
Fonction de slection e
Procdures et fonctions e
Fonction de slection e
Tri in situ avec passage par rfrence ee void Trier(vector<int> & T) { int aux ; for (int i=T.size()-1 ; i>0 ; i--) { aux = RechercheInd(Taux,i) ; Permuter(T[aux],T[i]) ; } }
Rcursivit e e
Plan
2 3 4 5 6 7 8 9 10 11 12 13
Types, variables... Expressions Instructions Entres - Sorties e Exemples Evaluation des expressions Structure gnrale dun programme C++ e e Procdures et fonctions e Rcursivit e e Complments sur les fonctions e Porte, visibilit, dure de vie des variables e e e Complments e
Rcursivit e e
Fonctions rcursives e
Rcursivit e e
void Hanoi(int nb,int p1, int p2) { if (nb > 0) { int p3 = 6-p1-p2 ; Hanoi(nb-1,p1,p3) ; cout << "On bouge le Pion " << nb << " vers " << p2 ; Hanoi(nb-1,p3,p2) ; } }
Plan
2 3 4 5 6 7 8 9 10 11 12 13
Types, variables... Expressions Instructions Entres - Sorties e Exemples Evaluation des expressions Structure gnrale dun programme C++ e e Procdures et fonctions e Rcursivit e e Complments sur les fonctions e Porte, visibilit, dure de vie des variables e e e Complments e
On peut attribuer des valeurs par dfaut aux param`tres dune e e fonction. int max(int a,int b =0) { if (a>b) return a ; else return b ; }
Recherche dichotomique
int RechDicho(vector<double> Tab,int bg, int bd,double x) { if (bg > bd) return -1 ; int M = (bg+bd)/2 ; if (Tab[M]==x) return M ; if (Tab[M] > x) return RechDicho(Tab,bg,M-1,x) ; else return RechDicho(Tab,M+1,bd,x) ; } int Recherche(vector<double> Tab,double x) { int taille = Tab.size() ; if (taille == 0) return -1 ; return RechDicho(Tab,0,taille-1,x) ; }
Recherche dichotomique
int Recherche(vector<double> Tab, double x, int bg =-1, int bd =-1) { if((bg==-1)&&(bd ==-1)) return Recherche(Tab,x,0,Tab.size()-1) ; if (bg > bd) return -1 ; int M = (bg+bd)/2 ; if (Tab[M]==x) return M ; if (Tab[M] > x) return Recherche(Tab,x,bg,M-1) ; else return Recherche(Tab,x,M+1,bd) ; } Appel directement avec: Recherche(T,10.3)
Fonctions inline
Pour de petites fonctions, il peut tre plus ecace (= rapide) e dviter un appel de fonction et ` la place, expanser le corps de la e a fonction en lieu et place de chaque appel. Cest possible avec le mot cl inline. e inline int max(int a,int b =0) { if (a>b) return a ; else return b ; }
Le tri fusion
Principe: Pour trier un tableau T entre les indices a et b: On trie entre a et On trie entre
a+b 2 a+b 2
et b
void Tri fusion(vector<int> & T,int bg =-1, int bd =-1) { if ((bg==-1) && (bd==-1)) { bg=0 ; bd=int(T.size()) -1 ; } int k ; if (bg < bd) { k = (bg+bd)/2 ; Tri fusion(T,bg,k) ; Tri fusion(T,k+1,bd) ; Fusion(T,bg,k,bd) ; }
Plan
2 3 4 5 6 7 8 9 10 11 12 13
Types, variables... Expressions Instructions Entres - Sorties e Exemples Evaluation des expressions Structure gnrale dun programme C++ e e Procdures et fonctions e Rcursivit e e Complments sur les fonctions e Porte, visibilit, dure de vie des variables e e e Complments e
La porte dun identicateur correspond aux parties du programme e o` cet identicateur peut tre utilis sans provoquer derreur ` la u e e a compilation. La porte dune variable globale ou dune fonction globale est gale e e au programme. e a La porte dune variable locale va de sa dnition jusqu` la n de e la premi`re instruction compose ({...}) qui contient sa dnition. e e e Deux variables peuvent avoir le mme nom mais dans ce cas, elle e doivent avoir deux ports direntes. e e
Porte e
{ int i=3 ; { int i=5 ; cout << i ; // affiche 5 } cout << i ; // affiche 3 } Les deux variables ont des portes direntes ! e e Exemple. . .
Visibilit e
La visibilit dune variable dit quand elle est accessible e La visibilit est inclue dans la porte... e e La dure de vie dune variable correspond ` la priode depuis e a e cration ` sa destruction. e a Dure de vie et porte co e e ncident pour toutes les variables que nous avons voques jusquici. e e mais . . .
Variables static
Lespace mmoire dune variable locale dclare static est allou e e e e une seule fois et nest dtruit qu` la n du programme ! e a void Test(int v) { static int compteur=0 ; compteur++ ; cout << compteur << "-eme appel de Test"<< endl ; cout << " v = " << v << endl ; } Sa dure de vie est celle du programme. e
Hanoi (suite)
Obj: compter le nombre dappels ` la procdure Hanoi. a e void Hanoi(int nb,int p1, int p2, int affichage=0) { static int NB = 0 ; NB++ ; if (affichage == 1) { cout << NB << " appels de Hanoi " return ; } if (nb > 0) { int p3 = 6-p1-p2 ; Hanoi(nb-1,p1,p3) ; cout << "On bouge le Pion " << nb << " vers le piquet " << p2 << endl ; Hanoi(nb-1,p3,p2) ; } }
Espace de noms
Un programme important utilise de nombreuses biblioth`ques, e fonctions etc. Pour viter les probl`mes de conit de noms, on e e utilise des espaces de noms (namespace) : on associe un nom ` un ensemble de variables, types, a fonctions. leur nom complet est: leur nom despace suivi de :: et de leur nom. Ex. la fonction int fct(){...} dnie dans le domaine A e aura pour nom complet A::fct() Les noms complets de cout et cin sont std::cout et std::cin. Pour viter dcrire les noms complets , on utilise: e e using namespace std ;
namespace toto { int N = 10 ; int Test() { cout << "test... " ; } } Les objets N et Test ont pour nom toto::N et toto::Test
Complments e
Plan
2 3 4 5 6 7 8 9 10 11 12 13
Types, variables... Expressions Instructions Entres - Sorties e Exemples Evaluation des expressions Structure gnrale dun programme C++ e e Procdures et fonctions e Rcursivit e e Complments sur les fonctions e Porte, visibilit, dure de vie des variables e e e Complments e
Complments e
Complments - 1 e
Instructions supplmentaires: e break provoque larrt de la premi`re instruction do, for, e e switch ou while englobant. continue provoque (dans une instruction do, for, ou while) larrt de litration courante et le passage au dbut de e e e litration suivante. e switch (exp) { case cste1 : liste dinstructions1 ... case csten : liste dinstructionsn default: liste dinstructions }
Complments e
Complments - 2 e
(exp) ? exp1 : exp2 vaut exp1 si exp est value ` vrai et e e a exp2 sinon. m = (i < j) ? i : j var op = expr dsigne lexpression var = var op expr e (op {+,-,*,/,%}) int i=2,j=34 ; int i=2,j=34 ; i += 2 ; i = i+2 ; j *= 10 ; j = j*10 ; j *= (i++) ; j = j*i ; i = i+1 ;
Complments e
Complments - 2 e
(exp) ? exp1 : exp2 vaut exp1 si exp est value ` vrai et e e a exp2 sinon. m = (i < j) ? i : j var op = expr dsigne lexpression var = var op expr e (op {+,-,*,/,%}) int i=2,j=34 ; int i=2,j=34 ; i += 2 ; i = i+2 ; j *= 10 ; j = j*10 ; j *= (i++) ; j = j*i ; i = i+1 ; A la n, on a: i==5 et j==1360
Introduction
Plan
14
Introduction Regroupement de donnes e Classes C++ Champs et mthodes e Constructeurs et destructeurs Fonctions amies Conversions entre types Surcharge doprateurs e
15
16
17
Introduction
Introduction
Un algorithme nutilise pas que des objets de type int, double ou bool... tats et transitions lorsquon parle de graphes. e Piquet et pions pour Hanoi Fractions Piles Un programme doit coller ` lalgorithme ! a
Introduction
De nouveaux types
Il faut pouvoir dnir de nouveaux types de donnes. e e Dnir des variables de ce types, les manipuler dans les fonctions e etc.
Introduction
De nouveaux types
Il faut pouvoir dnir de nouveaux types de donnes. e e Dnir des variables de ce types, les manipuler dans les fonctions e etc. Un type de donnes = regroupement de donnes + des oprations e e e Comme les types de base !
Regroupement de donnes e
Plan
14
Introduction Regroupement de donnes e Classes C++ Champs et mthodes e Constructeurs et destructeurs Fonctions amies Conversions entre types Surcharge doprateurs e
15
16
17
Regroupement de donnes e
Regroupement de donnes e
Regroupement de donnes e
Regroupement de donnes e
Exemple: une base de donnes pour les notes des tudiants. e e Chaque che dtudiant contient : e un nom et un prnom e un numro dinscription e un ensemble de notes Une base de donnes pour une promo = un ensemble de ches e
Regroupement de donnes e
Fiche dtudiants. . . e
Regroupement de donnes e
Fiche dtudiants. . . e
Regroupement de donnes e
fiche est un type comme les autres: fiche F ; dnit une variable F de type che. e Une che contient plusieurs parties (champs), on y acc`de par leur e nom prcd dun point . : e e e F.Nom dsigne le champ (de type string) Nom de la che F. e F.Notes[i] dsigne le champ (de type double) Notes[i] de la e che F. etc.
Regroupement de donnes e
Regroupement de donnes e
v . Prenom <<
demo 1-2-3
Regroupement de donnes e
Les struct
On utilise le type dni pat un struct comme nimporte quel e autre type: dans les fonctions (param`tre ou rsultat), les variables, e e les tableaux etc. Les aectations (param`tres de fonction, variable, etc.) se font e champ ` champ. a
Classes C++
Plan
14
Introduction Regroupement de donnes e Classes C++ Champs et mthodes e Constructeurs et destructeurs Fonctions amies Conversions entre types Surcharge doprateurs e
15
16
17
Classes C++
Lorsquon dnit un type de donnes, on fournit des fonctions de e e manipulation et impose leur usage: les dtails dimplmentation e e nont pas ` tre connus par lutilisateur. ae e e On veut donc orir une interface et protger certaines donnes. Les classes permettent de regrouper des donnes e associer des fonctions aux objets de la classe restreindre lacc`s ` certaines donnes e a e
Classes C++
Fichier dtudiants e
On veut construire des bases de donnes pour stocker les ches e dtudiants de chaque promo. e Pour chaque promo, on veut disposer des fonctions suivantes: saisir les noms, prnoms et numros des tudiants : e e e (initialisation de la base) saisir des notes pour un tudiant e acher les notes dun tudiant e acher la moyenne dun tudiant e acher la moyenne pour un cours acher la moyenne gnrale e e
Classes C++
Fichier dtudiants e
On veut construire des bases de donnes pour stocker les ches e dtudiants de chaque promo. e Pour chaque promo, on veut disposer des fonctions suivantes: saisir les noms, prnoms et numros des tudiants : e e e (initialisation de la base) saisir des notes pour un tudiant e acher les notes dun tudiant e acher la moyenne dun tudiant e acher la moyenne pour un cours acher la moyenne gnrale e e Et cest tout !
Classes C++
Fichier dtudiants e
Chaque promo doit contenir les donnes suivantes: e le nombre dtudiants e le nombre de cours la liste des cours la che de chaque tudiant e
Classes C++
Fichier dtudiants e
On int`gre donc les donnes suivantes dans une promo: e e
c l a s s Promo { private : i n t Nbc ; i n t Nbe ; v e c t o r <s t r i n g > C o u r s ; v e c t o r <F i c h e E t u d i a n t > E t u d i a n t s ; ... };
Classes C++
On va utiliser une autre approche que celle prsente dans la partie e e A. On va protger certains aspects du type Promo: la structure e interne, le nom des champs... On va dnir des fonctions particuli`res (fonctions membre, e e mthodes) qui seules pourront accder ` la partie cache du e e a e type Promo. Ces mthodes seront linterface de la classe. e On les dnit dans la classe. e
Classes C++
Classes C++
Classes C++
Initialisation
c l a s s Promo { private : i n t Nbc ; i n t Nbe ; v e c t o r <s t r i n g > C o u r s ; v e c t o r <F i c h e E t u d i a n t > E t u d i a n t s ; public : void I n i t i a l i s a t i o n ( ) ; void SaisieNotes ( int n ) ; void AfficheNotesE ( i n t n ) ; d o u b l e MoyenneE ( i n t n ) ; d o u b l e MoyenneC ( i n t c ) ; d o u b l e MoyenneG ( ) ; };
Classes C++
Initialisation
v o i d Promo : : I n i t i a l i s a t i o n ( ) { c o u t << Nb d e t u d i a n t s : ; c i n >> Nbe ; c o u t << Nb de c o u r s : ; c i n >> Nbc ; C o u r s = v e c t o r <s t r i n g >(Nbc ) ; E t u d i a n t s = v e c t o r <F i c h e E t u d i a n t >(Nbe ) ; f o r ( i n t i =0; i < Nbc ; i ++) { c o u t << C o u r s << i << : ; c i n >> C o u r s [ i ] ; } f o r ( i n t i =0; i <Nbe ; i ++) { c o u t << Nom : ; c i n >> E t u d i a n t s [ i ] . Nom ; c o u t << Prenom : ; c i n >> E t u d i a n t s [ i ] . Prenom ; c o u t << Numero : ; c i n >> E t u d i a n t s [ i ] . Numero ; E t u d i a n t s [ i ] . N o t e s = v e c t o r <d o u b l e >(Nbc ) ; } }
Classes C++
Constructeurs
Mthodes particuli`res appeles automatiquement ` chaque e e e a dnition dun objet de la classe. e Pour passer des arguments ` un constructeur, il sut de faire a suivre le nom de la variable par la liste des arguments : MaClasse A(i,f) ; Lorsquaucun argument nest donn, le constructeur sans e argument est appel. e Si aucun constructeur nest dni explicitement, le e compilateur cre un constructeur sans argument e MaClasse::MaClasse() qui se contente dappeler les constructeurs (sans argument) de chaque champ de lobjet.
Classes C++
Constructeur copieur
MaClasse (const MaClasse &) : utilis pour le passage des param`tres et les initialisations. e e Si une fonction a un param`tre A du type MaClasse, un appel e de cette fonction avec une variable V de MaClasse conduit ` a linitialisation de A avec V via le constructeur copieur. Lorsquon dnit une variable V et quon linitialise ` une e a valeur E, par linstruction MaClasse V=E ;, on utilise le constructeur copieur. Dirence avec : MaClasse V ; e V=E ; Le constructeur copieur cr par dfaut fait une initialisation ee e champ ` champ avec les champs de largument. a
Classes C++
Constructeur / destructeur
Il existe aussi des destructeurs : on peut dnir un (et un seul) e destructeur qui est appel automatiquement lorsquune variable e locale est dtruite e (surtout utiles pour les structures de donnes dynamiques) e Pour comprendre tous ces mcanismes dappel... e il faut les essayer !! cf. Constructeurs.cc
Classes C++
Fonctions amies
Si une fonction F est amie (friend) dune classe C1, alors F peut accder aux champs privs de C1. e e Si une classe C2 comme est amie de C1, toutes les fonctions membres de C2 peuvent accder aux champs privs de C1. e e Ces dclarations se font dans la dnition de C1 : e e
c l a s s C1 { ... f r i e n d t y p e deF F ( paramdeF ) ; f r i e n d c l a s s C2 ; ... };
Classes C++
Surcharge doprateurs e
Plan
14
Introduction Regroupement de donnes e Classes C++ Champs et mthodes e Constructeurs et destructeurs Fonctions amies Conversions entre types Surcharge doprateurs e
15
16
17
Surcharge doprateurs e
Surcharge doprateurs e
Il est possible de surcharger les oprateurs de C++ (+, -, [ ], =, e ==, . . . ): les arits et les priorits ne changent pas. e e Deux points de vue: fonction globale: A op B est vue comme lapplication dune fonction op ` deux arguments A de type TA et B de a type TB.
f r a c t i o n o p e r a t o r ( f r a c t i o n f , f r a c t i o n g ) { r e t u r n f r a c t i o n ( f . Numerateur ( ) g . Numerateur ( ) , f . Denominateur ( ) g . Denominateur ( ) ) ; } f r a c t i o n o p e r a t o r ( f r a c t i o n f ) { r e t u r n f r a c t i o n ( f . Numerateur ( ) , f . Denominateur ( ) ) ; }
Surcharge doprateurs e
Surcharge doprateurs e
fonction membre: A op B est vue comme lapplication dune fonction op ` un argument B de type TB sur lobjet A a de type TA.
class fraction { private : i n t num , den ; public : ... f r a c t i o n o p e r a t o r (); f r a c t i o n o p e r a t o r ( f r a c t i o n h ) ; }; f r a c t i o n f r a c t i o n : : o p e r a t o r () { r e t u r n f r a c t i o n (num , den ) ; } f r a c t i o n f r a c t i o n : : o p e r a t o r ( f r a c t i o n h ) { r e t u r n f r a c t i o n (numh . num , den h . den ) ; }
Surcharge doprateurs e
Loprateur << ne peut tre surcharg que de mani`re globale. e e e e Prol pour un type T: ostream & << (ostream & , T ) Exemple:
// o s t r e a m & o p e r a t o r <<(o s t r e a m & os , f r a c t i o n f ) { o s << f . Numerateur ( ) << / << f . D e n o m i n a t e u r ( ) ; r e t u r n os ; } //
Pointeurs
Plan
18
Pointeurs Pointeurs et tableaux new et delete structures de donnes dynamiques e Retour sur les classes
19
20
21
22
Pointeurs
Pointeurs
Une variable permet de dsigner par un nom un emplacement e dans la mmoire. e Il est aussi possible de dsigner directement les cases mmoire par e e leur adresse. Un pointeur permet de stocker ces adresses mmoire. e
Pointeurs
Pointeurs, *, &
Un pointeur est typ : on distingue les pointeurs sur un int, e sur un double, sur une fraction etc. Dnir un pointeur: e type * nom ; nom est un pointeur sur type, i.e. pouvant recevoir une adresse dsignant un objet de type type. e &V reprsente ladresse mmoire dune variable V. e e *P dsigne lobjet point par le pointeur P. e e
i n t i , pi , k ; i =3; p i = &i ; // p i p o i n t e s u r i k = ( p i )+5; // i d e n t i q u e ` : a k=i +5 ( p i ) = k +2; // i d e n t i q u e ` : a i = k+2 ( p i )++; // i c i , i =11 , k=8
Pointeurs
Pointeurs et rfrences ee
Au lieu du passage par rfrence, il est possible de passer (par ee valeur) les adresses des arguments dune fonction et de modier les donnes contenues ` ces adresses via loprateur *. e a e Fonction permut :
v o i d permut ( i n t pa , i n t pb ) { i n t aux = ( pa ) ; ( pa ) = ( pb ) ; ( pb ) = aux ; }
Pointeurs et tableaux
Plan
18
Pointeurs Pointeurs et tableaux new et delete structures de donnes dynamiques e Retour sur les classes
19
20
21
22
Pointeurs et tableaux
Tableaux ` la C a
type nom[taille] ; dnit un tableau dlments de type type et de taille taille e ee (indices de 0 ` taille 1). Llment dindice i est dsign par a ee e e nom[i]. Dans int Tab[10], Tab dsigne ladresse de la premi`re case e e du tableau (i.e. &Tab[0]) et le type de Tab est const int *. Quest-ce que Tab[i] ?
Pointeurs et tableaux
Tableaux ` la C a
type nom[taille] ; dnit un tableau dlments de type type et de taille taille e ee (indices de 0 ` taille 1). Llment dindice i est dsign par a ee e e nom[i]. Dans int Tab[10], Tab dsigne ladresse de la premi`re case e e du tableau (i.e. &Tab[0]) et le type de Tab est const int *. Quest-ce que Tab[i] ? cest (*(Tab+i)).
int T[10]; int p; p = &T [ 4 ] ; p [ 0 ] = 100; p [ 1 ] = 200;
// //
q u i v a u t ` T [ 4 ] = 100 e a q u i v a u t ` T [ 5 ] = 100 e a
Pointeurs et tableaux
Pointeurs et tableaux
Passer un tableau C en param`tre dune fonction revient ` e a passer ladresse de la premi`re case passage par rfrence. e ee Pour dclarer un param`tre T de type tableau dentiers, on e e crit: int T[]. e La taille doit tre passe avec un autre param`tre. e e e void Tri(int T[],int taille) autres cha nes de caract`res : tableaux (simples) de caract`res e e se terminant par le caract`re spcial \0. e e char T[8] = "exemple" ; dnit et initialise le tableau T avec T[0]= e, T[1]=x, e . . . , T[7]=\0.
new et delete
Plan
18
Pointeurs Pointeurs et tableaux new et delete structures de donnes dynamiques e Retour sur les classes
19
20
21
22
new et delete
new et delete
obj : allouer et dsallouer de la mmoire sans dpendre la dure de e e e e vie des variables. new type ; alloue un espace mmoire pour contenir un objet e de type type et retourne ladresse ce cette zone mmoire. e P = new type[N] ; alloue un espace mmoire capable de e contenir N objets de type type ... delete P ; dsalloue lespace mmoire dadresse P. e e (ou delete [ ] P ;) Une zone alloue par new nest dsalloue que par lappel de e e e delete. . .
new et delete
Plan
18
Pointeurs Pointeurs et tableaux new et delete structures de donnes dynamiques e Retour sur les classes
19
20
21
22
Le champ suivant contient ladresse du prochain lment de la liste ee (ou 0). On utilise ladresse du premier lment de la liste... ee Parcours de liste, inversion, longueur. . . Listes doublement cha ees, circulaires, . . . n
Plan
18
Pointeurs Pointeurs et tableaux new et delete structures de donnes dynamiques e Retour sur les classes
19
20
21
22
Classes et pointeurs
p->champ raccourci pour (*p).champ p->fct() raccourci pour (*p).fct() Lorsquon alloue de la mmoire pour stocker un objet de type e T, un constructeur est appel : e
soit celui sans argument (dans le cas dun new T), soit un avec argument si des arguments sont prsents ( new e T(a1,...,aN) ;).
Dans la dnition des fonctions membre, on peut accder ` e e a ladresse de lobjet courant: pointeur this.
Complments e
Hritage e Programmation oriente objet e Gnricit (classes, fonctions) e e e GDB Exceptions ...