Chapitre2 PR Ouatik
Chapitre2 PR Ouatik
Chapitre2 PR Ouatik
Objets
Chapitre 2
Améliorations non objets de C++
par rapport au langage C
2011-2012 2
Introduction
C++ est le C enrichi par les possibilités de la POO
Evolution de C (C++ signifie incrémentation du C)
2011-2012 3
Introduction
C++ = C – E + S +P C++
C : Norme ANSI de C
E : Ecarts par rapport à la norme de C
P
S : Spécificités non objet de C++
S
P : Possibilités objets de C++
E
C
2011-2012 4
Historique de C++
C++ a été développé dans les labos AT&T BELL au début des
années 1980 par Bjarne STROUSTRUP
2011-2012 5
Ecarts/C norme ANSI
Constantes
2011-2012 6
Ecarts / C norme ANSI
Définitions des fonctions
Forme1 Forme 2
int fonct(u,v) int fonct(int u,int v)
int u; {
int v; …
{ }
…
}
En C++ seule la deuxième forme est retenue
2011-2012 7
Ecarts / C norme ANSI
Prototypes des fonctions en C
Le prototype est la déclaration d’une fonction qui
sera invoquée avant sa définition
2011-2012 8
Ecarts / C norme ANSI
Prototypes des fonctions en C
Exemple int produit(a,b)
int a; int b;
#include<stdio.h> {
void main() int r;
{ r=a*b;
void saisie_produit(); return(r);
int a,b,r; }
printf("saisir deux entiers:"); void saisie_produit()
scanf("%d%d",&a,&b); {
r=produit(a,b); int a,b,r;
printf("\n résultat = %d",r); printf("saisir deux entiers:");
saisie_produit(); scanf("%d%d",&a,&b);
} r=a*b;
printf("\n résultat = %d",r);
}
2011-2012 9
Ecarts / C norme ANSI
Prototypes des fonctions en C++
2011-2012 10
Ecarts / C norme ANSI
Prototypes des fonctions en C++
Exemple
#include<stdio.h> int produit(int a,int b)
{ int r;
int main() r=a*b;
{ return(r);
int produit(int,int); }
void saisie_produit();
int a,b,r; void saisie_produit()
printf("\nsaisir deux entiers:"); {int a,b,r;
scanf("%d%d",&a,&b); printf("\nsaisir deux entiers:");
r=produit(a,b); scanf("%d%d",&a,&b);
printf("\n résultat = %d",r); r=a*b;
saisie_produit(); printf("\n résultat = %d",r);
} 2011-2012 } 11
Ecarts / C norme ANSI
Arguments et valeurs de retour
En C++
– float fonct();
2011-2012 12
Ecarts / C norme ANSI
En C++
– void fonct(int, char);
2011-2012 13
Ecarts / C norme ANSI
Porté des Constantes
Constantes locales
2011-2012 14
Ecarts / C norme ANSI
Porté des Constantes
Constantes globales en C
La porté de la constante n’est pas limitée au fichier
qui la contient
2011-2012 15
Ecarts / C norme ANSI
Porté des Constantes
Constantes globales en C: Exemple
#include<stdio.h>
#include "constglob.h" /* Fichier constglob.h */
int main()
{ const c= 100;
int a=10,b=20;
extern c;
printf(" le résultat est %d",a+b+c);
}
2011-2012 16
Ecarts / C norme ANSI
2011-2012 17
Ecarts / C norme ANSI
2011-2012 18
Apports non objets de C++
Commentaires
Commentaire de C
/* commentaire classique de C
qui s’étend sur plusieurs lignes */
2011-2012 19
Apports non objets de C++
Entrées/Sorties
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
2011-2012 20
Apports non objets de C++
Entrées/Sorties : 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
2011-2012 21
Apports non objets de C++
2011-2012 22
Apports non objets de C++
Entrées/Sorties : 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;
2011-2012 } 23
Apports non objets de C++
Déclaration des variables
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)
2011-2012 24
Apports non objets de C++
Déclaration des variables
Exemple
#include <iostream>
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;
2011-2012 } 25
Apports non objets de C++
Références
2011-2012 26
Apports non objets de C++
Références
Déclaration
Une référence doit être toujours initialisée lors
de sa création. Variable
référence
Objet référencé
Type de l’objet type &ref = var;
référencé
int a, b;
int &refa =a;
int &ref ; // erreur
2011-2012 27
Apports non objets de C++
Références
Utilité : Une variable de type référence est
utilisée pour:
désigner une variable existante (alias,
synonyme)
int a = 5;
int &refa =a;
a++; refa = 6
cout << ’’refa = ’’ << refa;
refa= 0; a = 0;
cout << ’’a = ’’ << a;
2011-2012 29
Apports non objets de C++
Références
Passage des paramètres
2011-2012 30
Apports non objets de C++
Références
Passage des paramètres par référence
Le changement d’un paramètre est conservé
après la terminaison de la fonction
2011-2012 31
Apports non objets de C++
Références
Passage des paramètres par référence
Syntaxe de déclaration
type fonct (type & param,…)
2011-2012 32
Apports non objets de C++
Références
Passage des paramètres par référence:
Exemple int main()
{
int a=1;
void swap(int &i, int &j) Int b = 2;
{ cout << ’’avant ’’;
int k = i; cout << ’’a = ’’ << a << ’’b = ’’ << b;
i = j; swap(a, b);
j = k; cout << ’’avant ’’;
} cout << ’’a = ’’ << a << ’’b = ’’ << b;
}
2011-2012 33
Apports non objets de C++
Surdéfinition des fonctions
2011-2012 36
Apports non objets de C++
Arguments par défaut: 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;
r=carre(a);
printf("\n résultat = %d",r);
r=carre(a+b);
cout << "\n résultat = « << r;
}
2011-2012 38
Apports non objets de C++
Fonctions en ligne
Alternative aux macros du préprocesseur
2011-2012 41
Apports non objets de C++
Déclaration des structures
Pas besoin de précéder le nom de la structure par le mot clé
struct après sa définition
Exemple
struct etudiant {
int CNE;
char nom[20];
char prenom[20];
};
Int main()
{
Etudiant e1;
…
}
2011-2012 42
Apports non objets de C++
Opérateurs new, delete
Exemple
int *pi, *pti;
Exemple
int *pi, *pti;