Académique Documents
Professionnel Documents
Culture Documents
Langage
C++
1
16/10/2021
Plan
1. Présentation du langage C++.
2. Généralités sur le langage C++
3. Les types de base de C++
4. Opérateurs et expressions
5. Les entrées-sorties conversationnelles de C++
6. Les instructions de contrôle
7. Les tableaux et les pointeurs
8. Les types structure, union et énumération
9. Les fonctions
Plan
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
2
16/10/2021
Présentation du
langage C++.
3
16/10/2021
C et C++
4
16/10/2021
5
16/10/2021
cout << "Je vais vous calculer " << NFOIS << " racines carrees\n" ;
cin >> x ;
cin est un « flot d’entrée » associé au clavier
6
16/10/2021
L’instruction using
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 !).
7
16/10/2021
Les identificateurs
Les identificateurs servent à désigner les différentes « choses »
manipulées par le programme, telles:
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.
8
16/10/2021
Les mots-clés
Certains « mots-clés » sont réservés par le langage à un usage
bien défini et ne peuvent pas être utilisés comme identificateurs.
Les commentaires
9
16/10/2021
Les commentaires
Le langage C++ offre une nouvelle façon d'ajouter des commentaires.
Exemple :
/* commentaire traditionnel
sur plusieurs lignes
valide en C et C++
*/
édition du programme,
compilation
et édition de liens.
10
16/10/2021
11
16/10/2021
12
16/10/2021
13
16/10/2021
0 représente faux.
Toute valeur non nulle représente vrai.
Tableau
14
16/10/2021
15
16/10/2021
Le type bool
bool ok = false ;
.....
if (.....) ok = true ;
.....
if (ok) .....
Opérateurs et expressions
16
16/10/2021
Opérateurs arithmétiques
+ - * / %
Opérateurs de comparaison
= = : l’opérateur égal à.
17
16/10/2021
Opérateurs de logique:
|| : OU logique (or)
Opérateurs d’affectation
+= -= *= /= %=
18
16/10/2021
Opérateurs d’affectation
Exemples:
a = a + b a += b
a = a / b a /= b
a = a * b a *= b
Opérateurs d’incrémentation
L’ opérateur de postincrémentation
var ++ var = var + 1
L’ opérateur de préincrémentation
++var var = var + 1
19
16/10/2021
Exemple:
z= ( a>b ? a : b );
a>b ? i++ : j++;
Elyousfi Abderrahmane ENSA-3 39
L’opérateur sizeof
Exemple:
double z ;
20
16/10/2021
Les entrées-sorties
conversationnelles de C++
21
16/10/2021
cout et cin
Entrées/sorties fournies à travers la librairie iostream
cout et cin
Entrées/sorties fournies à travers la librairie iostream
22
16/10/2021
LES MANIPULATEURS
Les manipulateurs sont des éléments qui modifient la façon
dont les éléments sont lus ou écrits dans le flot.
Les principaux manipulateurs sont :
23
16/10/2021
Exemple
24
16/10/2021
49
25
16/10/2021
26
16/10/2021
27
16/10/2021
28
16/10/2021
29
16/10/2021
30
16/10/2021
31
16/10/2021
Tableaux
Tableau
32
16/10/2021
Déclaration
Type nomtableau[Taille]
Exemple:
char car[10];
int nomb[9];
Initialisation
33
16/10/2021
initialisation
Exemple:
Exemple:
short A[] = {1200, 2300, 3400, 4500, 5600};
34
16/10/2021
Nom_du_Tableau[indice]
35
16/10/2021
Exemple:
Nom_du_Tableau[indice]
Affichage:
lecture:
36
16/10/2021
TD
Trie de bulle
On parcourt la suite t[0] ... t[N-1] en échangeant les
éléments consécutifs t[j-1] > t[j]
37
16/10/2021
Trie de bulle
L=N-1 ;
While(L>0){
FIN=0;
for (j=0; j<L; j++)
if (A[j]>A[j+1]){
AIDE=A[j];
A[j]=A[j+1];
A[j+1]=AIDE;
FIN=j;
}
L=FIN;
}
38
16/10/2021
39
16/10/2021
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.
40
16/10/2021
Initialisation
Exemple:
int A[3][5]={{0, 1, 2, 3, 4},
{10, 11, 12, 13, 14},
{20, 21, 22, 23, 24}};
Initialisation
Exemple:
41
16/10/2021
Initialisation
Exemple:
Initialisation
Exemple:
42
16/10/2021
NomTableau[Ligne][Colonne]
Lecture
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
43
16/10/2021
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:
44
16/10/2021
Ex: 2
La Somme des Différences Absolues (SAD) de deux tableaux de deux
dimensions T1 et T2 de même taille est donnée par la formule suivante:
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).
45
16/10/2021
Abderrahmane ELYOUSFI 91
Introdudction
Toute variable manipulée dans un programme est stockée quelque part
en mémoire centrale.
46
16/10/2021
La mémoire
Organisation
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
47
16/10/2021
Organisation
Variables
Instructions du programme Mémoire
Abderrahm
ane
96 ELYOUSFI
48
16/10/2021
Variables
Instructions du programme Mémoire
Abderrahm
ane
97 ELYOUSFI
Variables
Instructions du programme Mémoire
Abderrahm
ane
98 ELYOUSFI
49
16/10/2021
Variables
Instructions du programme Mémoire
Abderrahm
ane
99 ELYOUSFI
Variables
Instructions du programme Mémoire
Abderrahm
ane
100 ELYOUSFI
50
16/10/2021
Variables
Instructions du programme Mémoire
Abderrahm
ane
101 ELYOUSFI
Variables
Instructions du programme Mémoire
Abderrahm
ane
102 ELYOUSFI
51
16/10/2021
Tableaux
Instructions du programme Mémoire
Abderrahm
ane
103 ELYOUSFI
Les pointeurs
52
16/10/2021
Notion de pointeur
Un pointeur est une variable permettant de
stocker une adresse-mémoire
Déclaration :
type *pointeur ;
le type est celui des variables auxquelles permet d’accéder le
pointeur Abderrahm
ane
105 ELYOUSFI
Abderrahm
ane
106 ELYOUSFI
53
16/10/2021
Abderrahm
ane
107 ELYOUSFI
Arithmétique de pointeurs
L’addition et la soustraction fonctionnent comme
avec les adresses…
Abderrahm
ane
108 ELYOUSFI
54
16/10/2021
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 */
Variables
Instructions du programme Mémoire
Abderrahm
ane
110 ELYOUSFI
55
16/10/2021
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
56
16/10/2021
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
57
16/10/2021
Tableaux
Instructions du programme Mémoire
Tableaux
Instructions du programme Mémoire
58
16/10/2021
Tableaux
Instructions du programme Mémoire
Tableaux
Instructions du programme Mémoire
59
16/10/2021
Tableaux
Instructions du programme Mémoire
Tableaux
Instructions du programme Mémoire
60
16/10/2021
Pointeur et constante
Constante
Les habitués du C ont l’habitude d’utiliser la directive du
préprocesseur #define pour définir des constantes.
Il est reconnu que l’utilisation du préprocesseur est une source
d’erreurs difficiles à détecter.
En C++, l’utilisation du préprocesseur se limite aux cas les
plus sûrs : inclusion de fichiers
61
16/10/2021
Constante
const int N = 10; // N est un entier constant.
const int t[]={1, 2, 3, 4, 5}; // t[i] est une constante.
const int x; // erreur: pas d’initialisateur
62
16/10/2021
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
63
16/10/2021
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
64
16/10/2021
La gestion dynamique :
les opérateurs new et delete
Allocation Mémoire
Le C++ met à la disposition du programmeur deux opérateurs
new et delete pour remplacer respectivement les fonctions
malloc et free .
(bien qu’il soit toujours possible de les utiliser).
L’opérateur new
L’opérateur delete
130
65
16/10/2021
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
66
16/10/2021
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
67
16/10/2021
Références
Variables références
En plus des variables normales et des
pointeurs, le C++ offre les variables
références.
68
16/10/2021
Variables références
int x;
int & y = x; // y est une référence à x
int *ptr;
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
69
16/10/2021
Variables références
Une variable référence doit obligatoirement être
initialisée et le type de l'objet initial doit être
le même que l'objet référence.
Intérêt :
passage des paramètres par référence
70
16/10/2021
POINTEURS ET TABLEAUX
L'usage des pointeurs en C++ est, en grande
partie, orienté vers la manipulation des tableaux.
141
Abderrahm
ane
141 ELYOUSFI
142
Abderrahm
ane
142 ELYOUSFI
71
16/10/2021
72
16/10/2021
73
16/10/2021
Pointeurs et tableaux à
plusieurs dimensions
Abderrahm
ane
148 ELYOUSFI
74
16/10/2021
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
75
16/10/2021
Abderrahm
ane
151 ELYOUSFI
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;
}
76
16/10/2021
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
tab 0123440
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
77
16/10/2021
for(i=0; i<N;i++)
{
T[i] = new type[M];
}
int **tableau;
int i, j;
78
16/10/2021
Abderrahm
ane
157 ELYOUSFI
Abderrahm
ane
158 ELYOUSFI
79
16/10/2021
int **tableau;
int *le_tableau;
int i;
Abderrahm
ane
160 ELYOUSFI
80
16/10/2021
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
81
16/10/2021
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
82
16/10/2021
Chaine de caractère
83
16/10/2021
Chaine de caractère
84
16/10/2021
85
16/10/2021
Pointeur de void
Pointeur générique
Pointeur de void
86
16/10/2021
Pointeur de void
Le pointeur de tout type d’objet peut être attribué à une variable de
type void*
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)
Pointeur de void
87
16/10/2021
Pointeur de void
char c='A';
int i=14;
char *P1=&c;
int *P2=&i;
Fin
88