Sunteți pe pagina 1din 33

Structure

Interface/Impl ementation

Introduction de classe

Constructeurs et Destructeurs

Membres statiques

La programation orient ee objet en C++


Houssam HNAIDI Bas e sur le cours de Camille COMBIER

3 janvier 2012

Liris - CNRS Lyon Email : houssam.hnaidi@gmail.com

Houssam HNAIDI

Formation C++

1/ 28

Structure

Interface/Impl ementation

Introduction de classe

Constructeurs et Destructeurs

Membres statiques

Structure D enition Interface/Impl ementation D enition Exemple C Introduction de classe Encapsulation Syntaxe Constructeurs et Destructeurs Constructeurs Destructeurs Membres statiques Variables statiques Fonctions membres statiques
Houssam HNAIDI Formation C++ 2/ 28

Plan
1

Structure D enition Interface/Impl ementation D enition Exemple C Introduction de classe Encapsulation Syntaxe Constructeurs et Destructeurs Constructeurs Destructeurs Membres statiques Variables statiques Fonctions membres statiques

Structure D enition

Interface/Impl ementation

Introduction de classe

Constructeurs et Destructeurs

Membres statiques

D enition

Un type personnalis e construit ` a partir des types de base du langage. Elle pr esente un moyen pour acc eder ` a plusieurs types de donn ees sous un seul nom pour faciliter la manipulation des donn ees. Code : Exemple de Structure
Struct TAdresse { char nom [50]; unsigned int num_de_voie; char nom_de_rue[100]; char code_postale[5]; char nom_de_commune[30]; };

Houssam HNAIDI

Formation C++

4/ 28

Structure D enition

Interface/Impl ementation

Introduction de classe

Constructeurs et Destructeurs

Membres statiques

D enition

Code : Exemple dappel


int main(int argc, char argv) { TAdresse adresse1={IUT Lyon1, 43, bd du 11 novembre 1918, 69100, Villeurbanne}; TAdresse adresse2; strcpy(adresse2.nom, IUT Lyon1); adresse2.num_de_voie= 43; strcpy(adresse2.nom_de_rue,bd du 11 novembre 1918); strcpy(adresse2.code_postale,69100); strcpy(adresse2.nom_de_commune,Villeurbanne); TAdresse adresse3=&adresse1; return 0; }

Houssam HNAIDI

Formation C++

5/ 28

Plan
1

Structure D enition Interface/Impl ementation D enition Exemple C Introduction de classe Encapsulation Syntaxe Constructeurs et Destructeurs Constructeurs Destructeurs Membres statiques Variables statiques Fonctions membres statiques

Structure D enition

Interface/Impl ementation

Introduction de classe

Constructeurs et Destructeurs

Membres statiques

D enition

Un moyen qui permet aux autres de reutiliser les codes sans pouvoir les modier. Interface D eclaration de types de donn ees (Structure, renomage de type) D eclaration de fonctions. Impl ementation Declaration de types de donn ees cach es Impl ementation des fonctions d eclar ees ` a linterface.

Houssam HNAIDI

Formation C++

7/ 28

Structure Exemple C

Interface/Impl ementation

Introduction de classe

Constructeurs et Destructeurs

Membres statiques

Exemple C

Impl ementation(personne.c)
typedef struct tpersonne { int id ; char name [10]; } TPersonne; TPersonne cree_personne(int id,const char name) { TPersonne p; p=(TPersonne)malloc(sizeof(TPersonne)); p>id=id; strcpy(p>name,name); return p ; } void affiche_personne(TPersonne p) { printf(Personne(id=%d, name=%s)\n, p>id, p>name); }

Interface(personne.h)
typedef struct tpersonne TPersonne; TPersonne cree_personne(int id,const char name); void affiche personne(TPersonne p);

Houssam HNAIDI

Formation C++

8/ 28

Structure Exemple C

Interface/Impl ementation

Introduction de classe

Constructeurs et Destructeurs

Membres statiques

Exemple dutilisation
Exemple dappel
#include personne.h int main() { TPersonne p; p=cree_personne(5, Houssam); affiche_personne(p); return 0; }

Attention aux types de donn ees cach ees Nous d eclarons toujours un pointeur vers la structure des donn ees cach ees parce que sa taille nest pas disponible pour que le compilateur puisse r eserver sa m emoire.
#include personne.h int main() { TPersonne p; //le compilateur donne une erreur return 0; }

Houssam HNAIDI

Formation C++

9/ 28

Plan
1

Structure D enition Interface/Impl ementation D enition Exemple C Introduction de classe Encapsulation Syntaxe Constructeurs et Destructeurs Constructeurs Destructeurs Membres statiques Variables statiques Fonctions membres statiques

Structure Encapsulation

Interface/Impl ementation

Introduction de classe

Constructeurs et Destructeurs

Membres statiques

Objet ?

Quest ce quun objet ? Pourquoi le concept objet ?

Houssam HNAIDI

Formation C++

11/ 28

Structure Encapsulation

Interface/Impl ementation

Introduction de classe

Constructeurs et Destructeurs

Membres statiques

Encapsulation
Principe de base de lobjet Utilisation dune interface Ne pas etre oblig e de conna tre limpl ementation Exemple : Le micro-ondes Interface Boutons Documentation Notice dutilisation Limpl ementation reste cach ee (comment fonctionne un micro-ondes ?) Cest le principe de boite noire

Houssam HNAIDI

Formation C++

12/ 28

Structure Encapsulation

Interface/Impl ementation

Introduction de classe

Constructeurs et Destructeurs

Membres statiques

Encapsulation
On appelle les variables/fonctions de la classe des membres, on sp ecie leur visibilit e` a la d eclaration. Les membres public Toutes les classes ont le droit de voir/modier ces membres. Les membres priv es Seulement linstance actuelle de la classe a le droite de voir/modier ces membres. Les membres prot eg es Nous verrons cela dans la suite du cours. On utilise des accesseurs pour modier/acc eder aux variables priv ees si besoin.

Houssam HNAIDI

Formation C++

13/ 28

Structure Syntaxe

Interface/Impl ementation

Introduction de classe

Constructeurs et Destructeurs

Membres statiques

Exemple de classe
Code : Exemple de classe
class CPersonne { public : int get_identifiant(); void set_identifiant(int id); private : int m_identifiant; };

Code : Exemple de dappel


int main(int argc, char argv) { CPersonne p1, p2; p1 . set_identifiant(12); p2 = &p1; p2>set_identifiant(13); cout << p1.m_identifiant ; //NON AUTORISE cout << p1.get_identifiant() ; //OK }

Houssam HNAIDI

Formation C++

14/ 28

Structure Syntaxe

Interface/Impl ementation

Introduction de classe

Constructeurs et Destructeurs

Membres statiques

Acc` es aux membres

Il faut se poser deux questions : La syntaxe est-elle correcte ? La fonction a telle les droits pour acc eder au membre ? Pour d enir les fonctions dans le chier CPP on utilise lop erateur de r esolution de port ee : : Code : Fichier CPP
int CPersonne::get_identifiant() { return m_identifiant; }

Houssam HNAIDI

Formation C++

15/ 28

Plan
1

Structure D enition Interface/Impl ementation D enition Exemple C Introduction de classe Encapsulation Syntaxe Constructeurs et Destructeurs Constructeurs Destructeurs Membres statiques Variables statiques Fonctions membres statiques

Structure Constructeurs

Interface/Impl ementation

Introduction de classe

Constructeurs et Destructeurs

Membres statiques

Constructeurs

Un constructeur est une fonction qui est appel e` a la cr eation de chaque nouvelle instance de la classe. Il porte le nom de la classe Il est d eni avec une visibilit e public Le constructeur par d efaut ne prends pas de param` etres.

Houssam HNAIDI

Formation C++

17/ 28

Structure Constructeurs

Interface/Impl ementation

Introduction de classe

Constructeurs et Destructeurs

Membres statiques

Exemple de constructeur
Code : FICHIER H
class CPersonne { public : CPersonne(); CPersonne(int id ); private : int m_identifiant; };

Code : FICHIER CPP


CPersonne::CPersonne() { // Instructions du constructeur par defaut m_identifiant = 1; } CPersonne::CPersonne(int id) { m_identifiant = id; }

Code : main.cpp
int main(int argc, char argv) { CPersonne p1; //Appel de CPersonne() CPersonne p2(2); //Appel de CPersonne(int) CPersonne p_p3, p_p4; p_p3 = new CPersonne(); //Appel de CPersonne() p_p4 = new CPersonne(4); //Appel de CPersonne(int) }

Notez que new fait appel au constructeur alors que malloc ne le fait pas
Houssam HNAIDI Formation C++ 18/ 28

Structure Constructeurs

Interface/Impl ementation

Introduction de classe

Constructeurs et Destructeurs

Membres statiques

Constructeur par recopie


Quand on fait une copie dobjet, des traitements particuliers sont souvent ` a r ealiser. On utilise alors le constructeur par recopie Code : Constructeur par recopie
class CPersonne { public : ... CPersonne(const CPersonne&); ... };

Code : Constructeur par recopie


CPersonne::CPersonne(const CPersonne& personne) { m_identifiant = personne.m_identifiant; }

Houssam HNAIDI

Formation C++

19/ 28

Structure Constructeurs

Interface/Impl ementation

Introduction de classe

Constructeurs et Destructeurs

Membres statiques

Questions
Denition de T
class T { public : T (); T( int ); T(double ); T(const T&); };

Quel constructeur est appel e?


T t1 ; T t2 (12); T t3(t1 ); T t4 (); T t5=t1;

Houssam HNAIDI

Formation C++

20/ 28

Structure Constructeurs

Interface/Impl ementation

Introduction de classe

Constructeurs et Destructeurs

Membres statiques

Questions
Denition de T
class T { public : T (); T( int ); T(double ); T(const T&); };

Quel constructeur est appel e? T t1 ; R eponse : T :: T(void );


T t2 (12); T t3(t1 ); T t4 (); T t5=t1;

Houssam HNAIDI

Formation C++

20/ 28

Structure Constructeurs

Interface/Impl ementation

Introduction de classe

Constructeurs et Destructeurs

Membres statiques

Questions
Denition de T
class T { public : T (); T( int ); T(double ); T(const T&); };

Quel constructeur est appel e? T t1 ; R eponse : T :: T(void ); T t2 (12); R eponse : T :: T( int );


T t3(t1 ); T t4 (); T t5=t1;

Houssam HNAIDI

Formation C++

20/ 28

Structure Constructeurs

Interface/Impl ementation

Introduction de classe

Constructeurs et Destructeurs

Membres statiques

Questions
Denition de T
class T { public : T (); T( int ); T(double ); T(const T&); };

Quel constructeur est appel e? T t1 ; R eponse : T :: T(void ); T t2 (12); R eponse : T :: T( int ); T t3(t1 ); R eponse : T :: T(const T&);
T t4 (); T t5=t1;

Houssam HNAIDI

Formation C++

20/ 28

Structure Constructeurs

Interface/Impl ementation

Introduction de classe

Constructeurs et Destructeurs

Membres statiques

Questions
Denition de T
class T { public : T (); T( int ); T(double ); T(const T&); };

Quel constructeur est appel e? T t1 ; R eponse : T :: T(void ); T t2 (12); R eponse : T :: T( int ); T t3(t1 ); R eponse : T :: T(const T&); eponse : //Ce nest pas une instruction T t4 (); R
T t5=t1;

c est un prototype

Houssam HNAIDI

Formation C++

20/ 28

Structure Constructeurs

Interface/Impl ementation

Introduction de classe

Constructeurs et Destructeurs

Membres statiques

Questions
Denition de T
class T { public : T (); T( int ); T(double ); T(const T&); };

Quel constructeur est appel e? T t1 ; R eponse : T :: T(void ); T t2 (12); R eponse : T :: T( int ); T t3(t1 ); R eponse : T :: T(const T&); eponse : //Ce nest pas une instruction c est T t4 (); R T t5=t1; R eponse : T t5(t1); // est moins ambigue
Houssam HNAIDI

un prototype

Formation C++

20/ 28

Structure Destructeurs

Interface/Impl ementation

Introduction de classe

Constructeurs et Destructeurs

Membres statiques

Destructeur

Appel e` a chaque fois quune instance de la classe est d etruite (automatiquement) Il porte le nom de la classe pr ec ed e de Il est d eni avec une visibilit e public
delete

fait appel au destructeur alors que

free

ne le fait pas

Houssam HNAIDI

Formation C++

21/ 28

Structure Destructeurs

Interface/Impl ementation

Introduction de classe

Constructeurs et Destructeurs

Membres statiques

Exemple de destructeur
Code : FICHIER H
class CPersonne { public : CPersonne(); private : void AllocationDyn; };

Code : FICHIER CPP


CPersonne::CPersonne() { delete AllocationDyn; }

Code : main.cpp
int main(int argc, char argv) { CPersonne p1, p_p3; p_p3 = new CPersonne(); if ( p1) { CPersonne p2; } //Appel de CPersonne() delete p_p3; //Appel de CPersonne() } //Appel de CPersonne()

Houssam HNAIDI

Formation C++

22/ 28

Structure Destructeurs

Interface/Impl ementation

Introduction de classe

Constructeurs et Destructeurs

Membres statiques

Un exemple un peu plus complet


Code : FICHIER H
class CListe { public : //Constructeurs et destructeurs CListe(); CListe(); int ajouteElement(void Elt); int supprimeElement(void Elt); int videListe(); int compteElts(); private : CMaillon CreeMaillon(void Elt); int AjouteMaillon(CMaillon maillon); int SupprimeMaillon(CMaillon maillon); CMaillon ChercheMaillon(void Elt); private : CMaillon mp_PremierMaillon; int m_nombreElement; };

Houssam HNAIDI

Formation C++

23/ 28

Plan
1

Structure D enition Interface/Impl ementation D enition Exemple C Introduction de classe Encapsulation Syntaxe Constructeurs et Destructeurs Constructeurs Destructeurs Membres statiques Variables statiques Fonctions membres statiques

Structure

Interface/Impl ementation

Introduction de classe

Constructeurs et Destructeurs

Membres statiques

Variables statiques

static
Les membres statiques sont des variables/fonctions partag e par toutes les instances de la classe. Pr esent une seule fois en m emoire. La visibilit e et les droits dacc` es sont conserv es. Code : Fichier CPP Code : Fichier H
class CPersonne { public : CPersonne(); void IncrementeId(); private : static int ms_identifiantSuivant; int m_identifiant; }; // initialisation dune variable static de classe int CPersonne::ms_identifiantSuivant = 0; void CPersonne::IncrementId() { ms_identifiantSuivant++; } CPersonne::CPersonne() { m_identifiant = ms_identifiantSuivant; ms_identifiantSuivant++; }

Houssam HNAIDI

Formation C++

25/ 28

Structure

Interface/Impl ementation

Introduction de classe

Constructeurs et Destructeurs

Membres statiques

Variables statiques

Exemple static
Les instances de CPersonne ont leur propres exemplaires de m identiant Elles partagent le m eme exemplaire de ms identiantSuivant Linitialisation se fait au moyen dune annonce ecrite dans la port ee globale dans un chier CPP Code : main
int main ( int argc, char argv) { CPersonne p1;//m identiant = 0; CPersonne p2;//m identiant = 1; ... }

Houssam HNAIDI

Formation C++

26/ 28

Structure

Interface/Impl ementation

Introduction de classe

Constructeurs et Destructeurs

Membres statiques

Variables statiques

Acc` es au membre static

Code : MaClasse.h
class CMaClasse { public : static int m_monEntierStatic; }

Code : main.cpp
int main(int argc, char argv) { CMaClasse c1; int monEntier = c1.m_monEntierStatic; int unAutreEntier = CMaClasse::m_monEntierStatic; }

Houssam HNAIDI

Formation C++

27/ 28

Structure

Interface/Impl ementation

Introduction de classe

Constructeurs et Destructeurs

Membres statiques

Fonctions membres statiques

Fonction statiques
Elle ne dispose par du pointeur this Elle ne peut utiliser que les fonctions et membres statics Code : Fichier H
class CPersonne { public : CPersonne(); static int combienDePersonnes(); private : static int ms_nombrePersonnes; };

Code : Fichier CPP


//Annonce du membre statique CPersonne::ms_nombrePersonnes = 0; CPersonne::CPersonne() { ms_nombrePersonnes++; } CPersonne::combienDePersonnes() { return ms_nombrePersonnes; }

Code : main.cpp
int main(int argc, char argv) { CPersonne p1,p2,p3; cout << Il y a << CPersonne::combienDePersonnes() << personnes << endl; cout << Il y a << p1.combienDePersonnes() << personnes << endl; }

Houssam HNAIDI

Formation C++

28/ 28

S-ar putea să vă placă și