SlideShare une entreprise Scribd logo
1  sur  48
Programmation Orientée Objets en C++
R. Ben Abbou & A. Zahi
FSTF, Fez, Maroc
LST INFO, FSTF 1
Programmation Orientée Objets
Chapitre 2
Améliorations non objets de C++ par rapport au
langage C
LST INFO, FSTF 2
Plan du Chapitre
 Introduction
 Ecarts de C++ par rapport à C ANSI
 Apports de C++
LST INFO, FSTF 3
Introduction
 C++ est le C enrichie par les possibilités de la POO
 Evolution de C (C++ signifie incrémentation du C)
 C++ est un langage hybride
 Classique (procédural)
 Orienté Objet
LST INFO, FSTF 4
Introduction
 C++ = C – E + S +P
 C : Norme ANSI de C
 E : Ecarts par rapport à la norme de C
 S : Spécificités non objet de C++
 P : Possibilités objets de C++ C
E
S
P
C++
LST INFO, FSTF 5
Historique de C++
 C++ a été développé dans les labos AT&T BELL au début
des années 1980 par Bjarne STROUSTRUP
 1979 développement de « C with classes »
 1983/1984 langage C++
 1987 version 1.2 de C++ (début d’une large diffusion)
 1998 norme ISO : standard du C++
LST INFO, FSTF 6
Ecarts/C norme ANSI
 Définitions des fonctions
 Prototypes des fonctions
 Arguments et valeurs de retour
 Constantes
LST INFO, FSTF 7
Ecarts / C norme ANSI —Définitions des fonctions
 En C, il y a deux manières pour définir une fonction :
 En C++ seule la deuxième forme est retenue
Forme 2
int fonct(int u,int v)
{
…
}
Forme1
int fonct(u,v)
int u;
int v;
{
…
}
LST INFO, FSTF 8
 Le prototype (squelette) est la déclaration d’une fonction qui
sera invoquée avant sa définition
 En C, le prototype d’une fonction peut :
 Être Omis (cas d’une fonction qui retourne un entier)
 Se restreindre au nom de la fonction et au type de retour :
float fonct();
 Être complet : float fonct(int, double, float);
Ecarts /C norme ANSI— Prototypes de fonctions
LST INFO, FSTF 9
#include<stdio.h>
void main()
{
void saisie_produit();
/* le prototype de la fonction
produit est omis car elle retourne
un entier*/
int a,b,r;
printf("saisir deux entiers:");
scanf("%d%d",&a,&b);
r= produit(a,b);
printf("n résultat = %d",r);
saisie_produit();
}
int produit(a,b)
int a; int b;
{
int r;
r=a*b;
return(r);
}
void saisie_produit()
{
int a,b,r;
printf("saisir deux entiers:");
scanf("%d%d",&a,&b);
r=a*b;
printf("n résultat = %d",r);
}
Ecarts /C norme ANSI— Prototypes de fonctions
 Exemple en C
LST INFO, FSTF 10
 En C++
 Le prototype est obligatoire
 Le prototype de la fonction doit préciser:
 le nom de la fonction
 le type de retour
 le type de chaque paramètre
Ecarts / C norme ANSI —Prototypes de fonctions
LST INFO, FSTF 11
 Exemple en C++
#include<stdio.h>
void saisie_produit();
int produit(int,int);
int main() {
int a,b,r;
printf("nsaisir deux entiers:");
scanf("%d%d",&a,&b);
r= produit(a,b);
printf("n résultat = %d",r);
saisie_produit();
}
int produit(int a,int b){
int r;
r=a*b;
return(r);
}
void saisie_produit(){
int a,b,r;
printf("nsaisir deux entiers:");
scanf("%d%d",&a,&b);
r=a*b;
printf("n résultat = %d",r);
}
Ecarts / C norme ANSI —Prototypes de fonctions
LST INFO, FSTF 12
 Fonctions sans arguments
En C, deux manières :
 float fonct(void);
 float fonct();
En C++
 float fonct();
Ecarts/C norme ANSI — Arguments et valeurs de retour
LST INFO, FSTF 13
 Fonctions sans valeur de retour
 En C, deux manières :
 void fonct(int, char);
 fonct(int, char);
 En C++
 void fonct(int, char);
Ecarts/C norme ANSI —Prototypes de fonctions en C++
LST INFO, FSTF 14
 Constantes locales
Pas de différence entre C et C++
La porté est locale au bloc ou à la fonction
Ecarts / C norme ANSI —Porté des constantes
LST INFO, FSTF 15
 Constantes globales en C
La porté de la constante n’est pas limitée au fichier qui
la contient
 Définir la constante dans un fichier const c =10 ;
 Référencer la constante dans les autres fichiers par extern
const c ;
Ecarts / C norme ANSI — Porté des constantes
LST INFO, FSTF 16
 Constantes globales en C: Exemple
#include<stdio.h>
#include<stdlib.h>
#include "constglob.h"
int main()
{
int a=10,b=20;
extern c;
printf(" le résultat est %d",a+b+c);
}
/* Fichier constglob.h */
const c= 100;
Ecarts / C norme ANSI — Porté des constantes
LST INFO, FSTF 17
 Constantes globales en C++
La porté d’une constante est limitée au fichier source
qui la contient
Exemple
Ecarts / C norme ANSI — Porté des constantes
#include<stdio.h>
#include<stdlib.h>
#include "constglob.h"
int main()
{
int a=10,b=20;
extern c; //Erreur
printf(" le résultat est %d",a+b+c);
}
LST INFO, FSTF 18
 Commentaire
 Primitives d’Entrée/Sortie cin, cout
 Déclaration des variables
 Références
 Surdéfinition des fonctions
 Arguments par défaut
 Fonctions en ligne
 Déclaration des structures
 Nouveaux opérateurs new, delete
 Gestion des exceptions
Apports de C++
LST INFO, FSTF 19
 Commentaire de C
/* commentaire classique de C
qui s’étend sur plusieurs lignes */
 Commentaire introduit par C++
// commentaire de ligne
Apports de C++ — Commentaire —
LST INFO, FSTF 20
 En plus des primitives d’E/S définies dans C, C++ offre
deux nouvelles primitives
 cin : flot d’entrée
 cout : flot de sortie
 Caractéristiques
 Simplicité: Pas besoin d’indiquer le format des variables
 Extensibilité à d’autres types
Apports de C++ — Entrées/Sorties
LST INFO, FSTF 21
 Cout
 Permet d’afficher une chaine, la valeur d’une variable ou la
valeur d’une expression
 cout << ’’ une chaine ’’;
 cout << code ; // code est une variable
 cout << 3.14 * r * r ; // Surface d’un cercle
 Permet d’afficher plusieurs objets avec une seule instruction:
 cout << ’’ surface = ’’ << 3.14 * r * r ;
 endl : mot réservé qui permet le retour à la ligne
 cout << ’’ surface = ’’ << 3.14 * r * r << endl;
Apports de C++ — Entrées/Sorties
LST INFO, FSTF 22
 Cout Exemple
Instructions Affichage
int x=3; double y =4.5;
cout <<“ valeur de x=“<<x;
cout<<“; y=“<<y<<endl;
cout <<“x+y”<<x+y;
valeur de x=3; y=4.5
x+y=7.5
int x=3; double y =4.5;
cout <<“x = “<<x<<“n”;
cout<<“y=“<<y;
cout <<“nx+y”<<x+y;
x = 3
y=4.5
x+y=7.5
Apports de C++ — Entrées/Sorties
LST INFO, FSTF 23
 Cin
 Permet de saisir la valeur d’une ou plusieurs variables
 cin >> var1 >> var2>> … >> varn;
 Exemple
#include<iostream>
Using namespace std;
int main()
{
int n; float x; char c;
cout << ’’entrer un entier, un réel ensuite un caractère’’;
cin >> n >> x >> c;
return 0;
}
Apports de C++
— Entrées/Sorties—
LST INFO, FSTF 24
 Plus de liberté sur l’endroit de déclaration
Déclaration n’importe où dans le programme
 Pas forcément au début (cas du langage C)
Déclaration à l’intérieur des structures de contrôle
 for(int i=0;…), if(int i = random(100)) , while(), switch()
Portée limitée au bloc où la variable a été définie
Apports de C++ — Déclaration des variables
LST INFO, FSTF 25
 Plus de liberté sur l’endroit de déclaration — Exemple
#include <iostream>
using namespace std;
int main()
{
int a, b;
cout << "nsaisir deux entiers:";
cin >> a >> b;
int r,f; // autorisé
r = a + b; f = 1;
for(int i=1;i<r;i++) // autorisé
f=f*i;
cout << "nfact = " << f;
return 0;
}
Apports de C++ — Déclaration des variables
LST INFO, FSTF 26
 C’est quoi une référence ?
Un type qui permet une manipulation plus facile des
adresses
Une variable de type référence permet de designer un
espace mémoire existant
Apports de C++ — Références
LST INFO, FSTF 27
 Déclaration
Une référence doit être toujours initialisée lors de sa
création.
type &ref = var;
Objet référencé
Type de l’objet
référencé
Variable
référence
int a, b;
int &refa =a;
int &ref ; // erreur
Apports de C++ — Références
LST INFO, FSTF 28
 Utilité : Une variable de type référence est utilisée pour
désigner une variable existante (alias, synonyme)
designer un objet existant en mémoire et qui n’a pas
de nom
int a =5; int t[10];
int &refa =a;
int &premier =t[0];
int &dernier =t[9];
refa et a représentent
le même espace
Attribue un nom
au premier
élément de t
Attribue un nom
au dernier
élément de t
Apports de C++ — Références
LST INFO, FSTF 29
 Opérations sur les références
 Toute opération effectuée sur l’objet référencé se répercute sur
la référence et vice versa (même espace mémoire)
int a = 5;
int &refa =a;
a++;
cout << ’’refa = ’’ << refa;
refa= 0;
cout << ’’a = ’’ << a;
refa = 6
a = 0;
Apports de C++ — Références
LST INFO, FSTF 30
 Opérations
 Une fois initialisée, une référence ne peut être changée
int a;
Int b ;
int &refa =a;
&refa = y; // erreur
& refa = &y; // erreur
Apports de C++ — Références
LST INFO, FSTF 31
 Passage des paramètres
 En C, un seul mode de passage de paramètres: passage par
valeur
 En C++, deux modes : par valeur et par référence
Apports de C++ — Références
LST INFO, FSTF 32
 Passage des paramètres par référence
 Le changement d’un paramètre est conservé après la
terminaison de la fonction
 Évite la gestion complexe des pointeurs
 Offre une meilleure lisibilité
Apports de C++ — Références
LST INFO, FSTF 33
 Passage des paramètres par référence
 Syntaxe de déclaration
type fonct (type & param,…)
 Appel de la fonction
fonct(param,…);
Apports de C++ — Références
LST INFO, FSTF 34
 Passage des paramètres par référence: Exemple
void swap(int &i, int &j)
{
int k = i;<
i = j;
j = k;
}
int main()
{
int a=1;
Int b = 2;
cout << ’’avant ’’;
cout << ’’a = ’’ << a << ’’b = ’’
<< b;
swap(a, b);
cout << ’’avant<<<<<<< ’’;
cout << ’’a = ’’ << a << ’’b = ’’
<< b;
}<
Apports de C++ — Références
LST INFO, FSTF 35
 Plusieurs fonctions portent le même nom
 Plus de lisibilité : pas besoin de chercher plusieurs identificateurs pour
la même action
 Les fonctions différent dans le contenu selon le type et/ou le
nombre de paramètres
 Sémantiquement les fonctions font la même action (ex
afficher)
 Le compilateur choisit la fonction à invoquer selon les
paramètres effectifs
Apports de C++ — Surdéfinition de fonctions
LST INFO, FSTF 36
 Exemple
#include<stdio.h>
int produit(int a,int b)
{ int r;
r=a*b;
return(r);
}
int produit(int a,int b, int c)
{ int r;
r=a*b*c;
return(r);
}
float produit(float a,float b)
{ float r;
r=a*b;
return(r);
}
int main()
{
int a,b;
cout << "nsaisir deux entiers:";
cin >> a >> b;
int r,f;
r=produit(a,b);
cout << "n résultat = " << r;
r=produit(a,b,r);
cout << "n résultat = " << r;
float x=2.4,y=3.5,z;
z=produit(x,y);
cout << "n résultat = " << z;
return 0;
}
Apports de C++ — Surdéfinition de fonctions
LST INFO, FSTF 37
 Possibilité de donner des valeurs par défaut à certains paramètres
omis lors de l’appel d’une fonction
prix_ttc(float prixht, float tva=0.2)
prix_ttc(300) // taux de tva par défaut
prix_ttc(300,0.1) // taux spécial de la tva
float fonct( int a=10,int b,int c=5) // faux
Apports de C++ — Arguments par défaut
 Seuls les derniers paramètres à droite peuvent avoir des valeurs
par défaut
LST INFO, FSTF 38
 Exemple
#include<stdio.h>
#include<stdlib.h>
using namespace std;
float prix_ttc(float pht, float tva=0.2)
{ float pttc;
pttc = pht*(1+tva);
return(pttc);
}
int main()
{
float p1,p2;
p1=prix_ttc(300); // taux de tva par défaut
p2=prix_ttc(300,0.1); // taux spécial de la tva
cout << "n" << p1 << "t"<< p2;
}
Apports de C++ — Arguments par défaut
LST INFO, FSTF 39
 Exemple
#include<stdio.h>
#include<stdlib.h>
#define carre(n) n*n
int main()
{
int a=2,b=3,r;
r=carre(a);
printf("n résultat = %d",r);
r=carre(a+b);
cout << "n résultat = « << r;
}
Apports de C++ —Macros en langage C
LST INFO, FSTF 40
 Alternative aux macros du préprocesseur
 Moins complexe et évite les sources d’erreur des macros
 #define carre(n) n*n
 Comment seront interprétés les appels : carre(a+b)
carre(++a) ?
 Vérification et contrôle des types
Apports de C++ —Fonctions en ligne
LST INFO, FSTF 41
 Syntaxe : Précéder la définition de la fonction par le mot
clé inline
 Exemple
#include <iostream>
using namespace std;
inline int carre(int n) { return(n*n); }
int main()
{
int a=2,b=3,r;
r=carre(a);
cout << "n résultat = " << r;
r = carre(++a);
cout << "n résultat = " << r << " et a= " << a << endl;
return 0;
}
Apports de C++ —Fonctions en ligne
LST INFO, FSTF 42
 Les fonctions en ligne sont insérées dans le code par le
compilateur à l’endroit de leur appel
 Evitent les opérations d’appel et de terminaison des fonctions
 Sont plus rapides
 Consomment plus d’espace mémoire
 Doivent être, normalement, de petite taille
Apports de C++ —Fonctions en ligne
LST INFO, FSTF 43
 Pas besoin de précéder le nom de la structure par le mot clé
struct après sa définition
 Exemple
Apports de C++ —Déclaration des structures
struct etudiant {
int CNE;
char nom[20];
char prenom[20];
};
int main()
{
Etudiant e1;
…
}
LST INFO, FSTF 44
 En plus des primitives de gestion de la mémoire du langage
C (malloc,free,…), C++ offre deux primitives new et delete
 new : permet d’allouer de la mémoire pour des objets
dynamiques
 delete : permet de libérer l’espace mémoire alloué par new
Apports de C++ —Opérateurs new, delete
LST INFO, FSTF 45
 Opérateur new
 Syntaxe
 Exemple
Apports de C++ —Opérateurs new, delete
adresse = new type;
ou
adresse = new type[taille];
int *pi, *pti;
pi = new int; // réservation de l’
espace pour un entier
pit = new int[10]; // réservation de
l’espace pour un
tableau d’entiers
LST INFO, FSTF 46
 Opérateur delete
 Syntaxe
 Exemple
Apports de C++ —Opérateurs new, delete
delete adresse
int *pi;
pi = new int; // réservation de l’
espace pour un entier
delete pi // libération de l’espace
occupé par pi
LST INFO, FSTF 47
 Exemple
#include<iostream>
#include<stdlib.h>
using namespace std;
int main()
{
int *t;
t=new int[10];
for(int i=1;i<10;i++)
t[i] = i*i;
for(int i=1;i<10;i++)
cout<<t[i]<<"n";
delete t;
}
Apports de C++ —Opérateurs new, delete
LST INFO, FSTF 48

Contenu connexe

Similaire à POO-chapitre2.pptx

Boosted Java to Native Interface (JNI)
Boosted Java to Native Interface (JNI)Boosted Java to Native Interface (JNI)
Boosted Java to Native Interface (JNI)Innobec
 
Cours C Avancé chapitre 2 et chapitre.pdf
Cours C Avancé  chapitre 2 et chapitre.pdfCours C Avancé  chapitre 2 et chapitre.pdf
Cours C Avancé chapitre 2 et chapitre.pdfc79024186
 
ESGAE_C#_2021-2024 Cours Avancé (('.pptx
ESGAE_C#_2021-2024 Cours Avancé (('.pptxESGAE_C#_2021-2024 Cours Avancé (('.pptx
ESGAE_C#_2021-2024 Cours Avancé (('.pptxLagloireSouamounou
 
Seance 4- Programmation en langage C
Seance 4- Programmation en langage CSeance 4- Programmation en langage C
Seance 4- Programmation en langage CFahad Golra
 
cours lanagage c avec des exemples d'application
cours lanagage c avec des exemples d'applicationcours lanagage c avec des exemples d'application
cours lanagage c avec des exemples d'applicationkamalomari2
 
Visual Studio 2008 Overview
Visual Studio 2008 OverviewVisual Studio 2008 Overview
Visual Studio 2008 OverviewGregory Renard
 
Découvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDécouvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDotNetHub
 
Interception de signal avec dump de la pile d'appel
Interception de signal avec dump de la pile d'appelInterception de signal avec dump de la pile d'appel
Interception de signal avec dump de la pile d'appelThierry Gayet
 
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)Tunisie collège
 
Chap 1 Initiation.pptx
Chap 1 Initiation.pptxChap 1 Initiation.pptx
Chap 1 Initiation.pptxolfaharrabi2
 
C++11 en 12 exemples simples
C++11 en 12 exemples simplesC++11 en 12 exemples simples
C++11 en 12 exemples simplesPethrvs
 
Formation python
Formation pythonFormation python
Formation pythonj_lipaz
 

Similaire à POO-chapitre2.pptx (20)

Language-C.ppt
Language-C.pptLanguage-C.ppt
Language-C.ppt
 
Formation python
Formation pythonFormation python
Formation python
 
Boosted Java to Native Interface (JNI)
Boosted Java to Native Interface (JNI)Boosted Java to Native Interface (JNI)
Boosted Java to Native Interface (JNI)
 
Cours C Avancé chapitre 2 et chapitre.pdf
Cours C Avancé  chapitre 2 et chapitre.pdfCours C Avancé  chapitre 2 et chapitre.pdf
Cours C Avancé chapitre 2 et chapitre.pdf
 
ESGAE_C#_2021-2024 Cours Avancé (('.pptx
ESGAE_C#_2021-2024 Cours Avancé (('.pptxESGAE_C#_2021-2024 Cours Avancé (('.pptx
ESGAE_C#_2021-2024 Cours Avancé (('.pptx
 
Ch04
Ch04Ch04
Ch04
 
Seance 4- Programmation en langage C
Seance 4- Programmation en langage CSeance 4- Programmation en langage C
Seance 4- Programmation en langage C
 
cours lanagage c avec des exemples d'application
cours lanagage c avec des exemples d'applicationcours lanagage c avec des exemples d'application
cours lanagage c avec des exemples d'application
 
Visual Studio 2008 Overview
Visual Studio 2008 OverviewVisual Studio 2008 Overview
Visual Studio 2008 Overview
 
Découvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCLDécouvrez C# 4.0 et les améliorations apportées à la BCL
Découvrez C# 4.0 et les améliorations apportées à la BCL
 
Interception de signal avec dump de la pile d'appel
Interception de signal avec dump de la pile d'appelInterception de signal avec dump de la pile d'appel
Interception de signal avec dump de la pile d'appel
 
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
 
Php4 Mysql
Php4 MysqlPhp4 Mysql
Php4 Mysql
 
C++11
C++11C++11
C++11
 
COURS_PYTHON_22.ppt
COURS_PYTHON_22.pptCOURS_PYTHON_22.ppt
COURS_PYTHON_22.ppt
 
Chap 1 Initiation.pptx
Chap 1 Initiation.pptxChap 1 Initiation.pptx
Chap 1 Initiation.pptx
 
C++ 11/14
C++ 11/14C++ 11/14
C++ 11/14
 
C++11 en 12 exemples simples
C++11 en 12 exemples simplesC++11 en 12 exemples simples
C++11 en 12 exemples simples
 
Formation python
Formation pythonFormation python
Formation python
 
Chap1_Entrees_Sorties.pptx
Chap1_Entrees_Sorties.pptxChap1_Entrees_Sorties.pptx
Chap1_Entrees_Sorties.pptx
 

Dernier

JTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdfJTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdfInstitut de l'Elevage - Idele
 
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdfJTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdfInstitut de l'Elevage - Idele
 
Algo II : les piles ( cours + exercices)
Algo II :  les piles ( cours + exercices)Algo II :  les piles ( cours + exercices)
Algo II : les piles ( cours + exercices)Sana REFAI
 
présentation sur la logistique (4).
présentation     sur la  logistique (4).présentation     sur la  logistique (4).
présentation sur la logistique (4).FatimaEzzahra753100
 
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...maach1
 
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...Institut de l'Elevage - Idele
 
Câblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfCâblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfmia884611
 
JTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdfJTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdfInstitut de l'Elevage - Idele
 
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdfSKennel
 

Dernier (11)

CAP2ER_GC_Presentation_Outil_20240422.pptx
CAP2ER_GC_Presentation_Outil_20240422.pptxCAP2ER_GC_Presentation_Outil_20240422.pptx
CAP2ER_GC_Presentation_Outil_20240422.pptx
 
JTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdfJTC 2024 - Réglementation européenne BEA et Transport.pdf
JTC 2024 - Réglementation européenne BEA et Transport.pdf
 
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdfJTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
JTC 2024 - SMARTER Retour sur les indicateurs de santé .pdf
 
Algo II : les piles ( cours + exercices)
Algo II :  les piles ( cours + exercices)Algo II :  les piles ( cours + exercices)
Algo II : les piles ( cours + exercices)
 
présentation sur la logistique (4).
présentation     sur la  logistique (4).présentation     sur la  logistique (4).
présentation sur la logistique (4).
 
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...
Cours-de-Ponts Cours de Ponts Principes généraux - Conception Méthodes de con...
 
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
JTC 2024 - Leviers d’adaptation au changement climatique, qualité du lait et ...
 
Câblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdfCâblage, installation et paramétrage d’un réseau informatique.pdf
Câblage, installation et paramétrage d’un réseau informatique.pdf
 
JTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdfJTC 2024 La relance de la filière de la viande de chevreau.pdf
JTC 2024 La relance de la filière de la viande de chevreau.pdf
 
JTC 2024 - DeCremoux_Anomalies_génétiques.pdf
JTC 2024 - DeCremoux_Anomalies_génétiques.pdfJTC 2024 - DeCremoux_Anomalies_génétiques.pdf
JTC 2024 - DeCremoux_Anomalies_génétiques.pdf
 
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdfSciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
SciencesPo_Aix_InnovationPédagogique_Atelier_APC.pdf
 

POO-chapitre2.pptx

  • 1. Programmation Orientée Objets en C++ R. Ben Abbou & A. Zahi FSTF, Fez, Maroc LST INFO, FSTF 1
  • 2. Programmation Orientée Objets Chapitre 2 Améliorations non objets de C++ par rapport au langage C LST INFO, FSTF 2
  • 3. Plan du Chapitre  Introduction  Ecarts de C++ par rapport à C ANSI  Apports de C++ LST INFO, FSTF 3
  • 4. Introduction  C++ est le C enrichie par les possibilités de la POO  Evolution de C (C++ signifie incrémentation du C)  C++ est un langage hybride  Classique (procédural)  Orienté Objet LST INFO, FSTF 4
  • 5. Introduction  C++ = C – E + S +P  C : Norme ANSI de C  E : Ecarts par rapport à la norme de C  S : Spécificités non objet de C++  P : Possibilités objets de C++ C E S P C++ LST INFO, FSTF 5
  • 6. Historique de C++  C++ a été développé dans les labos AT&T BELL au début des années 1980 par Bjarne STROUSTRUP  1979 développement de « C with classes »  1983/1984 langage C++  1987 version 1.2 de C++ (début d’une large diffusion)  1998 norme ISO : standard du C++ LST INFO, FSTF 6
  • 7. Ecarts/C norme ANSI  Définitions des fonctions  Prototypes des fonctions  Arguments et valeurs de retour  Constantes LST INFO, FSTF 7
  • 8. Ecarts / C norme ANSI —Définitions des fonctions  En C, il y a deux manières pour définir une fonction :  En C++ seule la deuxième forme est retenue Forme 2 int fonct(int u,int v) { … } Forme1 int fonct(u,v) int u; int v; { … } LST INFO, FSTF 8
  • 9.  Le prototype (squelette) est la déclaration d’une fonction qui sera invoquée avant sa définition  En C, le prototype d’une fonction peut :  Être Omis (cas d’une fonction qui retourne un entier)  Se restreindre au nom de la fonction et au type de retour : float fonct();  Être complet : float fonct(int, double, float); Ecarts /C norme ANSI— Prototypes de fonctions LST INFO, FSTF 9
  • 10. #include<stdio.h> void main() { void saisie_produit(); /* le prototype de la fonction produit est omis car elle retourne un entier*/ int a,b,r; printf("saisir deux entiers:"); scanf("%d%d",&a,&b); r= produit(a,b); printf("n résultat = %d",r); saisie_produit(); } int produit(a,b) int a; int b; { int r; r=a*b; return(r); } void saisie_produit() { int a,b,r; printf("saisir deux entiers:"); scanf("%d%d",&a,&b); r=a*b; printf("n résultat = %d",r); } Ecarts /C norme ANSI— Prototypes de fonctions  Exemple en C LST INFO, FSTF 10
  • 11.  En C++  Le prototype est obligatoire  Le prototype de la fonction doit préciser:  le nom de la fonction  le type de retour  le type de chaque paramètre Ecarts / C norme ANSI —Prototypes de fonctions LST INFO, FSTF 11
  • 12.  Exemple en C++ #include<stdio.h> void saisie_produit(); int produit(int,int); int main() { int a,b,r; printf("nsaisir deux entiers:"); scanf("%d%d",&a,&b); r= produit(a,b); printf("n résultat = %d",r); saisie_produit(); } int produit(int a,int b){ int r; r=a*b; return(r); } void saisie_produit(){ int a,b,r; printf("nsaisir deux entiers:"); scanf("%d%d",&a,&b); r=a*b; printf("n résultat = %d",r); } Ecarts / C norme ANSI —Prototypes de fonctions LST INFO, FSTF 12
  • 13.  Fonctions sans arguments En C, deux manières :  float fonct(void);  float fonct(); En C++  float fonct(); Ecarts/C norme ANSI — Arguments et valeurs de retour LST INFO, FSTF 13
  • 14.  Fonctions sans valeur de retour  En C, deux manières :  void fonct(int, char);  fonct(int, char);  En C++  void fonct(int, char); Ecarts/C norme ANSI —Prototypes de fonctions en C++ LST INFO, FSTF 14
  • 15.  Constantes locales Pas de différence entre C et C++ La porté est locale au bloc ou à la fonction Ecarts / C norme ANSI —Porté des constantes LST INFO, FSTF 15
  • 16.  Constantes globales en C La porté de la constante n’est pas limitée au fichier qui la contient  Définir la constante dans un fichier const c =10 ;  Référencer la constante dans les autres fichiers par extern const c ; Ecarts / C norme ANSI — Porté des constantes LST INFO, FSTF 16
  • 17.  Constantes globales en C: Exemple #include<stdio.h> #include<stdlib.h> #include "constglob.h" int main() { int a=10,b=20; extern c; printf(" le résultat est %d",a+b+c); } /* Fichier constglob.h */ const c= 100; Ecarts / C norme ANSI — Porté des constantes LST INFO, FSTF 17
  • 18.  Constantes globales en C++ La porté d’une constante est limitée au fichier source qui la contient Exemple Ecarts / C norme ANSI — Porté des constantes #include<stdio.h> #include<stdlib.h> #include "constglob.h" int main() { int a=10,b=20; extern c; //Erreur printf(" le résultat est %d",a+b+c); } LST INFO, FSTF 18
  • 19.  Commentaire  Primitives d’Entrée/Sortie cin, cout  Déclaration des variables  Références  Surdéfinition des fonctions  Arguments par défaut  Fonctions en ligne  Déclaration des structures  Nouveaux opérateurs new, delete  Gestion des exceptions Apports de C++ LST INFO, FSTF 19
  • 20.  Commentaire de C /* commentaire classique de C qui s’étend sur plusieurs lignes */  Commentaire introduit par C++ // commentaire de ligne Apports de C++ — Commentaire — LST INFO, FSTF 20
  • 21.  En plus des primitives d’E/S définies dans C, C++ offre deux nouvelles primitives  cin : flot d’entrée  cout : flot de sortie  Caractéristiques  Simplicité: Pas besoin d’indiquer le format des variables  Extensibilité à d’autres types Apports de C++ — Entrées/Sorties LST INFO, FSTF 21
  • 22.  Cout  Permet d’afficher une chaine, la valeur d’une variable ou la valeur d’une expression  cout << ’’ une chaine ’’;  cout << code ; // code est une variable  cout << 3.14 * r * r ; // Surface d’un cercle  Permet d’afficher plusieurs objets avec une seule instruction:  cout << ’’ surface = ’’ << 3.14 * r * r ;  endl : mot réservé qui permet le retour à la ligne  cout << ’’ surface = ’’ << 3.14 * r * r << endl; Apports de C++ — Entrées/Sorties LST INFO, FSTF 22
  • 23.  Cout Exemple Instructions Affichage int x=3; double y =4.5; cout <<“ valeur de x=“<<x; cout<<“; y=“<<y<<endl; cout <<“x+y”<<x+y; valeur de x=3; y=4.5 x+y=7.5 int x=3; double y =4.5; cout <<“x = “<<x<<“n”; cout<<“y=“<<y; cout <<“nx+y”<<x+y; x = 3 y=4.5 x+y=7.5 Apports de C++ — Entrées/Sorties LST INFO, FSTF 23
  • 24.  Cin  Permet de saisir la valeur d’une ou plusieurs variables  cin >> var1 >> var2>> … >> varn;  Exemple #include<iostream> Using namespace std; int main() { int n; float x; char c; cout << ’’entrer un entier, un réel ensuite un caractère’’; cin >> n >> x >> c; return 0; } Apports de C++ — Entrées/Sorties— LST INFO, FSTF 24
  • 25.  Plus de liberté sur l’endroit de déclaration Déclaration n’importe où dans le programme  Pas forcément au début (cas du langage C) Déclaration à l’intérieur des structures de contrôle  for(int i=0;…), if(int i = random(100)) , while(), switch() Portée limitée au bloc où la variable a été définie Apports de C++ — Déclaration des variables LST INFO, FSTF 25
  • 26.  Plus de liberté sur l’endroit de déclaration — Exemple #include <iostream> using namespace std; int main() { int a, b; cout << "nsaisir deux entiers:"; cin >> a >> b; int r,f; // autorisé r = a + b; f = 1; for(int i=1;i<r;i++) // autorisé f=f*i; cout << "nfact = " << f; return 0; } Apports de C++ — Déclaration des variables LST INFO, FSTF 26
  • 27.  C’est quoi une référence ? Un type qui permet une manipulation plus facile des adresses Une variable de type référence permet de designer un espace mémoire existant Apports de C++ — Références LST INFO, FSTF 27
  • 28.  Déclaration Une référence doit être toujours initialisée lors de sa création. type &ref = var; Objet référencé Type de l’objet référencé Variable référence int a, b; int &refa =a; int &ref ; // erreur Apports de C++ — Références LST INFO, FSTF 28
  • 29.  Utilité : Une variable de type référence est utilisée pour désigner une variable existante (alias, synonyme) designer un objet existant en mémoire et qui n’a pas de nom int a =5; int t[10]; int &refa =a; int &premier =t[0]; int &dernier =t[9]; refa et a représentent le même espace Attribue un nom au premier élément de t Attribue un nom au dernier élément de t Apports de C++ — Références LST INFO, FSTF 29
  • 30.  Opérations sur les références  Toute opération effectuée sur l’objet référencé se répercute sur la référence et vice versa (même espace mémoire) int a = 5; int &refa =a; a++; cout << ’’refa = ’’ << refa; refa= 0; cout << ’’a = ’’ << a; refa = 6 a = 0; Apports de C++ — Références LST INFO, FSTF 30
  • 31.  Opérations  Une fois initialisée, une référence ne peut être changée int a; Int b ; int &refa =a; &refa = y; // erreur & refa = &y; // erreur Apports de C++ — Références LST INFO, FSTF 31
  • 32.  Passage des paramètres  En C, un seul mode de passage de paramètres: passage par valeur  En C++, deux modes : par valeur et par référence Apports de C++ — Références LST INFO, FSTF 32
  • 33.  Passage des paramètres par référence  Le changement d’un paramètre est conservé après la terminaison de la fonction  Évite la gestion complexe des pointeurs  Offre une meilleure lisibilité Apports de C++ — Références LST INFO, FSTF 33
  • 34.  Passage des paramètres par référence  Syntaxe de déclaration type fonct (type & param,…)  Appel de la fonction fonct(param,…); Apports de C++ — Références LST INFO, FSTF 34
  • 35.  Passage des paramètres par référence: Exemple void swap(int &i, int &j) { int k = i;< i = j; j = k; } int main() { int a=1; Int b = 2; cout << ’’avant ’’; cout << ’’a = ’’ << a << ’’b = ’’ << b; swap(a, b); cout << ’’avant<<<<<<< ’’; cout << ’’a = ’’ << a << ’’b = ’’ << b; }< Apports de C++ — Références LST INFO, FSTF 35
  • 36.  Plusieurs fonctions portent le même nom  Plus de lisibilité : pas besoin de chercher plusieurs identificateurs pour la même action  Les fonctions différent dans le contenu selon le type et/ou le nombre de paramètres  Sémantiquement les fonctions font la même action (ex afficher)  Le compilateur choisit la fonction à invoquer selon les paramètres effectifs Apports de C++ — Surdéfinition de fonctions LST INFO, FSTF 36
  • 37.  Exemple #include<stdio.h> int produit(int a,int b) { int r; r=a*b; return(r); } int produit(int a,int b, int c) { int r; r=a*b*c; return(r); } float produit(float a,float b) { float r; r=a*b; return(r); } int main() { int a,b; cout << "nsaisir deux entiers:"; cin >> a >> b; int r,f; r=produit(a,b); cout << "n résultat = " << r; r=produit(a,b,r); cout << "n résultat = " << r; float x=2.4,y=3.5,z; z=produit(x,y); cout << "n résultat = " << z; return 0; } Apports de C++ — Surdéfinition de fonctions LST INFO, FSTF 37
  • 38.  Possibilité de donner des valeurs par défaut à certains paramètres omis lors de l’appel d’une fonction prix_ttc(float prixht, float tva=0.2) prix_ttc(300) // taux de tva par défaut prix_ttc(300,0.1) // taux spécial de la tva float fonct( int a=10,int b,int c=5) // faux Apports de C++ — Arguments par défaut  Seuls les derniers paramètres à droite peuvent avoir des valeurs par défaut LST INFO, FSTF 38
  • 39.  Exemple #include<stdio.h> #include<stdlib.h> using namespace std; float prix_ttc(float pht, float tva=0.2) { float pttc; pttc = pht*(1+tva); return(pttc); } int main() { float p1,p2; p1=prix_ttc(300); // taux de tva par défaut p2=prix_ttc(300,0.1); // taux spécial de la tva cout << "n" << p1 << "t"<< p2; } Apports de C++ — Arguments par défaut LST INFO, FSTF 39
  • 40.  Exemple #include<stdio.h> #include<stdlib.h> #define carre(n) n*n int main() { int a=2,b=3,r; r=carre(a); printf("n résultat = %d",r); r=carre(a+b); cout << "n résultat = « << r; } Apports de C++ —Macros en langage C LST INFO, FSTF 40
  • 41.  Alternative aux macros du préprocesseur  Moins complexe et évite les sources d’erreur des macros  #define carre(n) n*n  Comment seront interprétés les appels : carre(a+b) carre(++a) ?  Vérification et contrôle des types Apports de C++ —Fonctions en ligne LST INFO, FSTF 41
  • 42.  Syntaxe : Précéder la définition de la fonction par le mot clé inline  Exemple #include <iostream> using namespace std; inline int carre(int n) { return(n*n); } int main() { int a=2,b=3,r; r=carre(a); cout << "n résultat = " << r; r = carre(++a); cout << "n résultat = " << r << " et a= " << a << endl; return 0; } Apports de C++ —Fonctions en ligne LST INFO, FSTF 42
  • 43.  Les fonctions en ligne sont insérées dans le code par le compilateur à l’endroit de leur appel  Evitent les opérations d’appel et de terminaison des fonctions  Sont plus rapides  Consomment plus d’espace mémoire  Doivent être, normalement, de petite taille Apports de C++ —Fonctions en ligne LST INFO, FSTF 43
  • 44.  Pas besoin de précéder le nom de la structure par le mot clé struct après sa définition  Exemple Apports de C++ —Déclaration des structures struct etudiant { int CNE; char nom[20]; char prenom[20]; }; int main() { Etudiant e1; … } LST INFO, FSTF 44
  • 45.  En plus des primitives de gestion de la mémoire du langage C (malloc,free,…), C++ offre deux primitives new et delete  new : permet d’allouer de la mémoire pour des objets dynamiques  delete : permet de libérer l’espace mémoire alloué par new Apports de C++ —Opérateurs new, delete LST INFO, FSTF 45
  • 46.  Opérateur new  Syntaxe  Exemple Apports de C++ —Opérateurs new, delete adresse = new type; ou adresse = new type[taille]; int *pi, *pti; pi = new int; // réservation de l’ espace pour un entier pit = new int[10]; // réservation de l’espace pour un tableau d’entiers LST INFO, FSTF 46
  • 47.  Opérateur delete  Syntaxe  Exemple Apports de C++ —Opérateurs new, delete delete adresse int *pi; pi = new int; // réservation de l’ espace pour un entier delete pi // libération de l’espace occupé par pi LST INFO, FSTF 47
  • 48.  Exemple #include<iostream> #include<stdlib.h> using namespace std; int main() { int *t; t=new int[10]; for(int i=1;i<10;i++) t[i] = i*i; for(int i=1;i<10;i++) cout<<t[i]<<"n"; delete t; } Apports de C++ —Opérateurs new, delete LST INFO, FSTF 48