Vous êtes sur la page 1sur 12

Programmation Orientée Objets

R. Ben Abbou & A. Zahi


FSTF, Fez, Maroc

Programmation Orientée Objets

Chapitre 2
Améliorations de C++

2
Plan
~ Introduction

~ Ecarts de C++ par rapport à C ANSI

~ Apports non objets de C++

Introduction

~ C++ est le C enrichie par les possibilités de la POO


f Evolution de C (C++ signifie incrémentation du C)

~ C++ est un langage hybride


f Classique (procédural)
f Orienté Objet

4
Introduction

~ C++ = C – E + S +P
f C : Norme ANSI de C
f E : Ecarts par rapport à la norme de C C++
f S : Spécificités non objet de C++
f P : Possibilités objets de C++ P

S
E
C

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

6
Ecarts/C norme ANSI

~ Définitions des fonctions

~ Prototypes des fonctions

~ Arguments et valeurs de retour

~ Constantes

Ecarts / C norme ANSI


Définitions des fonctions
~ En C, il y a deux manières pour définir une fonction :

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

8
Ecarts / C norme ANSI
Prototypes des fonctions

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


f Être Omis (cas d’une fonction qui retourne un entier)
f Se restreindre au nom de la f° et au type de retour
Ž float fonct();
f Être complet
Ž float fonct(int, double, float);
f Exemple
~ En C++, le prototype est obligatoire et doit préciser le type de retour de
la f° ainsi que le type de chacun des paramètres
f Exemple

Ecarts / C norme ANSI


Arguments et valeurs de retour

~ Fonctions sans arguments


f En C, deux manières :
Ž float fonct(void);
Ž float fonct();
f En C++
Ž float fonct();
~ Fonctions sans valeur de retour
f En C, deux manières :
Ž void fonct(int, char);
Ž fonct(int, char);
f En C++
Ž void fonct(int, char);

10
Ecarts / C norme ANSI
Porté des Constantes
~ Constantes locales
f Pas de différence entre C et C++ : porté locale au bloc ou à la fonction

~ Constantes globales
f 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 ;

f En C++, la porté d’une constante est limitée au fichier source qui la contient

11

Apports non objets de C++

~ Commentaire
~ Nouvelles primitives d’E/S cin, cout
~ Déclaration des variables
~ Passage des paramètres par référence
~ Surdéfinition des fonctions
~ Arguments par défaut
~ Fonctions en ligne
~ Déclaration des structures
~ Nouveaux opérateurs new, delete

12
Apports non objets de C++
Commentaire

~ Commentaire de C
/* commentaire classique de C
qui s’étend sur plusieurs lignes */

~ Commentaire introduit par C++


// commentaire de ligne

13

Apports non objets de C++


Nouvelles primitives d’E/S cin, cout

~ En plus des primitives d’E/S définies dans C,


C++ offre deux nouvelles primitives
f cin : flot d’entrée
f cout : flot de sortie

~ Caractéristiques
f Simplicité: Pas besoin d’indiquer le format des
variables
f Module objet optimal
f Extensibilité à d’autres types
14
Apports non objets de C++
Nouvelles primitives d’E/S cin, cout

~ Syntaxe

f cin >>var; cin >>var1 >>var2; …

f cout << "message" ;

f cout << "valeur de n" << n;

~ Exemple : Saisie et affichage d’un complexe(tous les

cas)

15

Apports non objets de C++


Déclaration des variables

~ Plus de liberté sur l’endroit de déclaration

f Déclaration n’importe où dans le programme

Ž pas forcément au début (cas du langage C )

f Déclaration à l’intérieur des structures de contrôle

Ž for(int i=0;…), if(int i=random(100)) while(),switch()

f Porté limitée au bloc où la variable a été définie

f Exemple

16
Apports non objets de C++
Passage des paramètres par référence
~ En C, un seul mode de passage de paramètres: par valeur

~ En C++, deux modes : par valeur et par référence

f Passage 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é

Ž Syntaxe de déclaration Type fonct (type & param,…)

Ž Appel fonct(param,…);

f Exemple: échange du contenu de deux variables

17

Apports non objets de C++


Surdéfinition des fonctions

~ Plusieurs fonctions portent le même nom mais différent dans le


contenu selon le type et/ou le nombre de paramètres

~ Sémantiquement ces fonctions font la même action (ex afficher)

~ Le compilateur qui choisit la fonction à invoquer selon les paramètres


effectifs

~ Plus de lisibilité : pas besoin de chercher plusieurs identificateurs pour


la même action
~ Exemple

18
Apports non objets de C++
Arguments par défaut

~ Possibilité de donner des valeurs par défaut à certains paramètres


omis lors de l’appel d’une fonction
~ Exemple :
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
~ Seuls les derniers paramètres à droite peuvent avoir des valeurs
par défaut
f float fonct( int a=10,int b,int c=5) // faux

19

Apports non objets de C++


Fonctions en ligne
~ Alternative aux macros du préprocesseur
f Moins complexe et évite les sources d’erreur des macros

f Vérification et contrôle des types

~ Exemple :
inline max(int a, int b) {return (a>b? a:b);}
Avec les macros
#define max(a,b) ((a)>(b)?(a):(b))

20
Apports non objets de C++
Fonctions en ligne

~ Les fonctions en ligne sont insérées dans le code par le


compilateur à l’endroit de leur appel

f Eviter les opérations d’appel et de terminaison des fonctions

f Plus de rapidité

f Une fonction en ligne doit être, normalement, de petite taille

21

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];};
Main()
{
Etudiant e1;

}

22
Apports non objets de C++
Nouveaux opérateurs new, delete

~ En plus des primitives de gestion de la mémoire de

C(malloc,free,…), C++ offre deux primitives new et delete.

~ New : permet d’allouer de la mémoire pour des objets dynamiques

f Syntaxe adresse = new type; ou adresse = new type[taille];

f Exemple

Int *pi,*pti;

Pi = new int; // réservation d’un espace pour un entier

Pit = new int[10]; // réservation d’un espace pour un tableau

d’entier
23

Apports non objets de C++


Nouveaux opérateurs new, delete

~ delete : permet de libérer la mémoire occupée par des objets

dynamiques

f Syntaxe delete adresse

f Exemple

int *pi,*pti;

pi = new int;

delete pi;

24

Vous aimerez peut-être aussi