Académique Documents
Professionnel Documents
Culture Documents
14/02/2024
youssef.gahi@gmail.com
gahi.youssef@uit.ac.ma
Office Hours
Mercredi: 16h - 17h30
¤ Répartition horaire
> Cours: 12 heures
> Travaux pratiques: 10 heures
> Examens: 2h
¤ Évaluation
> 20% Travaux pratiques
> 20% Mini projet
> 10% Participation
> 50% Examen
¤ Les langages de programmation permettent de décrire d'une part les structures des
données qui seront manipulées par l'appareil informatique, et d'autre part d'indiquer
comment sont effectuées les manipulations, selon quels algorithmes.
¤ Types de langages:
> Interprété
+ L'interprétation du code source est un processus « pas à pas » : l'interpréteur va
exécuter les lignes du code une par une, en décidant à chaque étape ce qu'il va
faire ensuite. C'est le cas par exemple du langage HTML, JavaScript, PHP, SQL,
les scripts shell ou batch...
> Compilé
+ Dans ces langages, le code source (celui que vous écrivez) est tout d'abord
compilé, par un logiciel qu'on appelle compilateur, en un code binaire qu'un
humain ne peut pas lire mais qui est très facile à lire pour un ordinateur.
> Intermédiaire
+ le programme écrit avec ces langages peut dans certaines conditions subir une
phase de compilation intermédiaire vers un fichier écrit dans un langage qui n'est
pas intelligible (donc différent du fichier source) et non exécutable (nécessité d'un
interpréteur). (.class, LISP,)
¤ le compilateur fait ensuite appel à un éditeur de liens (en anglais linker ou binder) qui
permet d'intègrer dans le fichier final tous les éléments annexes (fonctions ou librairies)
auquel le programme fait référence mais qui ne sont pas stockés dans le fichier source.
¤ Un ordinateur est une machine dotée d'un microprocesseur capable d'exécuter très
rapidement des instructions très simples.
¤ Pour que le programme d'ordinateur puisse être exécuté par le processeur, il doit
être chargé dans la mémoire centrale.
¤ Pour être exécuté, un programme doit être envoyé dans la mémoire vive (RAM).
¤ Le processeur (CPU) lit et exécute les instructions trouvées dans la mémoire vive.
¤ Le processeur peut également déposer des informations dans la mémoire vive: les
résultats de ses calculs, par exemple.
¤ Lorsque le traitement est terminé, on peut envoyer les résultats obtenus sur le disque
dur.
Mémoire
DONNÉES
¤ Inconvénients
> Difficile d’écrire de grosses applications
> Difficile à maintenir la cohérence des données dans le temps
> Risque associé au partage de données à grande échelle
> Duplication des traitements communs. Cela ne favorise pas la réutilisation du code.
> Données globales
> Couplage important des données
Données globales
Instruction 1 Programme 1
Instruction 2
Instruction 3 Programme 2
︙
︙
︙
Instruction n Programme n
v Redondance de séquences
d’instructions
v Difficile à gérer dans un
large programme
Données globales
¤ Inconvénients
> Les données sont sous évalués : Avec un programme procédurale, selon le
traitement à réaliser, un étudiant par exemple est modélisé soit par un nombre ( sa
note) ou une chaine de caractère (son nom),.. mais ne peut pas être modélisé en
tant qu’un vrai objet.
> Les programmes procéduraux ne modélisent pas le monde réel. Le monde réel ne
se compose pas de fonctions mais des objets .
> Données globales
> Couplage élevé des données : Une modification des données entraine une
modification des fonctions qui utilisent ces données.
> Aucune technique permettant de spécialiser des fonctions existantes.
> Définir de nouveaux types de données est compliqué.
Données Données
Fonctions Fonctions
Objet 1 Objet 2
Données
Fonctions
Objet 3
COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 21
C’EST QUOI UN OBJET ?
¤ Les objets du monde réel ont à la fois un état (propriétés qui les caractérisent) et des
comportements (actions qu'ils peuvent faire)
¤ L’objectif
principal de la conception orientée objet est de
déterminer le « Comment faire ».
¤ La conception orientée objet consiste à apporter une
solution informatique aux questions et problèmes dégagés
lors de l’analyse orientée objet.
¤ Il
faut donc penser en termes de solutions informatiques et
de leurs implantations.
¤ La conception orientée objet n’est pas un travail
algorithmique.
Couleur : blanche
Avec la programmation orientée objet on peut modéliser l’objet Voiture. L‘objet Voiture peut
être défini en termes de plusieurs propriétés tel que le Modèle, le type, le prix, la couleur, etc.
Ces attributs correspondent à des propriétés qui caractérisent une voiture d’une autre. L’objet
Voiture peut être aussi défini par des fonctions (appelées aussi méthodes) liées à son
comportement. Ainsi, la Voiture peut réaliser des actions comme : accélérer(), freiner(),
tourner(), etc.
¤ Représenter des abstractions (éléments partagés) et pouvoir les recycler dans d’autres contextes
¤ L’abstraction et l’encapsulation sont des éléments clés dans les langages orientés
objet.
Avantages de l’Abstraction :
¤ L’utilisateur d’un objet n’a pas forcément besoin de savoir le fonctionnement interne de l’objet et son
implémentation.
¤ Les utilisateurs s’intéressent uniquement aux services rendus par l’objet.
¤ Permettre à l’utilisateur d’implémenter des fonctionnalités avancées sans comprendre ni même
penser à toute la complexité cachée derrière l’interface utilisée.
Avantages de l’Encapsulation :
¤ Protéger le code contre les utilisations abusives en empêchant l'accès aux données par un autre
moyen que les services proposés.
¤ Protéger les données contre les accès non autorisés en définissant les niveaux de visibilités
appropriés selon le besoin.
¤ Aider à renforcer la sécurité d’une application ou d’un programme car seuls les détails importants
sont fournis à l’utilisateur.
Besoin
Analyse
Modélisation
Orienté Objet
Implémentation
Java C++
PHP Ruby
Test
Produit
Python
COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA
ENSAKENITRA
KENITRA––UNIVERSITÉ
UNIVERSITÉIBN
IBNTOUFAIL
TOUFAIL 30
QU’EST-CE QUE LE C++
C++
Extensions non orientée objet
¤ Langage de programmation
Extensions orienté objet
¤ Compilé (comme le C)
Extensions de
programmation
¤ De niveau intermédiaire (comme le C) générique C
¤ Programmation générique.
> consiste à définir des algorithmes identiques opérant sur
des données de types différents.
https://www.tiobe.com/tiobe-index/
¤ F : nom de la fonction
¤ args : arguments
¤ type_retour : type de la valeur renvoyée par F.
¤ Programme exécutable : présence d’une fonction main, la seule à être exécutée.
¤ Type : façon dont la valeur doit être interprétée (la taille de la zone à réserver dans la
mémoire).
¤ Une variable est locale au bloc où elle a été déclarée (ne peut être utilisée à l’extérieur
de ce bloc).
¤ Caractères blancs (espaces, sauts de lignes) facultatifs : à utiliser pour rendre son
code lisible. Exemple :
¤ La conversion d’un fichier source vers un fichier exécutable passe par plusieurs sous
étapes:
> Pré-compilation: modifier le code source en suivant les instructions commençant par
# (quasi-exclusivement pour inclure des bibliothèques avec #include)
> Édition des liens: on rassemble les fichiers objets (le code source et les librairies
pré-packagé) en un seul fichier exécutable.
¤ En C++ uniquement : Commentaires sur une seule ligne : délimités par // (début) et fin
de ligne (n’existe pas en C)
¤ C++ possède une bibliothèque très riche, qui comporte un très grand nombre d'outils
(fonctions, types, …) qui permettent de faciliter la programmation.
¤ C++ intègre en plus de la bibliothèque standard de C des librairies de gestion des
entrées-sorties ainsi que des outils de manipulation des chaînes de caractères, des
tableaux et d'autres structures de données.
¤ Pour utiliser, en C++, les outils qui existaient dans la bibliothèque standard de C
(stdio.h, string.h, …) ainsi que certains nouveaux outils, il suffit de spécifier avec la
directive include le fichier entête (.h) souhaité.
¤ Tous les caractères de formatage comme '\t', '\n' peuvent être utilisés. Par ailleurs,
l’expression endl permet le retour à la ligne et le vidage du tampon.
¤ Il existe d’autres possibilités de modifier la façon dont les éléments sont lus ou écrits
dans le flot:
> dec: Lecture/écriture d'un entier en décimal.
> oct: Lecture/écriture d'un entier en octal.
> hex: lecture/écriture d'un entier en hexadécimal.
> endl: Insère un saut de ligne et vide les tampons.
> setw(int n): Affichage de n caractères.
> setprecision(int n): Affichage de la valeur avec n chiffres avec éventuellement un arrondi de la
valeur.
> setfill(char): Définit le caractère de remplissage flush vide les tampons après écriture.
¤ Exemple:
> ageEtudiant, nom_etudiant, NOMBRE_Etudiants à
Noms valides.
> Ageétudiant, nom etudiant à Noms non valides.
¤ Avant d’utiliser une variable, il faut indiquer à l'ordinateur le type de la variable que
nous voulons, son nom et enfin sa valeur c.-à-d. les trois caractéristique de la variable.
¤ En effet, en C++, toute variable doit être déclarée avant d’être utilisée.
¤ Une variable se déclare de la façon suivante:
¤ Types de base:
> Ex. bool, char, int, double
> “built-in types”
¤ Contrairement aux variables les constantes ne peuvent pas être initialisées après leur
déclaration et leur valeur ne peut pas être modifiée après initialisation.
¤ Elles doivent être déclarées avec le mot clé const et obligatoirement initialisées dès sa
définition.
¤ Il existe d’autres dérivés des types fondamentaux et des types définis par le
programmeur, cette dérivation se fait à l’aide d’opérateurs de déclaration. On peut
distinguer quatre types de dérivation:
> Pointeur
> Référence
> Tableau
Pointeurs Références
int array[10]; int array[10];
int* pointer = int& ref = array[5];
&array[5]; int value = ref;
int value = *pointer; ref = 100;
*pointer = 100;
Peut changer au cours Ne peut pas changer
du temps d’objet (selon le
compilateur)
Peut être nul Référence toujours une
variable valide, définie lors
de la déclaration de la
référence
COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 64
POINTEURS VS RÉFÉRENCES
Pointeurs Références
int a = 10; int a = 10;
int* const p = &a; int& r = &a;
¤ Un pointeur contient l’adresse d’un objet en mémoire, l’objet pointé peut être référencé
via le pointeur.
¤ On peut utiliser les pointeurs pour la manipulation des objets alloués dynamiquement,
création et manipulation de structures chaînées, etc.
¤ En C++, on peut coller plusieurs étiquettes à la même case mémoire (ou variable). On
obtient alors un deuxième moyen d'y accéder. On parle parfois d'alias, mais le mot
correct
¤ En C++ est référence. Pour déclarer une référence sur une variable, on utilise une
esperluette (&).
¤ Un tableau est une collection d’objets du même type chacun de ces objet est accede
par sa position. La dimension du tableau doit être connue en temps de compilation.
¤ Une variable entière de type int ne peut contenir qu'une seule valeur. Si on veut
stocker en mémoire un ensemble de valeurs, il faut utiliser une structure de données
appelée tableau qui consiste à réserver espace de mémoire contiguë dans lequel les
éléments du tableau peuvent être rangés.
¤ Comme toujours en C++, une variable est composée d'un nom et d'un type. Comme
les tableaux sont des variables, cette règle reste valable. Il faut juste ajouter une
propriété supplémentaire, la taille du tableau.
> Rappelez-vous qu’un tableau en langage C++ est composé uniquement d'éléments
de meme type.
> Le nom du tableau suit les mêmes règles qu'un nom de variable.
¤ Il est possible aussi d'initialiser le tableau à la déclaration en plaçant entre accolades
les valeurs, séparées par des virgules.
¤ Un élément du tableau (repéré par le nom du tableau et son indice) peut être manipulé
exactement comme une variable, on peut donc effectuer des opérations avec (ou sur)
des éléments de tableau.
¤ Le point fort des tableaux, c'est qu'on peut les parcourir en utilisant une boucle. On
peut ainsi effectuer une action sur chacune des cases d'un tableau, l'une après l'autre :
par exemple afficher le contenu des cases.
¤ Au même titre que les autres types de variables, on peut passer un tableau comme
argument d'une fonction. Voici donc une fonction qui reçoit un tableau en argument :
¤ Les tableaux que nous avons vus jusqu'ici sont des tableaux statiques. Cette forme de
tableaux vient du langage C, et est encore très utilisée. Cependant, elle n'est pas très
pratique. En particulier :
> Un tableau de cette forme ne connaît pas sa taille.
> On ne peut pas faire d'affectation globale.
> Une fonction ne peut pas retourner de tableaux.
¤ Pour remédier ces trois problèmes, Le C++ a introduit la notion des tableaux
dynamiques ces derniers sont des tableaux dont le nombre de cases peut varier au
cours de l'exécution du programme.
¤ On peut accéder aux éléments de tab de la même façon qu'on accéderait aux
éléments d'un tableau statique : tab[0] = 7.
¤ On peut accéder aux éléments de tab de la même façon qu'on accéderait aux
éléments d'un tableau statique : tab[0] = 7.
¤ On peut modifier la taille d’un tableau soit en ajoutant des cases à la fin d'un tableau ou
en supprimant la dernière case d'un tableau.
¤ Pour ajouter des cases, Il faut utiliser la fonction push_back(). On écrit le nom du
tableau, suivi d'un point et du mot push_back avec, entre parenthèses, la valeur qui va
remplir la nouvelle case.
¤ Passer un tableau dynamique en argument à une fonction est beaucoup plus simple
que pour les tableaux statiques. Comme pour n'importe quel autre type, il suffit de
mettre vector<type> en argument. Et c'est tout. Grâce à la fonction size(), il n'y a même
pas besoin d'ajouter un deuxième argument pour la taille du tableau
¤ Dans ce cas, le tableau dynamique ne peut pas être modifié. Pour changer le tableau,
il faut utiliser un passage par référence tout simple (sans le mot const donc).
¤ il est aussi possible de créer des tableaux multi dimensionnels de taille variable en
utilisant les vectors.
¤ On peut définir un synonyme pour un type prédéfini à l’aide du mot clé typedef.
¤ Le nouveau type Angle peut être utilisé pour définir des variables
¤ Toutes les opérations valides avec le type original le sont aussi avec le synonyme
¤ Faite automatiquement par le compilateur (non sans warnings) lorsque plusieurs types
de données sont impliqués dans une opération.
¤ Lors de l’affectation d’une valeur à un objet, le type de la valeur est modifié au type de
l’objet
¤ Chaque paramètre passé à une fonction est modifié au type de l’argument espéré par
la function
¤ En combinant des noms de variables, des opérateurs, des parenthèses et des appels
de fonctions on obtient des expressions.
¤ En combinant des noms de variables, des opérateurs, des parenthèses et des appels
de fonctions on obtient des expressions.
¤ Opérateurs multiplicatifs
> Le Modulo représente le reste de la division entière. Cet opérateur n'existe que pour
les nombres entiers.
La division est entière si les deux arguments sont entiers.
>
¤ Opérateurs additifs
¤ Opérateurs de décalage
¤ Opérateurs relationnels
en C++, ces opérateurs retournent un type bool (valeurs true ou false) contrairement
>
au C où ils retournent un type int (valeurs 0 ou 1)
¤ Opérateurs d’égalité
> Erreur classique: ne pas confondre l’opérateur d’égalité (==) avec l’opérateur
d’affectation (=).
> Ces opérateurs travaillent sur les bits, comme les décalages. Attention de ne pas
les confondre avec les opérateurs logiques.
¤ Opérateurs logiques
¤ Opérateurs d’affectation
> Où condition est une expression dont la valeur est booléenne ou entière.
> Toute valeur non nulle est considérée comme vraie.
> Si le test est vrai, instruction est exécutée.
¤ Dans le cas où plusieurs instructions différentes doivent être exécutées selon la valeur
d’une variable de type intégral, l’écriture des if successifs peut être relativement lourde.
¤ Les structures de contrôle itératives sont des structures qui permettent d'exécuter
plusieurs fois la même série d'instructions jusqu'à ce qu'une condition ne soit plus
réalisée.
¤ La structure de contrôle for est sans doute l’une des plus importantes.
¤ Elle permet de condenser:
> Un compteur: une instruction (ou un bloc d’instructions) exécutée avant le premier
parcours de la boucle du for. Il consiste à préciser le nom de la variable qui sert de
compteur et éventuellement sa valeur de départ.
> Une condition: une expression dont la valeur déterminera la fin de la boucle.
> Une itération: une instruction qui incrémente ou décrémente le compteur.
¤ Le while permet d’exécuter des instructions en boucle tant qu’une condition est vraie.
¤ L'instruction break sert à "casser" ou interrompre une boucle (for, while et do … while),
ou un switch.
¤ L’exécution reprend immédiatement après le bloc terminé.
¤ L'instruction continue sert à "continuer" une boucle (for, while et do … while) avec la
prochaine itération.
¤ Une fonction est une opération définie par le programmeur caractérisée par :
> Son nom,
> le type de valeur qu’elle renvoie,
> les paramètres qu’elle reçoit pour faire son travail,
> l’instruction-bloc qui effectue le travail (corps de la fonction).
¤ Toute fonction doit être déclarée avant d’être appelée pour la première fois.
¤ Il peut se trouver des situations où une fonction doit être appelée dans une autre
fonction définie avant elle. Comme cette fonction n’est pas définie au moment de
l’appel, elle doit être déclarée.
¤ Le rôle des déclarations est donc de signaler l’existence des fonctions aux
compilateurs afin de les utiliser, tout en reportant leur définition de ces fonctions plus
loin ou dans un autre fichier.
COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 100
PRINCIPES DE BASE DU LANGAGE C++
Les fonctions (methodes) à Définition d’une fonction
¤ Il est possible de créer plusieurs fonctions ayant le même nom. Il faut alors que la liste
des arguments des deux fonctions soit différente.
COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 101
PRINCIPES DE BASE DU LANGAGE C++
Les fonctions (methodes) à Surcharge des fonctions
¤ En C++, Plusieurs
fonctions peuvent porter le
même nom si leurs
signatures diffèrent.
¤ Le compilateur choisira la
fonction à utiliser selon les
paramètres effectifs par
rapport aux paramètres
formels des fonctions
candidates.
COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 102
PRINCIPES DE BASE DU LANGAGE C++
Les fonctions (methodes) à Arguments par défaut
¤ On peut, lors de la déclaration d’une fonction, donner des valeurs par défaut à certains
paramètres des fonctions.
¤ lorsqu'on appelle une fonction, on ne sera pas obligé d'indiquer à chaque fois tous les
paramètres!
COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 103
PRINCIPES DE BASE DU LANGAGE C++
Les fonctions (methodes) à Passage des paramètres
¤ Il y a deux méthodes pour passer des variables en paramètres dans une fonction: le
passage par valeur et le passage par variable.
COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 104
PRINCIPES DE BASE DU LANGAGE C++
Les fonctions (methodes) à Passage des paramètres à Par valeur
¤ La valeur de l’expression passée en paramètre est copiée dans une variable locale.
C’est cette variable qui est utilisée pour faire les calculs dans la fonction appelée.
COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 105
PRINCIPES DE BASE DU LANGAGE C++
Les fonctions (methodes) à Passage des paramètres à Par variable
COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 106
PRINCIPES DE BASE DU LANGAGE C++
Les fonctions (methodes) à Passage des paramètres à Par variable à Ref
COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 107
PRINCIPES DE BASE DU LANGAGE C++
Les fonctions (methodes) à Passage des paramètres à Par variable à Adresse
COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 108
TABLEAUX, POINTEURS ET CHAINES DE CARACTÈRES
Les chaines de caracteres
¤ En C++, une chaîne de caractères n’est rien d’autre qu’un tableau de caractères, avec
un caractère nul ’\0’ marquant la fin de la chaîne.
¤ Les chaînes de caractère peuvent être saisies au clavier et affichées à l’écran grâce
aux objets habituels cin et cout.
COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 109
TABLEAUX, POINTEURS ET CHAINES DE CARACTÈRES
Les chaines de caracteres à La type string
¤ les concepteurs du langage ont décidé de cacher tout ces mécanismes dans une boîte
fermée (Objet) en utilisant la classe string. Cette derniere propose en fait une
encapsulation de la chaîne de caractères C. La bibliothèque standard C++ propose
d'autres types de chaînes de caractères, notamment celles qui sont capables de gérer
un encodage comme l'UTF-8 où un caractère est stocké sur plusieurs octets.
COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 110
TABLEAUX, POINTEURS ET CHAINES DE CARACTÈRES
Les chaines de caracteres à La type string
¤ Pour initialiser notre objet au moment de la déclaration (et donc lui donner une valeur),
il y a plusieurs possibilités:
¤ On manipule une chaîne C++ comme une chaîne C : on peut utiliser les crochets pour
accéder à un élément ou en utilisant les fonctions prédéfinies dans le type string. .
COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 111
TABLEAUX, POINTEURS ET CHAINES DE CARACTÈRES
Les chaines de caracteres à La type string
COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 112
TABLEAUX, POINTEURS ET CHAINES DE CARACTÈRES
Les chaines de caracteres à La type string
¤ Quelques méthodes utiles du type « string »
> Size: La méthode size() permet de connaître la longueur de la chaîne actuellement
stockée dans l'objet de type string.
> Erase: Cette méthode très simple supprime tout le contenu de la chaîne :
> Substr: Une autre méthode peut se révéler utile: substr(). Elle permet d'extraire une
partie de la chaîne stockée dans un string.
string substr( size_type index, size_type num = npos );
COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 113
ALLOCATION DE LA MEMOIRE
COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 114
ALLOCATION DE LA MEMOIRE
Allocation d’une case memoire
COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 115
ALLOCATION DE LA MEMOIRE
Libérer la mémoire allouée
¤ C’est-à-dire que cette zone mémoire peut maintenant être utilisée pour autre chose.
On ne peut plus y accéder !
¤ Bonnes pratiques
> Faire suivre tous les delete de l’instruction « pointeur = NULL; ».
> Toute zone mémoire allouée par un new doit impérativement être libérée par un
delete correspondant !
COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 116
ALLOCATION DE LA MEMOIRE
Libérer la mémoire allouée
¤ Une variable allouée statiquement est désallouée automatiquement (à la fermeture du
bloc).
¤ Une variable (zone mémoire) allouée dynamiquement doit être désallouée
explicitement par le programmeur.
¤ Si on essaye d’utiliser la valeur pointée par un pointeur pour lequel aucune mémoire
n’a été réservée, une erreur de type Segmentation fault se produira a l’execution.
COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 117
ALLOCATION DE LA MEMOIRE
Lire une valeur d’un pointeur
¤ Bonnes pratiques
> Initialisez toujours vos pointeurs:
+ Utilisez NULL si vous ne connaissez pas encore la mémoire pointée au moment
de l’initialisation
> Il faut toujours verifier que la valeur n’est pas null avant de la consommer.
COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 118
ALLOCATION DE LA MEMOIRE
Allocation dynamique de tableau unidimensionnel
COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 119
ALLOCATION DE LA MEMOIRE
Allocation dynamique de tableau bidimensionnel
¤ Permet de libérer l'emplacement mémoire désigné par data alloué préalablement par
new[]
COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 120
ALLOCATION DE LA MEMOIRE
Allocation dynamique de tableau bidimensionnelè Exemple
COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 121