Vous êtes sur la page 1sur 121

PROGRAMMATION ORIENTÉE OBJET EN C++

Pr. Youssef GAHI

14/02/2024

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 1


CONTACT

youssef.gahi@gmail.com
gahi.youssef@uit.ac.ma

Office Hours
Mercredi: 16h - 17h30

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 2


OBJECTIFS

01 > PRÉSENTATION DU C++

02 > ELÉMENTS DU LANGAGE

03 > POINTEURS, RÉFÉRENCES ET


TABLEAUX

04 > PROGRAMMATION ORIENTÉ


OBJET

05 > CLASSES, SURCHARGES DE


FONCTIONS, HÉRITAGE

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 3


RÉPARTITION HORAIRE ET MODE D’ÉVALUATION

¤ Répartition horaire
> Cours: 12 heures
> Travaux pratiques: 10 heures
> Examens: 2h

¤ Évaluation
> 20% Travaux pratiques
> 20% Mini projet
> 10% Participation
> 50% Examen

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA


ENSAKENITRA
KENITRA––UNIVERSITÉ
UNIVERSITÉIBN
IBNTOUFAIL
TOUFAIL 4
01 LA PROGRAMMATION ORIENTÉ OBJET

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL


QU'EST-CE QU'UN ALGORITHME ?

Un algorithme est la description précise, sous forme de concepts


simples, de la manière dont on peut résoudre un problème.

Un algorithme une suite d'opérations pour résoudre un problème


particulier dont on est sûr qu'elle trouve toujours une réponse en
un temps d'exécution fini.

Un algorithme est souvent exprimé avec une notation


indépendante de tout langage de programmation

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA


ENSAKENITRA
KENITRA––UNIVERSITÉ
UNIVERSITÉIBN
IBNTOUFAIL
TOUFAIL 6
LANGAGE DE PROGRAMMATION

¤ Un langage de programmation est une notation conventionnelle destinée à formuler


des algorithmes et produire des programmes informatiques qui les appliquent.

¤ D'une manière similaire à une langue naturelle, un langage de programmation est


composé d'un alphabet, d'un vocabulaire, de règles de grammaire et de significations.

¤ 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.

¤ Un langage de programmation est mis en œuvre par un traducteur


automatique : compilateur ou interprète.

¤ Un compilateur est un programme informatique qui transforme dans un premier temps


un code source écrit dans un langage de programmation donné en un code cible qui
pourra être directement exécuté par un ordinateur

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA


ENSAKENITRA
KENITRA––UNIVERSITÉ
UNIVERSITÉIBN
IBNTOUFAIL
TOUFAIL 7
LANGAGE DE PROGRAMMATION
Types de langages de programmation

¤ 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,)

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 8


LANGAGE DE PROGRAMMATION
Types ce langages

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 9


QU’EST-CE QU’UN PROGRAMME INFORMATIQUE

¤ Un programme informatique est un ensemble d'opérations destinées à être exécutées par


un ordinateur.
> Un programme source est un code écrit par un informaticien dans un langage de
programmation. Il peut être compilé vers une forme binaire, ou directement interprété.
> Un programme binaire décrit les instructions à exécuter par un microprocesseur sous
forme numérique. Ces instructions définissent un langage machine (Assembleur).
¤ Un programme est un ensemble de zones mémoire (variables) et un ensemble d’opérations
sur ses zones mémoire (instructions)

¤ le compilateur transforme le code source en code objet, et le sauvegarde dans un fichier


objet, c'est-à-dire qu'il traduit le fichier source en langage machine.

¤ 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.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA


ENSAKENITRA
KENITRA––UNIVERSITÉ
UNIVERSITÉIBN
IBNTOUFAIL
TOUFAIL 10
QU’EST-CE QU’UN PROGRAMME INFORMATIQUE

¤ 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.

¤ Les programmes sont stockés sur le disque dur.

¤ 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.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 11


ARCHITECTURE DE VON NEUMANN

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA


ENSAKENITRA
KENITRA––UNIVERSITÉ
UNIVERSITÉIBN
IBNTOUFAIL
TOUFAIL
MACHINE DE VON NEUMANN

Mémoire

Résultat des Opérations Instructions et Données

Unité de Calcul Unité de Périphériques


Arithmétique Contrôle (Clavier,Terminal,
et Logique (U C) Imprimante, etc...)
(U A L)

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL


LA PROGRAMMATION
Les types de langages

¤ On retrouve 2 aspects dans les programmes : les algorithmes et les données.

¤ Ceci n’a pas changé au cours de l’histoire de l’informatique.

¤ Ce qui a évolué, c’est la relation existant entre eux, qui s’appelle


« paradigme de programmation ».

¤ Les types de programmation:


> Programmation non structurée
> Programmation procédurale
> Programmation orientée objet
+ évolution des mécanismes d’abstraction
+ outil pour gérer la complexité des systèmes

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 14


LA PROGRAMMATION
Programmation non structurée

¤ Les premiers langages de programmation étaient généralement constitués d’une suite


d’instructions s’exécutant de façon linéaire: programmation non structurée.

DONNÉES

Programme Programme Programme

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 15


LA PROGRAMMATION
Programmation non structurée

¤ 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

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 16


LA PROGRAMMATION
Programmation non structurée

v Redondance de séquences
d’instructions
v Difficile à gérer dans un
large programme

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 17


LA PROGRAMMATION
La programmation procédurale

¤ D’autres langages plus évolués sont apparus (PASCAL, C, FORTRAN, etc.)


préconisant une approche procédurale.
¤ Il s’agit de découper un programme en une série de fonctions qui ont pour but de
réaliser un traitement particulier : programmation procédurale.

Données globales

Fonction 1 Fonction 2 Fonction 3

Données Données Données


locales locales locales

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 18


LA PROGRAMMATION
La programmation procédurale

v Utilisation d’une seule fonction


réutilisée plusieurs fois

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 19


LA PROGRAMMATION
La programmation procédurale
¤ Avantages
> facilite la maintenance d’un programme
> favorise la modularité des programmes, un problème complexe pouvant être
découpé en plusieurs sous-problèmes
> ces fonctions peuvent constituer les éléments d’une boîte à outils qui pourront être
réutilisés pour les nouveaux développements.
> Introduction de mécanismes de passage de paramètres.

¤ 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é.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL


LA PROGRAMMATION
La programmation Orienté-Objet (POO)

¤ L’idée fondamentale derrière la programmation Orienté-Objet est de concevoir des


programmes informatiques en modélisant les objets du monde réel ce qui permet une
approche plus réaliste et plus facile des problèmes à traiter.
¤ Pour résoudre un problème de programmation dans un langage orienté objet, le
programmeur ne demande plus comment le problème sera divisé en fonctions, mais
comment il sera divisé en objets.
¤ La programmation ne porte pas uniquement sur la réalisation de traitements mais aussi
sur la modélisation des données en tant qu’objets réel d’où le nom « Orienté-Objet ».

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)

¤ De même, un objet de programmation peut être défini en termes d’attributs ou


données qui décrivent sont état et des fonctions qui définissent sont comportement.

Objet du monde réel = État (propriétés) + Comportement(Actions)

Objets de programmation = Données + Fonctions

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 22


CONCEPTION OBJET

¤ 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.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 23


EXEMPLE (1/2)

L’objet est « la boite de rangement »

Quelles sont les propriétés de la boite ?

Couleur : blanche

Etat : semi ouverte

Quelle sont les fonctions liées à la boite ?

Fermer() : cette fonction permet de changer


l’état de la boite à « fermée »

Ouvrir() : cette fonction permet de changer


l’état de la boite à « ouverte »

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 24


EXEMPLE(2/2)

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.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 25


LA PROGRAMMATION ORIENTÉ-OBJET VS LA PROGRAMMATION
PROCÉDURALE

Programmation Orienté-Objet Programmation Procédurale


Plus proche au monde réel Plus proche à la machine
Modèle Réel (Etudiant) Modèle Machine (Int, char, …)
Le programme principal est divisé en petits objets Le programme principal est divisé en petites
en fonction du problème. parties selon les fonctions.
Les données prennent plus d’importance que les Les fonctions ou les algorithmes ont plus
fonctions du programme. d’importance que les données dans le
programme.
Chaque objet contrôle ses propres données. La plupart des fonctions utilisent des données
globales.
Le masquage des données est possible, ce qui Il n’y a pas de moyen idéal pour masquer les
empêche l’accès illégal de la fonction depuis données.
l’extérieur.
Les données et les fonctions de chaque objet Chaque fonction contient des données
individuel agissent comme une seule unité. différentes.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 26


POURQUOI LA POO ?
Avantages

Validité : Le programme fonctionne


¤ Assure une meilleur qualité du Extensibilité: Je peux le faire évoluer
programme
Réutilisabilité : Je peux réutiliser des composantes du
programme pour d’autres applications
¤ Un être humain peut facilement comprendre simultanément un seul aspect d’un problème

¤ “Diviser pour régner”

¤ Associer les données et les fonctionnalités

¤ Représenter des abstractions (éléments partagés) et pouvoir les recycler dans d’autres contextes

¤ Recycler ces abstractions

Réduire le temps, les efforts, la complexité et les coûts de développement et la


maintenance des systèmes logiciels.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 27


POURQUOI LA POO ?
L’Abstraction et L’Encapsulation des données

¤ L’abstraction et l’encapsulation sont des éléments clés dans les langages orientés
objet.

¤ L’abstraction est le fait de grouper des données (attributs) et comportements


(fonctions) au sein d'une structure en cachant l'implémentation de l'objet

¤ L’encapsulation est comme un mécanisme de boîte noire qui empêche l’utilisateur


d’utiliser un objet au delà des méthodes qui lui sont proposées. Ceci permet de
contrôler l’accès aux données de l’objet. Ainsi, les données peuvent être masqués et
sont protégés contre toute altération.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 28


POURQUOI LA POO ?
L’Abstraction et L’Encapsulation des données

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.

¤ Réduire la complexité du code.


¤ Éviter la duplication de code et augmente la possibilité de réutilisation.

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.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 29


APPLICATIONS DE LA POO

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

¤ Le « ++ » fait référence à l’opérateur d’incrémentation


(cela signifie que C++ est un niveau au-dessus de C)

¤ Programmation orienté objet Exceptions mineurs : code C


> Modulaire et réutilisable non supporté en C++

¤ Programmation générique.
> consiste à définir des algorithmes identiques opérant sur
des données de types différents.

¤ Nombreux compilateurs (gcc, g++, borland c++…).

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA


ENSAKENITRA
KENITRA––UNIVERSITÉ
UNIVERSITÉIBN
IBNTOUFAIL
TOUFAIL 31
POURQUOI LE C++ ?

¤ Rapide : Plus de performances dans le programme créé, il fait partie des


langages les plus puissants et les plus rapides.

¤ Evolutive : La plus grande force du C++ est sa capacité d’évolution, c’est


pourquoi les applications qui nécessitent beaucoup de ressources sont
généralement construites avec ce langage comme les jeux vidéos 3D.

¤ Libre : Le langage C++ n'appartient à personne et par conséquent n'importe qui


peut l'utiliser sans besoin d'une autorisation ou obligation de payer pour avoir le
droit d'utilisation.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 32


POURQUOI LE C++ ?

https://www.tiobe.com/tiobe-index/

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 33


02 ELÉMENTS DE BASE DU LANGAGE C++

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL


SYNTAXE ET COMPILATION
Les fonctions

¤ Programme en C++ ≃ enchaînement de fonctions


¤ Les fonctions:
> Effectuent des instructions, et renvoient une valeur ;
> Ne peuvent pas être imbriquées ;
> Mot-clé return : on quitte la fonction, en précisant la valeur renvoyée.

¤ Déclaration d’une fonction :

¤ Cette ligne est le prototype de la fonction F.

¤ 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.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 35


SYNTAXE ET COMPILATION
Types et variables

¤ Variable : zone réservée en mémoire pour stocker une valeur.

¤ La mémoire se compose de suites (finies bien sûr !) de 0 ou de 1 (bits) ;

¤ Type : façon dont la valeur doit être interprétée (la taille de la zone à réserver dans la
mémoire).

¤ Déclaration d’une variable nom_var de type type_var :

¤ Une variable est locale au bloc où elle a été déclarée (ne peut être utilisée à l’extérieur
de ce bloc).

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 36


SYNTAXE ET COMPILATION
Lisibilité du code : indentation

¤ Caractères blancs (espaces, sauts de lignes) facultatifs : à utiliser pour rendre son
code lisible. Exemple :

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 37


SYNTAXE ET COMPILATION
Lisibilité du code : noms des variables/fonctions

¤ Choisir des noms de variables/fonctions parlants

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 38


PRINCIPES DE BASE DU LANGAGE C++
Fonction Main

¤ Tout programme doit avoir un point d’entrée nommé main

¤ La fonction main est la fonction appelée par le système d’exploitation lors de


l'exécution du programme
> { et } délimitent le corps de la fonction
> main retourne un entier au système: 0 (zéro) veut dire succès

> Chaque expression doit finir par ; (point virgule)

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 39


COMMENT S’Y PRENDRE ?

Séparer le programme en modules réutilisables

Unité fonctionnelle autonome,


possédant une interface (header.h)
Indépendante de son implantation (impl.cpp)

Par analyse fonctionnelle descendante

Par analyse ascendante

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 40


PRINCIPES DE BASE DU LANGAGE C++
Fichiers Sources

¤ Un programme est généralement constitué de plusieurs modules, chaque module est


composé de deux fichiers sources:
> Un fichier contenant la description de l’interface du module
> Un fichier contenant l’implémentation proprement dite du module

¤ Un suffixe est utilisé pour déterminer le type de fichier


> .h, .H, .hpp, .hxx : pour les fichiers de description d’interface (h files)
> .c, .cc, .cxx, .cpp, .c++ : pour les fichiers d’implementation

¤ Dans un fichier source on peut trouver:


> Commentaires
> Instructions pré-processeur
> Instructions C++

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 41


PRINCIPES DE BASE DU LANGAGE C++
Construction de l’Exécutable

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 42


SYNTAXE ET COMPILATION
Compilation

¤ 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)

> Compilation: traduction du code C++ en langage assembleur (version lisible du


langage machine)

> Assemblage: transformation du code assembleur en langage machine. Cette sous-


étape génère le fichier objet d’extension .o

> Édition des liens: on rassemble les fichiers objets (le code source et les librairies
pré-packagé) en un seul fichier exécutable.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 43


SYNTAXE ET COMPILATION
Compilation

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 44


SYNTAXE ET COMPILATION
Compilation

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 45


SYNTAXE ET COMPILATION
Messages d’erreur

¤ Inévitable: on n’écrit presque jamais un programme correct du premier coup.


¤ Le compilateur renvoie des messages d’erreur (« error»), ou des avertissements
(« warning »).
¤ Erreurs: empêchent de générer le fichier exécutable.
¤ Avertissements: signalent une syntaxe correcte, mais inhabituelle, pouvant avoir un
effet diffèrent de celui escompté.
¤ Les avertissements signalent également des erreurs potentielles.
¤ Pour forcer l’affichage des avertissements il faut utiliser l’option –Wall (W pour warning
et all pour tous).
¤ Le compilateur signale le numéro de ligne où une erreur a été repérée.

Il faut toujours lire les messages


d’erreurs avant de chercher à
résoudre le problème

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 46


PRINCIPES DE BASE DU LANGAGE C++
Les commentaires

¤ En C et C++: Commentaires sur plusieurs lignes : délimités par /* (début) et */ (fin).

¤ En C++ uniquement : Commentaires sur une seule ligne : délimités par // (début) et fin
de ligne (n’existe pas en C)

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 47


PRINCIPES DE BASE DU LANGAGE C++
Bibliothèque de 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é.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 48


PRINCIPES DE BASE DU LANGAGE C++
Espace de noms en C++ (NameSpaces)
¤ Pour des raisons liées à la POO (généricité, modularité…) et pour éviter certains
conflits qui peuvent surgir entre les différents noms des outils utilisés (prédéfinis ou
définis par l'utilisateur), C++ introduit la notion de namespace (espace de noms).
¤ NameSpace est une zone de déclaration et de définitions des différents outils
(variables, fonctions, types,…). Ainsi, chaque élément défini dans un programme ou
dans une bibliothèque appartient désormais à un namespace.
¤ La plupart des outils d’Entrées / Sorties de la bibliothèque de C++ appartiennent à un
namespace nommé "std".

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 49


PRINCIPES DE BASE DU LANGAGE C++
Espace de noms en C++ (NameSpaces)
¤ Il est possible aussi de définir un espace de nom alors les identificateurs de cet espace
seront préfixés.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 50


PRINCIPES DE BASE DU LANGAGE C++
Les entrées/sorties en C++

¤ On peut utiliser les routines d’E/S da la bibliothèque standard de C (<stdio.h>). Mais


C++ possède aussi ses propres possibilités d’E/S.
¤ Les nouvelles possibilités d’E/S de C++ sont réalisées par l’intermédiaire des
opérateurs << (sortie), >> (entrée) et des flots (stream) définis dans la bibliothèque
<iostream>, suivants:
> cin : flot d’entrée correspondant à l’entrée standard (instance de la classe
istream_withassign)
> cout : flot de sortie correspondant à la sortie standard (instance de la classe
ostream_withassign)
> cerr : flot de sortie correspondant à la sortie standard d’erreur (instance de la classe
ostream_withassign)

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 51


PRINCIPES DE BASE DU LANGAGE C++
Les entrées/sorties en C++

¤ 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.

¤ On peut citer quelques avantages des nouvelles possibilités d'E/S :


> Vitesse d'exécution plus rapide.
> Il n'y plus de problème de types
> Autres avantages liés à la POO.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 52


PRINCIPES DE BASE DU LANGAGE C++
Bibliothèque iomanip

¤ 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.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 53


PRINCIPES DE BASE DU LANGAGE C++
Variables et constants à Noms de variables

¤ En C++, il y a quelques règles qui régissent les


différents noms autorisés ou interdits:
> Les noms de variables sont constitués de lettres, de
chiffres et du tiret-bas « _ » uniquement. Le double
souligné "__" au début du nom est réservé aux
variables/fonctions du système.
> Le premier caractère doit être une lettre (majuscule
ou minuscule).
> On ne peut pas utiliser d'accents.
> On ne peut pas utiliser d'espaces dans le nom.

¤ Exemple:
> ageEtudiant, nom_etudiant, NOMBRE_Etudiants à
Noms valides.
> Ageétudiant, nom etudiant à Noms non valides.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 54


PRINCIPES DE BASE DU LANGAGE C++
Variables et constants à types de variables

¤ Après l’identification du nom de la variable, L'ordinateur doit connaitre ce qu'il a dans


cette variable, il faut donc indiquer quel type (nombre, mot, lettre, ou …) d'élément va
contenir la variable que nous aimerions utiliser

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 55


PRINCIPES DE BASE DU LANGAGE C++
Variables et constants à declaration des variables

¤ 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:

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 56


PRINCIPES DE BASE DU LANGAGE C++
Variables et constants à declaration des variables

¤ Pour le type string:


> Le C et le C++ n’ont pas de type de base pour représenter les chaînes de
caractères (comme en JAVA le type « string »).
> Les chaînes de caractères sont représentées par des tableaux de caractères. Il
existe cependant dans la librairie standard de C++ une classe std::string, mais il ne
s’agit pas d’un type de base.
> Un peu comme pour le char, il faut mettre la chaine de caractères entre guillemets
et non pas entre des apostrophes.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 57


PRINCIPES DE BASE DU LANGAGE C++
Types de variables

¤ Types de base:
> Ex. bool, char, int, double
> “built-in types”

¤ Types definies par le prorammeur


> “user-defined types”
> strcuture, classes…

¤ Types defines dans les librairies


> Ex. string, vector, complex

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 58


PRINCIPES DE BASE DU LANGAGE C++
Variables et constantes à les constantes

¤ 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.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 59


PRINCIPES DE BASE DU LANGAGE C++
Variables et constantes à enumerations

¤ Alternative pour les constantes de type entier: Enumérations

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 60


PRINCIPES DE BASE DU LANGAGE C++
Variables et constantes à Types dérivés

¤ 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

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 61


LA MÉMOIRE

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 62


LES POINTEURS

¤ Un pointeur est une variable


¤ Un pointeur ne stocke pas des données mais pointe sur un bloc de mémoire qui stocke
des données.
¤ Un pointeur ne stocke pas forcement des types primitifs
¤ Dans la mémoire, la zone réservée à un pointeur est juste un espace pour stocker
l’adresse hexadécimal de la variable sur laquelle il pointe

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 63


POINTEURS VS RÉFÉRENCES

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;

Référence ó pointeur non nul qui indique toujours


la meme adresse

Conséquence : ne pas utiliser des T* const mais des


T&, c’est plus élégant.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 65


POINTEURS VS RÉFÉRENCES
Règle générale

Utilisez des références dans les paramètres de


fonction et les types de retour

Utilisez des pointeurs pour implémenter des


algorithmes et des structures de données

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 66


PRINCIPES DE BASE DU LANGAGE C++
Variables et constantes à Types dérivés à Pointeurs

¤ 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.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 67


PRINCIPES DE BASE DU LANGAGE C++
Variables et constantes à Types dérivés à Reference

¤ 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 (&).

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 68


PRINCIPES DE BASE DU LANGAGE C++
Variables et constantes à Types dérivés à Tableaux

¤ 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.

¤ Le tableau peut être initialisé lors de la définition :

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 69


PRINCIPES DE BASE DU LANGAGE C++
Tableaux à Tableaux unidimensionnels

¤ 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.

¤ On peut distinguer deux sortes de tableaux unidimensionnels :


> Les tableaux statiques : Ceux dont la taille est connue à l'avance, et
> Les tableaux dynamiques : ceux dont la taille peut varier en permanence.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 70


PRINCIPES DE BASE DU LANGAGE C++
Tableaux à Tableaux unidimensionnels à Statiques

¤ 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.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 71


PRINCIPES DE BASE DU LANGAGE C++
Tableaux à Tableaux unidimensionnels à statiques

¤ 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.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 72


PRINCIPES DE BASE DU LANGAGE C++
Tableaux à Tableaux unidimensionnels à statiques

¤ 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 :

¤ À l'intérieur de la fonction afficheTableau(), il n'y a aucun moyen de connaître la taille


du tableau ! C’est pour cela nous avons ajouté un deuxième argument n contenant la
taille du tableau.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 73


PRINCIPES DE BASE DU LANGAGE C++
Tableaux à Tableaux unidimensionnels à dynamiques (classe vector)

¤ 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.

¤ Ils permettent d'ajuster la taille du tableau au besoin du programmeur.

¤ Il faut ajouter la ligne #include <vector> pour utiliser ces tableaux.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 74


PRINCIPES DE BASE DU LANGAGE C++
Tableaux à Tableaux unidimensionnels à dynamiques (classe vector)

¤ Pour declarer un tableau dynamique de type vector:

¤ 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.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 75


PRINCIPES DE BASE DU LANGAGE C++
Tableaux à Tableaux unidimensionnels à dynamiques (classe vector)

¤ 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.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 76


PRINCIPES DE BASE DU LANGAGE C++
Tableaux à Tableaux unidimensionnels à dynamiques (classe vector)

¤ 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.

¤ On peut supprimer la dernière case d'un tableau en utilisant la fonction pop_back() de


la même manière que push_back(), sauf qu'il n'y a rien à mettre entre les parenthèses.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 77


PRINCIPES DE BASE DU LANGAGE C++
Tableaux à Tableaux unidimensionnels à dynamiques (classe vector)

¤ 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

¤ Si le tableau contient beaucoup d'éléments, le copier prendra du temps. Il vaut donc


mieux utiliser un passage par référence constante const& pour optimiser la copie.

¤ 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).

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 78


PRINCIPES DE BASE DU LANGAGE C++
Tableaux à Tableaux multidimensionnels à dynamiques (classe vector)

¤ il est aussi possible de créer des tableaux multi dimensionnels de taille variable en
utilisant les vectors.

¤ Cela nous permet de créer un vecteur de 3 éléments désignant chacun 1 vecteur de 4


éléments. Finalement, on peut accéder aux valeurs dans les cases d tableau en
utilisant deux paires de crochets tab[i][j] comme pour les tableaux statiques.
¤ Il faut par contre s'assurer que cette ligne et cette colonne existent réellement.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 79


PRINCIPES DE BASE DU LANGAGE C++
Variables et constantes à Types dérivés à Nouveaux types

¤ 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

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 80


PRINCIPES DE BASE DU LANGAGE C++
Variables et constantes à Conversion de Type

¤ Ce type d’opération consiste à modifier la façon d’interpréter la séquence de bits


contenue dans une variable.

¤ Il y a deux types de conversions possibles:


> Conversion implicite: par le compilateur
> Conversion Explicite: par le programmeur

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 81


PRINCIPES DE BASE DU LANGAGE C++
Variables et constantes à Conversion de Type à Conversion implicite

¤ 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

¤ Dans les expressions arithmétiques, le type de taille supérieure détermine le type de


conversion

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 82


PRINCIPES DE BASE DU LANGAGE C++
Variables et constantes à Conversion de Type à Conversion explicite

¤ Cette conversion est demandée par le programmeur

¤ Peut être écrit

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 83


PRINCIPES DE BASE DU LANGAGE C++
Les expressions

¤ En combinant des noms de variables, des opérateurs, des parenthèses et des appels
de fonctions on obtient des expressions.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 84


PRINCIPES DE BASE DU LANGAGE C++
Les expressions à Opérateurs Arithmétiques et logiques

¤ 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

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 85


PRINCIPES DE BASE DU LANGAGE C++
Les expressions à Opérateurs Arithmétiques et logiques

¤ Opérateurs de décalage

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 86


PRINCIPES DE BASE DU LANGAGE C++
Les expressions à Opérateurs Arithmétiques et logiques

¤ 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 (=).

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 87


PRINCIPES DE BASE DU LANGAGE C++
Les expressions à Opérateurs Arithmétiques et logiques

¤ Opérateurs sur les bits

> 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

> Ces opérateurs travaillent sur le type bool et retournent un bool.


> Le dernier opérateur signifie: « si e1 est vraie alors faire e2, sinon faire e3 »

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 88


PRINCIPES DE BASE DU LANGAGE C++
Les expressions à Opérateurs Arithmétiques et logiques

¤ Opérateurs d’affectation

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 89


PRINCIPES DE BASE DU LANGAGE C++
Les structures de contrôle à Structures de contrôle conditionnelles

¤ On appelle structures de contrôle conditionnelles les instructions qui permettent de


tester si une condition est vraie ou non.
¤ Il s'agit des instructions suivantes:
> La structure conditionnelle if
> Le branchement conditionnel switch

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 90


PRINCIPES DE BASE DU LANGAGE C++
Les structures de contrôle à Structures de contrôle conditionnelles à IF

¤ La structure conditionnelle if permet de réaliser un test et d’exécuter une instruction ou


non selon le résultat de ce test

> 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.

¤ Il est possible de définir plusieurs conditions à remplir avec les opérateurs ET et OU


(&& et ||). Par exemple, l'instruction ci-dessous exécutera les instructions si l'une ou
l'autre des deux conditions est vraie :

¤ if … else : ce qu'il faut faire si la condition n'est pas vérifiée

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 91


PRINCIPES DE BASE DU LANGAGE C++
Les structures de contrôle à Structures de contrôle conditionnelles à Switch

¤ 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.

¤ Le C++ fournit donc la structure de contrôle switch, qui permet de réaliser un


branchement conditionnel.

¤ La variable choix est évaluée en premier. Son


type doit être entier.
¤ Selon le résultat de l’évaluation, l’exécution du
programme se poursuit au cas de même valeur.
¤ Si aucun des cas ne correspond et si default est
présent, l’exécution se poursuit après default.
¤ Si en revanche default n’est pas présent, on sort
du switch.
¤ Pour forcer la sortie du switch, on doit utiliser le
mot-clé break.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 92


PRINCIPES DE BASE DU LANGAGE C++
Les structures de contrôle à Structures de contrôle itératives

¤ 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.

¤ On appelle ces structures des boucles.

¤ Il existe 3 types de boucles à connaître :


> la boucle for,
> la boucle while
> la boucle do … while.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 93


PRINCIPES DE BASE DU LANGAGE C++
Les structures de contrôle à Structures de contrôle itératives à Boucle for

¤ 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.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 94


PRINCIPES DE BASE DU LANGAGE C++
Les structures de contrôle à Structures de contrôle itératives à Boucle while

¤ Le while permet d’exécuter des instructions en boucle tant qu’une condition est vraie.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 95


PRINCIPES DE BASE DU LANGAGE C++
Les structures de contrôle à Structures de contrôle itératives à Boucle do…while

¤ La structure de contrôle do … while permet, tout comme le while, de réaliser des


boucles en attente d’une condition.
¤ Contrairement à celui-ci, le do … while effectue le test sur la condition après l’exécution
des instructions. Cela signifie que les instructions sont toujours exécutées au moins
une fois, que le test soit vérifié ou non.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 96


PRINCIPES DE BASE DU LANGAGE C++
Les structures de contrôle à Ruptures de Séquence à break

¤ 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é.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 97


PRINCIPES DE BASE DU LANGAGE C++
Les structures de contrôle à Ruptures de Séquence à continue

¤ L'instruction continue sert à "continuer" une boucle (for, while et do … while) avec la
prochaine itération.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 98


PRINCIPES DE BASE DU LANGAGE C++
Les fonctions en C++

¤ 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).

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 99


PRINCIPES DE BASE DU LANGAGE C++
Les fonctions (methodes) à Déclaration d’une fonction

¤ Toute fonction doit être déclarée avant d’être appelée pour la première fois.

¤ La définition d’une fonction peut faire office de déclaration.

¤ 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

¤ Toute fonction doit être définie avant d’être utilisée.

¤ 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.

¤ C'est ce qu'on appelle la surcharge d'une fonction.

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.

¤ La signature d'une fonction


correspond aux
caractéristiques de ses
paramètres
> leur nombre
> le type respectif de
chacun d'eux

¤ 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!

¤ Il y a quelques règles que vous


devez retenir pour les valeurs par
défaut:
¤ Les valeurs par défaut doivent
se trouver à la fin de la liste
des paramètres.
¤ Vous pouvez rendre tous les
paramètres de votre fonction
facultatifs.

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

¤ Consiste à passer l'adresse d'une variable en paramètre. Toute modification du


paramètre dans la fonction affecte directement la variable passée en argument
correspondant, puisque la fonction accède à l’emplacement mémoire de son argument.

¤ Il existe 2 possibilités pour transmettre des paramètres par variables :


> Les références
> Les pointeurs

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

¤ Consiste à passer une référence de la variable en argument. Ainsi, aucune variable


temporaire ne sera créée par la fonction et toutes les opérations (de la fonction) seront
effectuées directement sur la variable. Le plus simple est d’utiliser le mécanisme de
référence « & ».

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

¤ Consiste à passer l'adresse d'une variable en paramètre. Toute modification du


paramètre dans la fonction affecte directement la variable passée en argument
correspondant, puisque la fonction accède à l’emplacement mémoire de son argument.
¤ Le pointeur indique au compilateur que ce n’est pas la valeur qui est transmise, mais
une adresse (un pointeur).

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.

¤ On peut par exemple représenter la chaîne « Bonjour » de la manière suivante

¤ Les chaînes de caractère peuvent être saisies au clavier et affichées à l’écran grâce
aux objets habituels cin et cout.

¤ On peut utiliser un vector si l'on souhaite changer la longueur: vector<char> texte;

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.

¤ La création d'une variable string ressemble beaucoup à la création d'une variable


classique comme int ou double:

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

¤ La concaténation de deux chaine permet d’assembler deux chaines de caractères. Il se


fait en utilisant l’operateur + (Surcharge des operateurs).

¤ Par défaut, lorsqu'on saisit une chaîne


de caractères en utilisant cin, le
séparateur est l'espace : cela empêche
de saisir une chaîne de caractères
comportant un espace.
¤ La fonction getline(iostream &,string)
permet de saisir une chaîne de
caractères en utilisant le passage à la
ligne comme séparateur : notre chaîne
de caractères peut alors comporter des
espaces.
¤ On peut utiliser une autre syntaxe de
concaténation: s1.append (s2) qui est
équivalente à s1 = s1+s2

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

¤ Il y a deux façons d’allouer de la mémoire en C++


> Allocation statique : La réservation mémoire est déterminée à la compilation.
L'espace alloué statiquement est déjà réservé dans le fichier exécutable du
programme lorsque le système d'exploitation charge le programme en mémoire
pour l'exécuter. L'avantage de l'allocation statique se situe essentiellement au
niveau des performances, puisqu'on évite les coûts de l'allocation dynamique à
l'exécution.
> Allocation dynamique: La mémoire est réservée pendant l’exécution du porgramme
L'espace alloué dynamiquement ne se trouve pas dans le fichier exécutable du
programme lorsque le système d'exploitation charge le programme en mémoire
pour l'exécuter.
Par exemple, les tableaux de taille variable (vector), les chaînes de caractères de type
string.

¤ Dans le cas particulier des pointeurs, l’allocation dynamique permet également de


réserver de la mémoire indépendamment de toute variable: on pointe directement sur
une zone mémoire plutôt que sur une variable existante.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 114
ALLOCATION DE LA MEMOIRE
Allocation d’une case memoire

¤ C++ possède deux opérateurs new et delete permettant d’allouer et de libérer


dynamiquement de la mémoire.
> Syntaxe: pointeur = new type è Réserve une zone mémoire de type type et
l’affecte l’adresse dans la variable pointeur.

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 115
ALLOCATION DE LA MEMOIRE
Libérer la mémoire allouée

¤ Syntaxe : delete pointeur è libère la zone mémoire allouée au pointeur

¤ 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

¤ Syntaxe: new nom_type [n]


> Permet d'allouer dynamiquement un espace mémoire nécessaire pour un tableau
de n éléments de type nom_type.

¤ Syntaxe : delete [ ] adresse


> Permet de libérer l'emplacement mémoire désigné par adresse alloué
préalablement par new[ ]

COURS DE PROGRAMMATION EN C++ 2019-2020 ENSA KENITRA – UNIVERSITÉ IBN TOUFAIL 119
ALLOCATION DE LA MEMOIRE
Allocation dynamique de tableau bidimensionnel

¤ Pour allouer un tableau bidimentieniel:

¤ Permet d'allouer dynamiquement un espace mémoire nécessaire pour un tableau de


ligne × colonne éléments de type type.

¤ 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

Vous aimerez peut-être aussi