Documente Academic
Documente Profesional
Documente Cultură
Interface/Impl ementation
Introduction de classe
Constructeurs et Destructeurs
Membres statiques
3 janvier 2012
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
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 ?
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; };
Houssam HNAIDI
Formation C++
14/ 28
Structure Syntaxe
Interface/Impl ementation
Introduction de classe
Constructeurs et Destructeurs
Membres statiques
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 : 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
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&); };
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&); };
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&); };
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
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 : 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
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
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
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 : 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