Vous êtes sur la page 1sur 50

Année académique : 2022/2023

EMSI - Tanger

Généralités sur le langage C++

PROGRAMMATION ORIENTÉE OBJET


Pr. Zaynab El Khattabi
Le langage C++

▪ Début en 1983.
▪ Amélioration du langage C:
▪ Abstraction de données
▪ Programmation orientée objet
▪ Programmation générique
▪ Très utilisé !

Programmer:
Une fois trouvé l’algorithme, programmer en C++ comporte 3 phases:
1. Editer le programme – avec votre éditeur de texte favori. . .
2. Compiler le programme (avec g++)
3. Exécuter le programme
4. TESTER et DEBUGGER : retour au point 1 !
Le langage C++ - Exemple

Premier programme:
Structures de base du C++

Programmation
Les briques de base du langage:

▪ Ce qui permet de stocker des données: types, variables, tableaux,


etc.
▪ Les expressions qui permettent de manipuler les données.
▪ Les instructions pour construire les algorithmes.
Structures de base du C++
Types, variables...

Types de base
▪ vide : void . Aucune variable ne peut être de ce type.

▪ entiers, par taille-mémoire croissante :


• char, stocké sur un octet ; valeurs : de −27 à 27 − 1 (−128 à 127),
• short, stocké sur 2 octets ; valeurs : de −215 à 215 − 1 (−32768 à
32767),
• long, stocké sur 4 octets ; valeurs : de −231 à 231 − 1,
• int, coïncide avec short ou long, selon l’installation.

▪ réels, par taille-mémoire croissante :


• float, stocké sur 4 octets ; précision : environ 7 chiffres,
• double, stocké sur 8 octets ; précision : environ 15 chiffres,
• long double, stocké sur 10 octets ; précision : environ 18 chiffres.
Structures de base du C++
Types, variables...

Variables:
Une variable est caractérisée par :
▪ son nom
▪ son type précisant la nature de cette variable (nombre entier,
caractère, objet etc.),
▪ sa valeur qui peut être modifiée à tout instant.

Durant l’exécution d’un programme, à toute variable est attachée une


adresse : nombre entier qui indique ou se trouve stockée en mémoire
la valeur de cette variable.
Structures de base du C++
Types, variables...
Définition de variable:

Syntaxe : type v;
• int p ;
• double x ;

▪ Toute variable doit être définie avant d’être utilisée !


▪ Une définition peut apparaître n’importe ou dans un programme.
▪ Une variable est définie jusqu’à la fin de la première instruction
composée (marquée par }) qui contient sa définition.
▪ (Une variable définie en dehors de toute fonction – et de tout espace
de nom – est une variable globale).
Structures de base du C++
Types, variables...

Définition de variable
▪ Une variable peut être initialisée lors de sa déclaration, deux
notations sont possibles :

int p=34 ; int p (34) ;


double x=12.34 ; double x (12.34) ;

▪ Une variable d’un type élémentaire qui n’est pas initialisée, n’a
pas de valeur définie: elle peut contenir n’importe quoi.
Structures de base du C++
Types, variables...

Constantes symboliques
Syntaxe : const type nom = val ;
Exemple: const int Taille = 100 ;

▪ Il ne sera pas possible de modifier Taille dans le reste du


programme (erreur à la compilation). . .
Structures de base du C++
Types, variables...

Chaînes de caractères
Il existe une classe string, ce n’est pas un type élémentaire.
Pour l’utiliser, il faut placer tête du fichier :
# include <string>

string t ; définit t comme une variable...


string mot = "bonjour" ;
s.size() représente la longueur de s
s[i] est le i-ème caractère de s ( i = 0,1,. . . s.size()-1)
s+t est une nouvelle chaîne correspondant à la concaténation de s et t.
Structures de base du C++
Types, variables...

Tableaux
▪ Pour utiliser la classe vector, il faut placer en tête du fichier :
# include <vector>
▪ Un tableau est typé:
vector<int> Tab(100,5) ;
vector<int> Tab(50) ;
vector<double> T ;

▪ Structure générale: vector< type > Nom(n,v) ;


vector< type > Nom1 = Nom2 ;
▪ Les valeurs de Nom2 sont alors recopiées dans Nom1.

▪ T.size() correspond à la taille de T.


Structures de base du C++
Types, variables...

Tableaux
▪ T[i] désigne le i-ème élément avec i = 0, . . . T.size()-1.
▪ vector<vector<int> > T définit un tableau à deux dimensions.

▪ Pour l’initialiser, on peut utiliser l’instruction suivante :


vector<vector<int> > T2(100,vector<int>(50,1)) ;
On initialise chacune des 100 cases de T2 avec un tableau de taille 50
rempli de 1.
Structures de base du C++
Visibilité d’une variable

▪ Le domaine de visibilité d’une variable est limité au bloc ou cette


variable est déclarée, et après sa déclaration.
▪ On dit que les variables déclarées dans un bloc sont locales à ce
bloc.
▪ Si une variable est locale à un bloc B, on ne peut y faire référence
en dehors de ce bloc, mais on peut l’utiliser à l’intérieur de B et dans
tout bloc inclus lui-même dans B.
▪ Dans un même bloc, il est interdit de déclarer deux variables avec le
même nom. Mais cela est possible dans deux blocs distincts, même
si l’un des blocs est inclus dans l’autre.
▪ Lorsque dans un fichier, une variable est déclarée en dehors de tout
bloc (au niveau principal),
▪ on dit qu’elle est globale ; elle est alors visible de tout le fichier, à
partir de l’endroit ou elle est déclarée.
▪ Cette règle de visibilité s’appliquera également aux fonctions.
Structures de base du C++
Expressions

▪ En combinant des noms de variables, des opérateurs, des


parenthèses et des appels de fonctions, on obtient des expressions.
▪ Une règle simple à retenir :
En C++, on appelle expression tout ce qui a une valeur.
Opérateurs arithmétiques
+ : addition,
- : soustraction,
* : multiplication,
/ : division. entre deux entiers, donne le quotient entier, (19 / 5 vaut 3)
% : entre deux entiers, donne le reste modulo. (19 % 5 vaut 4)
Structures de base du C++
Expressions

Affectation
En C/C++, l’affectation est une expression:
Soient v une variable et expr une expression.
v = expr affecte la valeur de expr à la variable v et retourne la
valeur affectée à v comme résultat.

Exemple:
i = (j = 0) affecte 0 à j puis à i et retourne 0 !!
Structures de base du C++
Expressions

Opérateurs de comparaison
< (inférieur), <= (inférieur ou égal), == (égal), > (supérieur),
>= (supérieur ou égal) et != (différent)

Opérateurs booléens
&& représente l’opérateur “ET”, || représente le “OU”, et !
représente le “NON”.

Exemple: ((x<12) && ((y>0) || !(z>4)))


Structures de base du C++
Expressions

++ : incrémentation. Si i est de type entier, les expressions i++ et ++i


ont toutes deux pour valeur la valeur de i. Mais elles ont également un
effet de bord qui est :

▪ pour la première, d’ajouter ensuite 1 à la valeur de i (post-


incrémentation),

▪ pour la seconde, d’ajouter d’abord 1 à la valeur de i (pré-


incrémentation).

-- : décrémentation. i-- et --i fonctionnent comme i++ et ++i, mais


retranchent 1 à la valeur de i au lieu d’ajouter 1.
Structures de base du C++
Expressions

Evaluation des expressions booléennes:

• Dans e1 && e2, la sous-expression e2 n’est évaluée que si e1


a été évaluée à ’true’.
if (i >=0 && T[i] > 20) ….

• Dans e1 || e2, la sous-expression e2 n’est évaluée que si e1


a été évaluée à ’false’.
if (i<0 || T[i] > 20) …..
Structures de base du C++
Affectation

Conversion de type
L’expression d’affectation peut provoquer une conversion de type.
Exemple:
int i;
float x;

▪ Si i vaut 3, l’expression x = i donne à x la valeur 3.0 (conversion


entier → réel).
▪ Inversement, si x vaut 4.21, l’expression i = x donne à i la valeur 4,
partie entière de x (conversion réel → entier).
On peut également provoquer une conversion de type grâce à
l’opérateur () (type casting).
Exemple:
(int)x est de type int et sa valeur est la partie entière de x.
Structures de base du C++

Opérateurs d’entrées-sorties

Ce sont les opérateurs << et >>, utilisés en conjonction avec des objets
prédéfinis cout et cin déclarés dans <iostream>
(ne pas oublier la directive #include <iostream> en début de fichier).

Formes :
cout << <expression> : affichage à l’écran de la valeur de
<expression>,
cin >> <variable> : lecture au clavier de la valeur de <variable>
Structures de base du C++

Formatage des sorties numériques


On peut modifier l’apparence des sorties grâce aux expressions
suivantes :
▪ endl provoque un passage à la ligne
▪ setfill(c) fixe le caractère de remplissage (si ce n’est pas un blanc)
▪ setprecision(p) fixe le nombre de chiffres affichés
▪ setw(n) fixe la largeur de l’affichage
▪ setbase(b) fixe la base de numération
Pour les utiliser, inclure la librairie <iomanip.h>.
Structures de base du C++
Instructions usuelles

▪ Définition de variables, fonctions, types etc.


▪ expr ;
▪ { liste d’instructions } : instruction composée.
Structures de base du C++
Instructions usuelles

La boucle FOR
for (expr1 ;expr2 ;expr3) instr
Structures de base du C++
Instructions usuelles

La boucle WHILE
while (expr) instr
Structures de base du C++
Instructions usuelles

La boucle DO
do instr while (expr) ;
Structures de base du C++
Structure générale d’un programme

▪ Un programme C++ est réparti dans un ou plusieurs fichiers.


▪ Chacun peut contenir des définitions/déclarations de fonctions, des
définitions de types et des définitions de variables globales.
▪ Il existe une seule fonction main: c’est la fonction qui sera exécutée
après la compilation.
▪ Le profil de main est :

int main() ou
int main( int argc, char ** argv ) pour passer des arguments.
Structures de base du C++
Structure générale d’un programme

Un programme complet:
Structures de base du C++
Structure générale d’un programme

Exemple: Ecrire le programme suivant (correctement écrit en C) en C++:


Structures de base du C++
Structure générale d’un programme

Exemple: Solution

#include <iostream>
using namespace std;

int main()
{
int n;
float x;
cout<<"donnez un entier et un flottant« <<endl;
cin>>n>>x;
cout<<"le produit de "<<n<<" par "<<x<< "\n est : "<<n*x;
}
Structures de base du C++
Les fonctions

Définition de fonction:
type nom( liste des paramètres) { corps }

▪ ‘type’ est le type du résultat de la fonction (void s’il s’agit d’une


procédure)
▪ La liste des paramètres (paramètres formels): type1 p1, ..., typen pn
▪ Le corps décrit les instructions à effectuer.
▪ Le corps utilise ses propres variables locales, les éventuelles
▪ variables globales et les paramètres formels.
▪ Si une fonction renvoie un résultat, il doit y avoir (au moins) une
instruction: return expr ;
▪ Dans le cas d’une procédure, on peut utiliser: return ;
Structures de base du C++
Les fonctions

Exemple de fonctions:
Structures de base du C++
Les fonctions

Appel d’une fonction


nom(liste des arguments)

La liste des arguments (paramètres réels) est expr1, expr2, . . . exprn


ou chaque expri est compatible avec le type typei du paramètre formel
pi.

Exemple :
int k=34, t=5, m ;
m = max(k,2*t+5) ;
Structures de base du C++
Les fonctions

Exemple:
Structures de base du C++
Les fonctions

Exemple: Afficher le contenu d’un tableau d’entiers


Structures de base du C++
Les fonctions

Exemple: Saisie d’un tableau d’entiers


Structures de base du C++
Les fonctions

Exemple: Recherche du plus grand élément


Structures de base du C++
Les fonctions

Exemple: Recherche de l’indice du plus grand élément


Structures de base du C++
Les Tableaux – les vecteurs

Manipulation des tableaux avec la notation classique type nom_Tab[taille]:

✓ Créer et remplir un tableau


✓ Afficher un tableau
✓ Recherche du Max et Min / leurs indices dans un tableau
✓ Trier un tableau
✓ Inverser un tableau
✓ Insérer un élément au milieu d’un tableau
✓ Supprimer un élément au milieu d’un tableau
Structures de base du C++
Les Tableaux – les vecteurs

▪ vector est un conteneur homogène, définie dans l'en-tête <vector>, implémente un


conteneur de séquence qui fournit un accès aléatoire rapide à n'importe quel élément
et une insertion et une suppression rapide à la queue.
▪ Un vecteur est une séquence d'éléments avec une extrémité ouverte
▪ La classe vector est implémentée sous la forme d'un tableau alloué en mémoire mais
avec des fonctionnalités supplémentaires.
▪ Comme un tableau, il dispose d'un mécanisme d'indexation pour accéder à chaque
élément.
▪ Contrairement à un tableau, un vecteur se redimensionne chaque fois que plus
d'éléments sont nécessaires.
Structures de base du C++
Les Tableaux – les vecteurs

La classe vector possède un constructeur par défaut, deux constructeurs de paramètres,


un constructeur de copie et un opérateur d'affectation.

vector <Type> vec; // Construit un vecteur vide


vector <Type> vec(4 , valeur); // Construit un vecteur de 3 éléments de la valeur
donnée (valeur)
vector <Type> vec[debut,fin); // Construit un vecteur créé à partir d'une autre
séquence
vector <Type> vec(autreVector); // constructeur par copie
vector <Type> vec = autreVector; // opérateur d'affectation
Structures de base du C++
Les Tableaux – les vecteurs

Accéder aux éléments


▪ La classe vector fournit les fonctions membres suivantes pour accéder aux éléments
déjà présents dans le vecteur.
v.front(); // Accéder au premier élément
v.back(); // Accéder au dernier élément
v[i]; // Accéder à l'élément à l'indice i
v.at(i); // Accéder à l'élément à l'indice i

▪ Il est recommandé d’utiliser vec.at() car il contrôle la plage et lève une exception
lorsque l'indice est hors plage.
Structures de base du C++
Les Tableaux – les vecteurs

Insertion:
▪ La classe vector définit plusieurs fonctions membres qui insèrent un ou plusieurs
éléments dans le conteneur.
▪ L'insertion à la queue est très efficace et ne nécessite pas de déplacement des
éléments dans le vecteur.
▪ L'insertion au milieu et à l'avant nécessite une réallocation des éléments en mémoire.

v.push_back(valeur); // Insérer la valeur à la queue


v.insert(iterator_pos, valeur) // Insérer la valeur avant
pos(itérateur)
v.insert(iterator_pos, n, valeur); // insérer n copies de valeur avant
pos(itérateur)
Structures de base du C++
Les Tableaux – les vecteurs

Déclaration et initialisation :

std : : vector<int> v(5) ; /* définit un vecteur de 5 entiers*/

Quelques fonctions utiles de la classe vector :

▪ push_back : Insère la valeur à la queue


▪ pop_back : supprime le dernier élément
▪ size : retourne le nombre d'éléments du vecteur
▪ erase : supprime un élément ou un intervalle d'un vecteur et déplace les éléments
suivants
▪ clear : Supprime tous les éléments
Structures de base du C++
Les Tableaux – les vecteurs

Parcours:
▪ Boucle for :
for ( int i = 0 ; i < v.size ( ) ; i++)
cout << v [ i ] ;

▪ Iterator : un itérateur est un objet qui pointe vers des éléments d'un tableau, d'un container
(map, vector, . . . ), . . . .
for (vector<int >:: iterator it =v.begin( ) ; it != v.end( ) ; it++ )
cout << *it ;
Structures de base du C++
Les Tableaux – les vecteurs

Parcours

▪ Range based loop (depuis C++ 11) :


for ( int i : v ) cout << i ; /* i : une variable dont le type est celui des
éléments de la séquence représentée par v*/

▪ Auto (Depuis C++ 11) :

for ( auto i : v )
cout << i ;

auto : Spécifie que le type de la variable sera déduit automatiquement lors de son
initialisation.
Structures de base du C++
Les Tableaux – les vecteurs

Suppression:
▪ Suppression d'un seul élément :
v.erase ( v.begin( )+2) ;

▪ Suppression des éléments entre deux positions :


v.erase ( v.begin( ) , v.begin( )+3) ;

Remarque : La fonction retourne l’itérateur pointant sur l'élément qui suit le dernier
élément supprimé
Structures de base du C++
Les Tableaux – les vecteurs

En utilisant la librairie algorithm.h, on peut utiliser quelques fonctions sur les vecteurs:

✓ std::reverse (p.begin(), p.end()) : permet d’inverser l’ordre des éléments du vecteur p.


✓ *max_element(p.begin(),p.end()): retourne l’element maximal du vecteur p.
✓ *min_element(p.begin(),p.end()): retourne l’élement minimal du vecteur p.
✓ sort (p.begin(), p.end()): trie le vecteur dans l’ordre croissant (par défaut)
✓ find (p.begin(), p.end(), 30): recherche la Valeur 30 dans le vecteur p et retourne un itérateur sur
l’élément 30 s’il existe. Sinon, il retourne l’itérateur pointant sur le dernier element (p.end()).

D’autres fonctions pour manipuler les vecteurs:

✓ void flip(): inverse toutes les valeurs dans le conteneur : toutes les instances de true deviennent false et
toutes les instances de false deviennent true.
✓ resize(valeur): redimensionne le vecteur avec une nouvelle capacité « valeur », mais il ne détruit pas les
éléments.
✓ shrink_to_fit(): réduit la capacité du conteneur et détruit tous les éléments en dehors de la nouvelle capacité.
Structures de base du C++
Les Tableaux – les vecteurs

Exemple:

int main()
{
// vecteur initial
vector<int> v(10);
for (int i = 0; i < 10; i++)
v[i] = i;

cout << “taille initiale du vecteur: " << v.size();


cout << "\nLes éléments du vecteurs sont: ";
for (int i = 0; i < 10; i++)
cout << v[i] << " ";
Structures de base du C++
Les Tableaux – les vecteurs

Exemple (suite):

// changer la taille du vecteur sans détruire les élements


v.resize(5);
cout << "\n\nTaille du vecteur après redimensionnement : “ << v.size();
cout << "\nLes éléments du vecteur après redimensionnement: ";
for (int i = 0; i < 10; i++)
cout << v[i] << " ";
// réduire la taille du vecteur avec shrink et détruire les éléments
v.shrink_to_fit();
cout << "\n\nTaille du vecteur après shrink_to_fit(): " << v.size();
cout << "\nLes éléments du vecteur après redimensionnement: ";
for (int i = 0; i < 10; i++)
cout << v[i] << " ";
}

Vous aimerez peut-être aussi