Académique Documents
Professionnel Documents
Culture Documents
ELy Cours C - 01 1
ELy Cours C - 01 1
1. Classes et objets.
2. Les propriétés des fonctions membres
3. Construction, destruction et initialisation des objets
4. Les fonctions amies
5. La surdéfinition d’opérateurs
6. Les patrons de fonctions et de classes
7. L’héritage simple et multiple
8. Les fonctions virtuelles et le polymorphisme
9. Les flots
10. La gestion des exceptions
11. Généralités sur la bibliothèque standard
cout << "Je vais vous calculer " << NFOIS << " racines carrees\n" ;
cin >> x ;
cin est un « flot d’entrée » associé au clavier
Remarque:
si vous placez l’instruction using avant l’incorporation des
fichiers en-tête, vous obtiendrez une erreur car vous ferez référence
à un espace de noms qui n’a pas encore été défini !).
Comme dans la plupart des langages, ils sont formés d’une suite
de caractères choisis parmi les lettres ou les chiffres, le
premier d’entre eux étant nécessairement une lettre.
Exemple :
/* commentaire traditionnel
sur plusieurs lignes
valide en C et C++
*/
édition du programme,
compilation
et édition de liens.
0 représente faux.
Toute valeur non nulle représente vrai.
Tableau
bool ok = false ;
.....
if (.....) ok = true ;
.....
if (ok) .....
+ - * / %
= = : l’opérateur égal à.
|| : OU logique (or)
+= -= *= /= %=
Exemples:
a = a + b a += b
a = a / b a /= b
a = a * b a *= b
L’ opérateur de préincrémentation
++var var = var + 1
Exemple:
z= ( a>b ? a : b );
a>b ? i++ : j++;
Elyousfi Abderrahmane ENSA-3 39
L’opérateur sizeof
Exemple:
double z ;
49
Condition : if(…) … else if(….) … else…
Type nomtableau[Taille]
Exemple:
char car[10];
int nomb[9];
Exemple:
Exemple:
short A[] = {1200, 2300, 3400, 4500, 5600};
Nom_du_Tableau[indice]
Exemple:
Nom_du_Tableau[indice]
Affichage:
lecture:
Définition:
En C++, un tableau à deux dimensions A est à
interpréter comme un tableau (unidimensionnel) de
taille L dont chaque composante est un tableau
(unidimensionnel) de taille C.
Exemple:
int A[3][5]={{0, 1, 2, 3, 4},
{10, 11, 12, 13, 14},
{20, 21, 22, 23, 24}};
Exemple:
Exemple:
Exemple:
NomTableau[Ligne][Colonne]
main()
{
int i, j;
int Tab[15][15];
for(i=0; i<15; i++)
{
for(j=0; j<15; j++)
{
cin >> Tab[i][j] ;
}
}
return 0;
}
Elyousfi Abderrahmane ENSA-3 86
Affichage
#include<iostream>
using namespace std;
int main()
{
int i, j;
int Tab[15][15];
for(i=0; i<15; i++)
{
for(j=0; j<15; j++)
{
cout << Tab[i][j]) ;
}
}
return 0;
}
Elyousfi Abderrahmane ENSA-3 87
Ex: 1
Soient T1 et T2 deux tableaux de deux dimensions de même taille 8x8.
Ecrire un programme en C++ qui lit les valeurs des éléments du premier
tableau T1 à partir du clavier et qui calcule les valeurs des éléments du
deuxième tableau T2 par la formule suivante:
avec, pour k= i ou j:
1-Ecrire un programme en C qui calcule la valeur SAD de deux tableaux de taille 4x4
(nombre de lignes égal le nombre de colonnes égal à 4).
Adresse Contenu
0123456 0
0123457 17
0123458 0
0123459 129 Valeur entre 0 et 255
0123460 14
Case mémoire
0123461 82
0123462 53
0123463 60
0123464 0
Mémoire
Abderrahm
ane
94 ELYOUSFI
Organisation
Abderrahm
ane
96 ELYOUSFI
Variables
Instructions du programme Mémoire
Abderrahm
ane
97 ELYOUSFI
Variables
Instructions du programme Mémoire
Abderrahm
ane
98 ELYOUSFI
Variables
Instructions du programme Mémoire
Abderrahm
ane
99 ELYOUSFI
Variables
Instructions du programme Mémoire
Abderrahm
ane
100 ELYOUSFI
Variables
Instructions du programme Mémoire
Abderrahm
ane
101 ELYOUSFI
Variables
Instructions du programme Mémoire
Abderrahm
ane
102 ELYOUSFI
Tableaux
Instructions du programme Mémoire
Abderrahm
ane
103 ELYOUSFI
Les pointeurs
Déclaration :
type *pointeur ;
le type est celui des variables auxquelles permet d’accéder le
pointeur Abderrahm
ane
105 ELYOUSFI
Affectation d’un pointeur
Affectation de l’adresse d’une variable :
int x, *px ;
px = &x ;
Abderrahm
ane
106 ELYOUSFI
Affectation d’un pointeur
Zéro
Abderrahm
ane
107 ELYOUSFI
Arithmétique de pointeurs
L’addition et la soustraction fonctionnent comme
avec les adresses…
Abderrahm
ane
108 ELYOUSFI
Opérateur *
Permet d’accéder au contenu d’une variable par un
pointeur :
int x, y, *p ;
x = 10 ;
p = &x ;
y = *p ; /* y doit contenir 10 */
Abderrahm
ane
110 ELYOUSFI
Variables
Instructions du programme Mémoire
*ptr = 1; 0123460 b
0123461
?
b = 2; 0123462
0123463
b = b + *ptr; 0123464 0
Abderrahm
ane
111 ELYOUSFI
Variables
Instructions du programme Mémoire
*ptr = 1; 0123460 b
0123461
1
b = 2; 0123462
0123463
b = b + *ptr; 0123464 0
Abderrahm
ane
112 ELYOUSFI
Variables
Instructions du programme Mémoire
*ptr = 1; 0123460 b
0123461
2
b = 2; 0123462
0123463
b = b + *ptr; 0123464 0
Abderrahm
ane
113 ELYOUSFI
Variables
Instructions du programme Mémoire
*ptr = 1; 0123460 b
0123461
4
b = 2; 0123462
0123463
b = b + *ptr; 0123464 0
Abderrahm
ane
114 ELYOUSFI
Tableaux
Instructions du programme Mémoire
int y=20;
int x = 10;
const int *px = &x; // pointeur de constante
*px = 6; // erreur: pc pointe sur une constante
px = &y; // ok, pointeur pc n’est pas constant
--------------------------------------------------------------------------------------------------
int *const py = &y; // pointeur constant.
*py = 9; // ok
py = px; // erreur: cp n’est pas constant
--------------------------------------------------------------------------------------------------
const int *const pz = &z; // pointeur const de const
pz = 7; // erreur: cpc pointe sur une constante
pz = px; // erreur: cpc est une constante
char s[ ] = “Gorm”;
const char* pc = s; // pointeur de constante
pc[3] = ‘g’; // erreur: pc pointe sur une constante
pc = p; // ok, pointeur pc n’est pas constant
int a=1;
const int c=2;
const int* p1=&c; //ok
const int* p2=&a; //ok
int* p3=&c; // erreur: initialisation de int* avec const int*
*p3 = 7; // tente de modifier la valeur de c
L’opérateur delete
130
La gestion dynamique
L’opérateur new
L’opérateur new réserve l’espace mémoire qu’on lui
demande et l’initialise.
Il retourne:
131
La gestion dynamique
L’opérateur new:
int *ptr1, *ptr2, *ptr3;
132
La gestion dynamique
L’opérateur delete:
L’opérateur delete libère l’espace mémoire alloué par new à
un seul objet, tandis que l’opérateur delete[] libère
l’espace mémoire alloué à un tableau d’objets.
133
La gestion dynamique
Deux opérateurs : new et delete
x=1;
cout << "x= " << x << " y= " << y << endl;
// affichage de : x= 1 y= 1
y=2;
cout << "x= " << x << " y= " << y << endl;
// affichage de : x= 2 y= 2
ptr = &y;
*ptr = 3;
cout << "x= " << x << " y= " << y << endl;
// affichage de : x= 3 y= 3
Elyousfi Abderrahmane ENSA-3 137
Variables références
141
Abderrahm
ane
141 ELYOUSFI
POINTEURS ET TABLEAUX À UNE DIMENSION
142
Abderrahm
ane
142 ELYOUSFI
POINTEURS ET TABLEAUX À UNE DIMENSION
Abderrahm
ane
148 ELYOUSFI
Pointeurs et tableaux à plusieurs dimensions
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
int i, j;
int tab[3][4]= {{1, 2, 3, 4},
{11, 12, 13, 14},
{21, 22, 23, 24}};
for (i = 0; i < 3; i++)
for (j = 0; j < 4; j++)
cout <<tab[i][j]<<"\t tab["<<i<<"]["<<j<<"]\t"<<&tab[i][j];
system("pause");
return 0;
}
Abderrahm
ane
150 ELYOUSFI
Pointeurs et tableaux à plusieurs dimensions
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
int i, j;
int tab[3][4]= {{1, 2, 3, 4},
{11, 12, 13, 14},
{21, 22, 23, 24}};
for (i = 0; i < 3; i++)
cout<<"*(tab["<<i<<"])= " <<*(tab[i])<<"\t tab["<<i<<"]= "<<tab[i]<<"\t &tab["<<i<<"][0]="<< &tab[i][0]);
system("pause");
return 0;
}
Abderrahm
ane
151 ELYOUSFI
Pointeurs et tableaux à plusieurs dimensions
#include <stdio.h>
#include <iostream>
using namespace std;
int main()
{
int i, j;
int tab[3][4]= {{1, 2, 3, 4},
{11, 12, 13, 14},
{21, 22, 23, 24}};
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
cout << *(tab[i]+j);
cout << endl;
}
system("pause");
return 0;
}
int main()
{
int i, j;
int tab[3][4]= {{1, 2, 3, 4},
{11, 12, 13, 14},
{21, 22, 23, 24}};
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
cout << *(*(tab+i)+j);
cout << endl;
}
system("pause");
return 0;
Abderrahm
} ane
153 ELYOUSFI
Pointeurs et tableaux à plusieurs dimensions
Adresse Nom Contenu
tab 0123440
0123442 [1]
0123463
0123443
0123444 ?
….
0123458
1
0123459 [0][1]
0123460
2
0123461 [0][2]
0123462
3
0123463 [1][0]
0123464
11
0123465 [1][1]
0123466
12
0123467 [1][2] Abderrahm
0123468
13 ane
154 ELYOUSFI
Pointeurs et tableaux à plusieurs dimensions
for(i=0; i<N;i++)
{
T[i] = new type[M];
}
int **tableau;
int i, j;
Abderrahm
ane
157 ELYOUSFI
Pointeurs et tableaux à plusieurs dimensions
Abderrahm
ane
158 ELYOUSFI
Pointeurs et tableaux à plusieurs
dimensions
Un tableau à deux dimensions
int **tableau;
int *le_tableau;
int i;
Abderrahm
ane
160 ELYOUSFI
Tableaux de pointeurs
On peut avoir des tableaux d'objets de n'importe
quel type, donc de pointeurs.
type *tp[10];
Abderrahm
ane
161 ELYOUSFI
Tableaux de pointeurs
#include <stdio.h>
#include <iostream>
using namespace std;
main()
{
char *jour[ ]={"lundi", "Mardi", "Mercredi", "Jeudi",
"Vendredi", "Samedi", "Dimanche"};
for (i = 0; i < 2; i++)
cout << **(jour+i);
system("pause");
return 0;
}
Abderrahm
ane
162 ELYOUSFI
Tableaux de pointeurs
#include <stdio.h>
#include <iostream>
using namespace std;
main()
{
char *jour[ ]={"lundi", "Mardi", "Mercredi", "Jeudi",
"Vendredi", "Samedi", "Dimanche"};
for (i = 0; i < 2; i++)
printf("%s\n",*(jour+i));
system("pause");
return 0;
}
Abderrahm
ane
163 ELYOUSFI
Pointeurs et les chaines de caractère
char c='A';
int i=1;
char *P1=&c;
int *P2=&i;
void *p=P1;
void *q=P2;
------------------------------------------------------
*p; //erreur: l’indirection implicite ne s’applique pas à un type void*
p++; //erreur: on ne peut incrémenter un type void* (la taille de
l’objet pointé est inconnue)
char c='A';
int i=14;
char *P1=&c;
int *P2=&i;