conception orientée objet chapitre iii. classes et objets · 2020-05-07 · programmation...

70
Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs... Conception orientée objet Chapitre III. Classes et objets Dr. Fateh SEGHIR Email: [email protected] Sétif 1 university Faculty of technology Department of electrotechnic April 18, 2020 Dr. Fateh SEGHIR Chapitre III. Classes et objets

Upload: others

Post on 12-Jul-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Conception orientée objetChapitre III. Classes et objets

Dr. Fateh SEGHIREmail: [email protected]

Sétif 1 universityFaculty of technology

Department of electrotechnic

April 18, 2020

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 2: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Sommaire1 Programmation orientée objet (POO)

Programmation procédurale vs POOEncapsulation et masquage des données d’un objetRéutilisation d’objetsClasses et objets

2 POO en langage C++Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

3 Surcharge des constructeurs. . .Surchage des constructeurs et fonctions membres privésTableaux d’objets

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 3: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Programmation procédurale vs POOEncapsulation et masquage des données d’un objetRéutilisation d’objetsClasses et objets

Sommaire1 Programmation orientée objet (POO)

Programmation procédurale vs POOEncapsulation et masquage des données d’un objetRéutilisation d’objetsClasses et objets

2 POO en langage C++Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

3 Surcharge des constructeurs. . .Surchage des constructeurs et fonctions membres privésTableaux d’objets

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 4: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Programmation procédurale vs POOEncapsulation et masquage des données d’un objetRéutilisation d’objetsClasses et objets

Techniques de programmationDeux techniques de programmation peuvent être utilisées:

1 Programmation procédurale (procedural programming).2 Programmation orientée objet (object-oriented programming)

Programmation procédurale

Dans ce type de programmation Les données sont stockées dans une collection devariables et/ou de structures associées à un ensemble de fonctions effectuant desopérations sur ces données. Les données et les fonctions sont des entités distinctes .

Programmation orientée objet (POO)

Alors que la programmation procédurale est basée sur la création de procédures ou defonctions, la POO est basée sur la création d’objets.

Objet (Object)

Un objet est une entité logicielle qui contient à la fois des données et des procédures.Les données contenues dans un objet sont appelées les attributs de l’objet. Lesprocédures qui sont exécutées par un objet sont appelées méthodes.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 5: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Programmation procédurale vs POOEncapsulation et masquage des données d’un objetRéutilisation d’objetsClasses et objets

Représentation graphique d’un objet

Objet

Un objet est une entité logicielle autonome contient à la fois des données et desprocédures. Les données membres contenues dans un objet sont appelées lesvariables membres ou attributs de l’objet. Les procédures qui sont exécutées par unobjet sont appelées fonctions membres ou méthodes.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 6: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Programmation procédurale vs POOEncapsulation et masquage des données d’un objetRéutilisation d’objetsClasses et objets

Sommaire1 Programmation orientée objet (POO)

Programmation procédurale vs POOEncapsulation et masquage des données d’un objetRéutilisation d’objetsClasses et objets

2 POO en langage C++Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

3 Surcharge des constructeurs. . .Surchage des constructeurs et fonctions membres privésTableaux d’objets

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 7: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Programmation procédurale vs POOEncapsulation et masquage des données d’un objetRéutilisation d’objetsClasses et objets

Encapsulation et masquage des données d’un objet

Encapsulation

On entend par l’encapsulation, le regroupement des données et de code(instructions) dans un seul objet.

Masquage des données d’un objet

Le masquage des données fait référence à la capacitéd’un objet de masquer ses données au code qui setrouve en dehors de lui.

Seules les fonctions membres de l’objet peuventaccéder directement à ses données et y effectuer desmodifications.

Un objet cache généralement ses données, maisautorise les codes extérieurs à accéder à sesfonctions membres. Et de ce fait, les fonctions membresde l’objet autorisent des codes extérieurs d’accéderindirectement aux données membres de cet objet.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 8: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Programmation procédurale vs POOEncapsulation et masquage des données d’un objetRéutilisation d’objetsClasses et objets

Sommaire1 Programmation orientée objet (POO)

Programmation procédurale vs POOEncapsulation et masquage des données d’un objetRéutilisation d’objetsClasses et objets

2 POO en langage C++Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

3 Surcharge des constructeurs. . .Surchage des constructeurs et fonctions membres privésTableaux d’objets

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 9: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Programmation procédurale vs POOEncapsulation et masquage des données d’un objetRéutilisation d’objetsClasses et objets

Réutilisation d’objets

La POO a également été encouragée par la possibilité de la réutilisation des objets.Un objet est utilisé par des programmes qui ont besoin de son service.

Exemple de réutilisation d’objets

Mr. KADOUR, est un programmeur qui a développé un objet pour le traitementdes images 3D. Il est un spécialiste en mathématiques et il sait beaucoup surl’infographie.

Son objet est codé pour permettre d’effectuer toutes les opérationsmathématiques 3D nécessaires pour gérer le matériel vidéo de l’ordinateur.

Miss. BARKAHOUM, qui écrit un programme pour un cabinet d’architectes, abesoin d’afficher des images 3D des bâtiments.

Parce qu’elle ne possède pas beaucoup de connaissances en infographie, ellepeut utiliser l’objet créé par Mr. KADOUR pour effectuer le traitement etl’affichage des images 3D.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 10: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Programmation procédurale vs POOEncapsulation et masquage des données d’un objetRéutilisation d’objetsClasses et objets

Sommaire1 Programmation orientée objet (POO)

Programmation procédurale vs POOEncapsulation et masquage des données d’un objetRéutilisation d’objetsClasses et objets

2 POO en langage C++Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

3 Surcharge des constructeurs. . .Surchage des constructeurs et fonctions membres privésTableaux d’objets

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 11: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Programmation procédurale vs POOEncapsulation et masquage des données d’un objetRéutilisation d’objetsClasses et objets

Classes et objets -1-Avant qu’un objet puisse être créé et utilisé dans un programme, il doit être conçu parun programmeur. Ce dernier détermine les attributs et les fonctions nécessaires,puis crée et définit une classe.

Classe

Une classe est un code qui spécifie les attributs et les fonctions membres qu’untype particulier d’objet peut avoir.

On peut considérer une classe comme un “plan directeur”à partir duquel desobjets peuvent être créés. Il sert un objectif similaire à celui du plan d’unemaison. Le plan lui-même n’est pas une maison, mais une description détailléed’une maison.

Lorsque nous utilisons le plan pour construire une maison réelle, nous pouvonsdire que nous construisons une instance de la maison décrite par le plan.

On peut construire plusieurs maisons identiques à partir du même plan. Chaquemaison est une instance distincte de la maison décrite par le plan directeur.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 12: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Programmation procédurale vs POOEncapsulation et masquage des données d’un objetRéutilisation d’objetsClasses et objets

Classes et objets -2-Exemple de relation entre Classe (plan d’une maison) et ces Objets (maisons réelles)

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 13: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Programmation procédurale vs POOEncapsulation et masquage des données d’un objetRéutilisation d’objetsClasses et objets

Classes et objets -3-Une classe n’est pas un objet, mais c’est une description d’un objet.Lorsqu’un programme est en cours d’exécution, il utilise la classe pour créer enmémoire autant d’objets d’un type spécifique que nécessaire. Chaque objetcréé à partir d’une classe est appelé une instance d’une classe.Voici un exemple de description d’une classe: la classe Rectangle, encapsuleles données membres: width et length, ainsi que les fonctions membres:setWidth, setLength, getWidth, getLength et getArea, pour manipuler cesdonnées.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 14: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Sommaire1 Programmation orientée objet (POO)

Programmation procédurale vs POOEncapsulation et masquage des données d’un objetRéutilisation d’objetsClasses et objets

2 POO en langage C++Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

3 Surcharge des constructeurs. . .Surchage des constructeurs et fonctions membres privésTableaux d’objets

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 15: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Déclaration d’une classe en C++Une classe est un type de données, qui est composé de variables et de fonctions.

XFormat général

1 c lass ClassName2 {3 d e c l a r a t i o n ;4 / / . . . more dec la ra t i on s5 / / may f o l l o w . . .6 } ;

XClasse Rectangle

1 c lass Rectangle2 {3 double width ;4 double leng th ;5 } ; / / Don ’ t f o r g e t the

semicolon .

Cependant, il y a un problème avec l’exemple dedéclaration de la classe Rectangle.

Les données membres de la classe Recatnglesont privés (private) par défaut.

Les membres privés d’une classe ne sont pasaccessibles par des instructions en dehors decette classe. Ainsi, aucune instruction en dehorsde la classe Rectangle ne peut accéder auxdonnées membres width et length.

Les membres privés d’une classe sont masquéset ne sont accessibles que par les fonctionsmembres de la même classe.

Les membres publiques (public) d’une classesont accessibles par un code extérieur à la classe.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 16: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Sommaire1 Programmation orientée objet (POO)

Programmation procédurale vs POOEncapsulation et masquage des données d’un objetRéutilisation d’objetsClasses et objets

2 POO en langage C++Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

3 Surcharge des constructeurs. . .Surchage des constructeurs et fonctions membres privésTableaux d’objets

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 17: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Spécificateurs d’accès: private & publicC++ offre les mots clés private et public, qu’on peut les utiliser dans la déclaration declasse. Ces mots clés sont appelés spécificateurs d’accès (access specifiers) car ilsspécifient comment accéder aux membres d’une classe.

Format général d’une déclaration de classe utilisant les spécificateurs d’accès.

1 c lass ClassName2 {3 p r i v a t e :4 / / Dec la ra t ions o f p r i v a t e5 / / members appear here .6 p u b l i c :7 / / Dec la ra t ions o f p u b l i c8 / / members appear here .9 } ;

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 18: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Les fonctions membres publicsPour autoriser l’accès aux variables privées d’une classe, il faut créer des fonctionspubliques qui fonctionnent avec les variables privées.

Considérons la classe Rectangle suivante:

1 c lass Rectangle2 {3 double width ;4 double leng th ;5 } ;

Pour permettre l’accès aux variables width etlength d’un objet Rectangle, on peut rajouterdes fonctions publiques qui accèdent à cesdeux variables comme indiqué dans lanouvelle définition de cette classe dans leListing droite.

1 c lass Rectangle2 {3 p r i v a t e :4 double width ;5 double leng th ;6 p u b l i c :7 vo id setWidth ( double ) ;8 vo id setLength ( double ) ;9 double getWidth ( ) const ;

10 double getLength ( ) const ;11 double getArea ( ) const ;12 } ;

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 19: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Le mot clé const avec les fonctions membres

1 c lass Rectangle2 {3 p r i v a t e :4 double width ;5 double leng th ;6 p u b l i c :7 vo id setWidth ( double ) ;8 vo id setLength ( double ) ;9 double getWidth ( ) const ;

10 double getLength ( ) const ;11 double getArea ( ) const ;12 } ;

Prototype d’une fonctions membre

La déclaration de la classe Rectangle contientdes déclarations ou des prototypes pour cinqfonctions membres: setWidth, setLength,getWidth, getLength et getArea.

Mot clé const avec les fonctions membres

Le const qui apparaît dans lesdéclarations des fonctions getWidth,getLength et getArea indique que cesfonctions ne changeront aucune donnéemembre stockée dans l’objet appelant.

Si on écrit par inadvertance (erreur) ducode dans la fonction qui modifie lesdonnées de l’objet appelant, lecompilateur générera une erreur.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 20: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Sommaire1 Programmation orientée objet (POO)

Programmation procédurale vs POOEncapsulation et masquage des données d’un objetRéutilisation d’objetsClasses et objets

2 POO en langage C++Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

3 Surcharge des constructeurs. . .Surchage des constructeurs et fonctions membres privésTableaux d’objets

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 21: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Définition des fonctions membres d’une classe -1-Les définitions des cinq fonctions membres de la classe Rectangle sont écrites endehors de sa déclaration, comme illustré dans le Listing suivant.

1 void Rectangle : : setWidth ( double w)2 {3 width = w;4 }5 vo id Rectangle : : setLength ( double len )6 {7 leng th = len ;8 }9

10 double Rectangle : : getWidth ( ) const11 {12 r e t u r n width ;13 }14 double Rectangle : : getLength ( ) const15 {16 r e t u r n leng th ;17 }18 double Rectangle : : getArea ( ) const19 {20 r e t u r n width * leng th ;21 }

Scope resolution operator ::

Pour chaque définition d’unefonction, “ Rectangle::”précède sadéfinition. L’opérateur :: est appeléopérateur de résolution de portée(scope resolution operator ).

Lorsque Rectangle:: apparaît avantle nom d’une fonction dans sonentête de fonction, cette fonction estidentifiée en tant qu’une fonctionmembre de la classe Rectangle.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 22: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Définition des fonctions membres d’une classe -2-

Format général de l’entête de toute fonction membre définie endehors de la déclaration d’une classe.

1 ReturnType ClassName : : functionName ( ParameterL is t )

ReturnType: est le type de retour de la fonction.ClassName: est le nom de la classe dont la fonction estmembre.functionName: est le nom de la fonction membre.ParameterList: est une liste facultative de déclaration desvariables paramètres.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 23: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Définition en-ligne des fonctions membres

Inline member functions

Lorsque le corps d’une fonction membre estpetit, il est généralement plus pratique de placerla définition de cette fonction dans la déclarationde classe (au lieu de son prototype).

Par exemple, dans la classe Rectangle, lesfonctions membres getWidth, getLength etgetArea n’ont chacune qu’une seule instruction.La déclaration de la classe Rectangleprécédente pourrait être révisée comme indiquédans ce Listing.

1 c lass Rectangle2 {3 p r i v a t e :4 double width ;5 double leng th ;6 p u b l i c :7 vo id setWidth ( double ) ;8 vo id setLength ( double ) ;9 double getWidth ( ) const

10 { r e t u r n width ; }11 double getLength ( ) const12 { r e t u r n leng th ; }13 double getArea ( ) const14 { r e t u r n width * leng th ; }15 } ;

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 24: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Performance de définition en ligne des fonctionsmembres

Il se passe beaucoup de choses chaque fois qu’une fonction est appelée. Uncertain nombre d’éléments spéciaux, tels-que l’adresse de retour de la fonctionainsi que ces valeurs d’arguments sont stockées dans une section de mémoireappelée pile “stack ”.Toutes ces réservations mémoires, prennent un temps processeur précieux.Bien que le temps nécessaire soit minuscule, il peut s’additionner si une fonctionest appelée plusieurs fois, comme dans une boucle.Les fonctions en ligne sont compilées différemment des autres fonctions. Dansle code exécutable, les fonctions en ligne ne sont pas appelées au sensconventionnel.Dans un processus connu sous le nom “inline expansion ”, le compilateurremplace l’appel à une fonction en ligne par le code de la fonction elle-même.Cela signifie que la surcharge nécessaire pour un appel de fonctionconventionnel n’est pas nécessaire pour une fonction en ligne et peut entraînerune amélioration des performances.Étant donné que le code de la fonction en ligne peut apparaître plusieurs foisdans le programme exécutable, la taille du programme peut cependantaugmenter.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 25: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Placement des membres publics et privésAucune règle ne vous oblige à déclarer un membre privé devant un membre publique.La classe Rectangle peut être déclarée comme dans les deux déclarations suivantes.

1ère déclaration

1 c lass Rectangle2 {3 p u b l i c :4 vo id setWidth ( double ) ;5 vo id setLength ( double ) ;6 double getWidth ( ) const ;7 double getLength ( ) const ;8 double getArea ( ) const ;9 p r i v a t e :

10 double width ;11 double leng th ;12 } ;

2ème déclaration

1 c lass Rectangle2 {3 p r i v a t e :4 double width ;5 p u b l i c :6 vo id setWidth ( double ) ;7 vo id setLength ( double ) ;8 double getWidth ( ) const ;9 double getLength ( ) const ;

10 double getArea ( ) const ;11 p r i v a t e :12 double leng th ;13 } ;

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 26: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Accesseur et mutateur

Accesseur et mutateur

Une fonction membre qui obtient une valeur de la variable membre d’une classemais ne la modifie pas est appelée accesseur (Accessor ).

Une fonction membre qui stocke une valeur dans une variable membre oumodifie la valeur de la variable membre est appelée mutateur (Mutator ).

1 c lass Rectangle2 { p r i v a t e :3 double width ;4 double leng th ;5 p u b l i c :6 vo id setWidth ( double ) ;7 vo id setLength ( double ) ;8 double getWidth ( ) const9 { r e t u r n width ; }

10 double getLength ( ) const11 { r e t u r n leng th ; }12 double getArea ( ) const13 { r e t u r n width * leng th ; }14 } ;

getLength, getWidth et getArea sont des accesseurssetLength et setWidth sont des mutateurs.

Mot clé const

Lorsqu’on marque une fonction membre comme const, lecompilateur génère une erreur si on écrit dans la fonction uncode qui modifie les données membres de l’objet appelant.Donc, Il est recommandé de marquer toutes les fonctionsaccesseurs comme const, parce que cela diminue leschances d’avoir des bogues dans votre code.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 27: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

L’importance de cacher les données d’une classe -1-

L’intérêt de cacher les données membres d’une classe

En tant qu’étudiant débutant, on demande peut-être pourquoi on masque lesdonnées contenues dans les classes qu’on crée?

Au fur et à mesure qu’on apprend à programmer, on devient des utilisateurs denos propres classes, il peut donc sembler qu’on déploie des grands efforts pourcacher des données membres.

Cependant, si on développe des logiciels dans l’industrie, les classes qu’on créeseront utilisées comme composants dans des grands systèmes/logiciels. Donc,autres programmeurs peuvent utiliser nos classes.

En masquant les données membres d’une classe et en permettant d’y accéderuniquement via les fonctions membres de cette classe,on assure que la classe fonctionnera comme on le souhaite.

Ce principe nous permet aussi d’ajouter aisément des règles de validation et descontraintes d’intégrité, par exemple limiter le domaine des valeurs qu’unevariable peut prendre (validité) ou vérifier que cette valeur n’entre pas en conflitavec les valeurs d’autres variables (intégrité).

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 28: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

L’importance de cacher les données d’une classe -2-

1 void Rectangle : : setWidth ( double w)2 {3 i f (w >= 0)4 width = w;5 e lse6 {7 cout << " I n v a l i d width \ n " ;8 e x i t ( EXIT_FAILURE ) ;9 }

10 }

1 vo id Rectangle : : setLength ( double len )2 {3 i f ( len >= 0)4 leng th = len ;5 e lse6 {7 cout << " I n v a l i d leng th \ n " ;8 e x i t ( EXIT_FAILURE ) ;9 }

10 }

Ici ces deux fonctions (Mutators) ne se chargent pas uniquement pour affecterles valeurs des paramètres aux variables width et length. Si un nombre négatifa été transmis à ces fonctions, un message d’erreur s’affiche, puis la fonctionexit est appelée pour abandonner le programme. (validation des données)Gardez à l’esprit, que l’arrêt d’un programme via l’appel de la fonction exit,comme nous l’avons fait dans ces exemples, n’est pas la meilleure façonde traiter les données non valides. Dans le dernier chapitre, nous discuterons leconcept des exceptions, qui offrent un meilleur moyen aux classes de gérer leserreurs.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 29: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Sommaire1 Programmation orientée objet (POO)

Programmation procédurale vs POOEncapsulation et masquage des données d’un objetRéutilisation d’objetsClasses et objets

2 POO en langage C++Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

3 Surcharge des constructeurs. . .Surchage des constructeurs et fonctions membres privésTableaux d’objets

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 30: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Définition d’un(e) instance/objet d’une classe

Les objets de classe sont créés avec des instructions de définition simples, toutcomme les variables. Voici le format général d’une instruction simple dedéfinition d’un objet. Dans ce format, ClassName est le nom d’une classe etobjectName est le nom que nous donnons à l’objet.

1 ClassName objectName ;

Par exemple, l’instruction suivante définit box comme un objet de la classeRectangle.

1 Rectangle box ;

La définition d’un objet de classe est appelée l’instanciation d’une classe.Dans cette instruction, box est une instance de la classe Rectangle.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 31: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Accès aux membres d’un objetSupposons que nous voulons modifier la valeur de la variable width de l’objetbox, qui est définie par l’instruction Rectangle box;. Pour ce faire, il faut utiliserl’objet box pour appeler la fonction membre setWidth. Il faut utiliser l’opérateurpoint (.) pour appeler les fonctions membres d’une classe.

1 box . setWidth ( 1 2 . 7 ) ;

Dans cette instruction, l’objet box appelle la fonction membre setWidth, enpassant 12.7 comme argument. Par conséquent, la variable width de cet objetsera initialisé à 12.7.Voici d’autres exemples d’instructions qui utilisent l’objet box pour appeler desfonctions membres.

1 box . setLength ( 4 . 8 ) ; / / Set box ’ s leng th to 4 . 8 .2 x = box . getWidth ( ) ; / / Assign box ’ s width to x .3 cout << box . getLength ( ) ; / / D isp lay box ’ s leng th .4 cout << box . getArea ( ) ; / / D isp lay box ’ s area .

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 32: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Exemple d’un programme complet qui illustrel’utilisation de la classe Rectangle -1-

1 / / This program demonstrates a simple c lass .2 # inc lude <iostream >3 using namespace std ;45 / / Rectangle c lass d e c l a r a t i o n .6 c lass Rectangle7 {8 p r i v a t e :9 double width ;

10 double leng th ;11 p u b l i c :12 vo id setWidth ( double ) ;13 vo id setLength ( double ) ;14 double getWidth ( ) const ;15 double getLength ( ) const ;16 double getArea ( ) const ;17 } ;

18 vo id Rectangle : : setWidth ( double w)19 { width = w; }20 void Rectangle : : setLength ( double len )21 { leng th = len ; }22 double Rectangle : : getWidth ( ) const23 { r e t u r n width ; }24 double Rectangle : : getLength ( ) const25 { r e t u r n leng th ; }26 double Rectangle : : getArea ( ) const27 { r e t u r n width * leng th ; }2829 / / Funct ion main30 i n t main ( )31 {32 / / Def ine an ins tance of the Rectangle

c lass33 Rectangle box ;

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 33: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Exemple d’un programme complet qui illustrel’utilisation de la classe Rectangle -2-

34 / / Local va r i a b l e s f o r width and leng th35 double rec tWid th ;36 double rec tLength ;3738 / / Get the rec tang le ’ s width and leng th from the user .39 cout << " This program w i l l c a l c u l a t e the area of a \ n " ;40 cout << " rec tang le . What i s the width? " ;41 c in >> rec tWid th ;42 cout << "What i s the leng th ? " ;43 c in >> rectLength ;4445 / / Store the width and leng th o f the rec tang le i n the box ob jec t .46 box . setWidth ( rec tWid th ) ;47 box . setLength ( rec tLength ) ;4849 / / D isp lay the rec tang le ’ s data .50 cout << " Here i s the rec tang le ’ s data : \ n " ;51 cout << " Width : " << box . getWidth ( ) << endl ;52 cout << " Length : " << box . getLength ( ) << endl ;53 cout << " Area : " << box . getArea ( ) << endl ;54 r e t u r n 0 ;55 }

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 34: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Exemple d’un programme complet qui illustrel’utilisation de la classe Rectangle -3-

À l’intérieur de la fonction main, à la ligne 33, l’instruction Rectangle box; créeun objet Rectangle nommé box.

Cet objet est illustré à la Figure suivante. Les variables membres width etlength ne contiennent pas encore de valeurs significatives. Les variablesmembres d’un objet ne sont pas automatiquement initialisées à 0.

Lorsque la variable membre d’un objet est créée pour la première fois, ellecontient une valeur aléatoire qui existe à l’emplacement mémoire de la variablemembre. Nous appelons communément une telle valeur aléatoire “garbage”.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 35: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Exemple d’un programme complet qui illustrel’utilisation de la classe Rectangle -4-

Aux lignes 40 à 43, le programme invite l’utilisateur à saisir la largeur et lalongueur d’un rectangle. La largeur et La longueur entrées par l’utilisateur sontrespectivement stockées dans les variables rectWidth et rectLength.À la ligne 46, l’instruction box.setWidth(rectWidth); utilise l’objet box pourappeler la fonction membre setWidth, en passant la valeur de la variablerectWidth comme argument.Cela initialise la variable membre width de l’objet box à la valeur rectWidth.Supposant que rectWidth contient la valeur 10, la Figure suivante montre l’étatde l’objet box après l’exécution de cette instruction.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 36: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Exemple d’un programme complet qui illustrel’utilisation de la classe Rectangle -5-

À la ligne 47, l’instruction box.setLength(rectLength); utilise l’objet box pourappeler la fonction membre setLength, en passant la valeur de la variablerectLength comme argument.

Cela affecte à la variable membre Length de l’objet box la valeur de rectLength.

Supposant que rectLength contient la valeur 5, la Figure suivante montre l’étatde l’objet box après l’exécution de cette instruction.

Les lignes 51, 52 et 53 utilisent l’objet box pour appeler les fonctions membresgetWidth, getLength et getArea pour afficher les valeurs de retour à l’écran.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 37: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Éviter de déclarer des données périmées

Éviter de déclarer des données périmées

Dans la classe Rectangle, les fonctions membres getLength et getWidthrenvoient les valeurs stockées dans les variables membres length et width,mais la fonction membre getArea renvoie le résultat d’un calcul.

Vous vous demandez peut-être pourquoi la surface du rectangle n’est passtockée dans une variable membre, comme length et width.

La surface n’est pas stockée dans une variable membre car elle pourraitpotentiellement devenir périmée (stale).

Lorsque la valeur d’un élément dépend d’autres données et que cet élémentn’est pas mis-à-jour lorsque ces données sont modifiées, il est dit que cetélément est devenu périmé.

Si la surface du rectangle était stockée dans une variable membre, sa valeurdeviendrait incorrecte dès que les variables length ou width changeaient.

Lors de la conception d’une classe, vous devez prendre soin de ne pas stockerdans une variable membre des données calculées qui pourraient potentiellementdevenir périmées. À la place, créez-vous une fonction membre qui renvoie lerésultat du calcul.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 38: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Separating Class Specification from ImplementationDans les programmes que nous avons examinés jusqu’à présent,la déclaration d’une classe, les définitions des fonctions membres etle programme d’application sont tous stockés dans un seul fichier.Une manière plus conventionnelle de concevoir des programmes C++ consiste àstocker la déclaration de classe et les définitions des fonctions membres dansleurs propres fichiers séparés. En règle générale, les composants d’unprogramme sont stockés de la manière suivante.

1 Le déclaration de classe est stockée dans leur propre fichier entête. Un fichierentête contenant une déclaration de classe est appelé class specification file.Le nom du fichier de spécification de classe est généralement le même que lenom de la classe, avec une extension .h.

2 Les définitions des fonctions membres pour une classe sont stockées dans unfichier .cpp distinct appelé class implementation file. Le fichier portegénéralement le même nom que la classe, avec l’extension .cpp.

3 Tout programme qui utilise la classe déclarée doit #include le fichier entête decette classe. Le fichier .cpp de la classe implémentée (celui qui contient lesdéfinitions des fonctions membres) doit être compilé et lié au programmeprincipal. Ce processus peut être automatisé avec un projet ou en faire unutilitaire. Les environnements de développement intégrés tels que Dev-C++fournissent des moyens pour créer des projets multi-fichiers.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 39: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Class specification fileVoyons comment nous pourrions réécrire le programme complet de la classeRectangle, en utilisant cette approche de conception. (1) Tout d’abord, la déclarationde la classe Rectangle serait stockée dans le fichier Rectangle.h suivant.

1 / / S p e c i f i c a t i o n f i l e f o r the Rectangle c lass2 # i f n d e f RECTANGLE_H3 # def ine RECTANGLE_H4 / / Rectangle c lass d e c l a r a t i o n .5 c lass Rectangle6 {7 p r i v a t e :8 double width ;9 double leng th ;

10 p u b l i c :11 vo id setWidth ( double ) ;12 vo id setLength ( double ) ;13 double getWidth ( ) const ;14 double getLength ( ) const ;15 double getArea ( ) const ;16 } ;17 # end i f

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 40: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Class implementation file(2) Ensuite, nous avons besoin d’un fichier d’implémentation qui contient lesdéfinitions des fonctions membres de la classe. Le fichier d’implémentation de laclasse Rectangle est Rectangle.cpp.

1 / / Implementat ion f i l e f o r the Rectangle c lass .2 # inc lude " Rectangle . h " / / Needed f o r the

Rectangle c lass3 # inc lude <iostream > / / Needed f o r cout4 # inc lude < c s t d l i b > / / Needed f o r the e x i t

f u n c t i o n5 using namespace std ;67 vo id Rectangle : : setWidth ( double w)8 {9 i f (w >= 0)

10 width = w;11 else12 {13 cout << " I n v a l i d width \ n " ;14 e x i t ( EXIT_FAILURE ) ;15 }16 }

17 void Rectangle : : setLength ( double len )18 {19 i f ( len >= 0)20 leng th = len ;21 else22 {23 cout << " I n v a l i d leng th \ n " ;24 e x i t ( EXIT_FAILURE ) ;25 }26 }27 double Rectangle : : getWidth ( ) const28 { r e t u r n width ; }2930 double Rectangle : : getLength ( ) const31 { r e t u r n leng th ; }3233 double Rectangle : : getArea ( ) const34 { r e t u r n width * leng th ; }

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 41: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

The use of the specification and implementation filesin a program -1-

1 / / This program uses the Rectangle class , which i s declared i n the Rectangle . h f i l e .2 / / The member Rectangle c lass ’ s member f un c t i on s are def ined i n the Rectangle . cpp f i l e3 / / This program should be compiled w i th those f i l e s i n a p r o j e c t .4 # inc lude <iostream >5 # inc lude " Rectangle . h " / / Needed f o r Rectangle c lass6 using namespace std ;7 i n t main ( )8 { Rectangle box ; / / Def ine an ins tance of the Rectangle c lass9 double rec tWid th ; / / Local v a r i a b l e f o r width

10 double rec tLength ; / / Local v a r i a b l e f o r leng th11 / / Get the rec tang le ’ s width and leng th from the user .12 cout << " This program w i l l c a l c u l a t e the area of a \ n " ;13 cout << " rec tang le . What i s the width? " ; c in >> rec tWid th ;14 cout << "What i s the leng th ? " ; c in >> rectLength ;15 / / Store the width and leng th o f the rec tang le i n the box ob jec t .16 box . setWidth ( rec tWid th ) ; box . setLength ( rec tLength ) ;17 / / D isp lay the rec tang le ’ s data .18 cout << " Here i s the rec tang le ’ s data : \ n " ;19 cout << " Width : " << box . getWidth ( ) << endl ;20 cout << " Length : " << box . getLength ( ) << endl ;21 cout << " Area : " << box . getArea ( ) << endl ;22 r e t u r n 0 ;23 }

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 42: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

The use of the specification and implementation filesin a program -2-

Ce programme (Pgm.cpp) possède une directive #include pour le fichier Rectangle.hà la ligne 5. Cela provoque la déclaration de la classe Rectangle à inclure dans lefichier Pgm.cpp. Pour créer un programme exécutable à partir du fichier Pgm.cpp, lesétapes suivantes doivent être suivies.

Le fichier d’implémentation (Rectangle.cpp) doit être compilé. Rectangle.cppn’est pas un programme complet, vous ne pouvez donc pas créer un fichierexécutable à partir de lui seul. Au lieu de cela, vous compilez Rectangle.cppdans un fichier objet qui contient le code compilé pour la classe Rectangle. Cefichier serait généralement nommé Rectangle.obj.Le fichier du programme principal (Pgm.cpp) doit être compilé. Ce fichier n’estpas non plus un programme complet car il ne contient aucun coded’implémentation pour la classe Rectangle. Vous compilez donc ce fichier dansun fichier objet tel que Pgm.obj.Les fichiers objets Pgm.obj et Rectangle.obj sont liés ensemble pour créer unfichier exécutable, qui serait nommé Pgm.exe.

Heureusement, la plupart des environnements de développement intégré exécutent

automatiquement toutes ces étapes pour vous.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 43: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

The use of the specification and implementation filesin a program -3-

Par exemple, dans Dev-C++, vous créez un projet, puis vous ajoutez simplement tousles fichiers au projet. Lorsque vous compilez le projet, les étapes sont prises en chargepour vous et un fichier exécutable est généré.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 44: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Benefits of separating a class into specification andimplementation files

Avantages de séparer une classe en fichiers de spécification et d’implémentation

La séparation d’une classe dans un fichier de spécification et un autred’implémentation offre une grande flexibilité. Tout d’abord, si vous souhaitezdonner votre classe à un autre programmeur, vous n’avez pas à partager toutvotre code source avec ce programmeur. Vous pouvez lui donner le fichier despécification et le fichier objet compilé pour l’implémentation de la classe. L’autreprogrammeur insère simplement la directive #include nécessaire dans sonprogramme, le compile et le relie au fichier objet de votre classe. Cela empêchel’autre programmeur, qui ne connaît peut-être pas tous les détails de votre code,d’apporter des modifications qui introduiront des bogues.

La séparation d’une classe en fichiers de spécification et d’implémentationfacilite également les manipulations lorsque les fonctions membres de la classedoivent être modifiées. Il suffit de modifier le fichier d’implémentation et de lerecompiler dans un nouveau fichier objet. Les programmes qui utilisent la classen’ont pas besoin d’être complètement recompilés, juste liés avec le nouveaufichier objet.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 45: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Sommaire1 Programmation orientée objet (POO)

Programmation procédurale vs POOEncapsulation et masquage des données d’un objetRéutilisation d’objetsClasses et objets

2 POO en langage C++Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

3 Surcharge des constructeurs. . .Surchage des constructeurs et fonctions membres privésTableaux d’objets

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 46: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Déclaration des pointeurs vers des objets -1-

L’instruction suivante définit une variable pointeur nommée rectPtr.

1 Rectangle * r e c t P t r = n u l l p t r ;

La variable rectPtr n’est pas un objet, mais elle peut contenir l’adresse d’unobjet Rectangle. Le code suivant montre un exemple.

1 Rectangle myRectangle ; / / A Rectangle ob jec t2 Rectangle * r e c t P t r = n u l l p t r ; / / A Rectangle p o i n t e r3 r e c t P t r = &myRectangle ; / / r e c t P t r now po in t s to myRectangle

1 La 1ère instruction crée un objet Rectangle nommé myRectangle.2 La 2ème instruction crée un pointeur Rectangle nommé rectPtr.3 La 3ème instruction stocke l’adresse de l’objet myRectangle dans la variable

pointeur rectPtr.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 47: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Déclaration des pointeurs vers des objets -2-

Le pointeur rectPtr peut être ensuite utilisé pour appeler des fonctions membresen utilisant l’opérateur (->). Les instructions suivantes représentent un exemple.

1 r ec t P t r−>setWidth ( 1 2 . 5 ) ;2 r ec t P t r−>setLength ( 4 . 8 ) ;

La première (deuxième) instruction appelle la fonction membre setWidth(setLength), en passant 12.5 (4.8) comme argument. Cela entraînera lestockage de 12.5 (4.8) dans la variable width (length) de l’objet myRectangle.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 48: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Constructeurs

Définitions et intérêts d’utilisation des constructeursUn constructeur est une fonction membre qui porte lemême nom que la classe.Il est automatiquement appelé lorsque l’objet est créé enmémoire ou instancié.Il est utile de considérer les constructeurs comme desroutines d’initialisation.Les constructeurs sont très utiles pour initialiser desvariables membres ou effectuer d’autres opérations deconfiguration.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 49: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Exemple de déclaration d’un constructeur

Notez que l’entête de fonction duconstructeur est différente de celle d’unefonction membre régulière.

Il n’y a pas de type de retour - pasmême de void-. En effet, lesconstructeurs ne sont pas exécutés pardes appels de fonction explicites et nepeuvent pas renvoyer des valeurs.

L’entête de définition externe d’unconstructeur prend la forme suivante.tel-que, ClassName est le nom de laclasse et ParameterList est une listefacultative de déclaration des variablesparamètres.

1 ClassName : : ClassName ( ParameterL is t )

1 # inc lude <iostream >2 using namespace std ;34 / / Demo c lass d e c l a r a t i o n .5 c lass Demo6 {7 p u b l i c :8 Demo( ) ; / / Const ruc tor9 } ;

1011 Demo : : Demo( )12 {13 cout <<"Welcome to the cons t ruc to r ! \ n " ;14 }1516 / / Funct ion main .17 i n t main ( )18 {19 Demo demoObject ; / / Demo ob jec t ;20 cout << " This program demonstrates an

ob jec t \ n " ;21 cout << " w i th a cons t ruc to r . \ n " ;22 r e t u r n 0 ;23 }

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 50: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Constructeur par défaut

Constructeur par défautSi on écrit une classe sans aucun constructeur, lorsqu’elle estcompilée, C++ crée automatiquement un constructeur pardéfaut qui ne fait rien. Par exemple, la première version de laclasse Rectangle n’avait pas de constructeur. Ainsi, lorsque laclasse a été compilée, C++ a généré le constructeur suivant.

1 Rectangle : : Rectangle ( ) { }

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 51: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Constructeur par défaut et allocation dynamique desobjets de classe

Supposons que le pointeur suivant soit défini dans un programme.

1 Rectangle * r e c t P t r = n u l l p t r ;

Cette instruction définit rectPtr comme un pointeur Rectangle. Il peut contenirl’adresse de n’importe quel objet Rectangle. Mais comme cette instruction necrée pas réellement un objet Rectangle, le constructeur ne s’exécute pas.Supposons que nous utilisons le pointeur dans une instruction qui allouedynamiquement un objet Rectangle, comme indiqué dans le code suivant.

1 r e c t P t r = new Rectangle ;

Cette instruction crée un objet Rectangle. Lorsque l’objet Rectangle est créé parl’opérateur new, son constructeur par défaut est automatiquement exécuté.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 52: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Passage des arguments aux constructeursUn constructeur peut avoir des paramètres et peut accepter des argumentslorsqu’un objet est créé. Par exemple, le prototype du constructeur suivantaccepte des arguments pour les variables membres width et length.

1 Rectangle ( double , double ) ; / / Const ruc tor

Définition du constructeur de la classe Rectangle.

1 Rectangle : : Rectangle ( double w, double len ) { width = w; leng th = len ; }

Un exemple de création d’un objet box,tel-que son constructeur est appelé avec lavaleur 10.0 passée par le paramètre w et12.0 passée par le paramètre len.

1 Rectangle box (10 .0 , 12 .0) ;

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 53: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Utilisation d’arguments par défaut avec desconstructeurs

Comme les autres fonctions, les constructeurs peuvent avoir des arguments pardéfaut qui seront passés aux paramètres automatiquement si aucun argumentn’est fourni dans l’appel de la fonction.La valeur par défaut est indiquée dans la liste des paramètres du prototype de lafonction ou dans son en-tête.Le constructeur suivant a des arguments par défaut pour chacun de sesparamètres. Par conséquent, le constructeur peut être appelé sans arguments.

1 Rectangle ( double w = 0 , double len = 0) { width = w; leng th = len ; }

Dans l’instruction suivante, aucun argument n’a été transmis au constructeur,donc les arguments par défaut pour les deux paramètres sont utilisés. Commece constructeur peut être appelé sans argument. Il s’agit donc du constructeurpar défaut.

1 Rectangle box ;

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 54: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Destructeurs

Définitions et intérêts d’utilisation des destructeurs

Un destructeur est une fonction membre qui est automatiquement appeléelorsqu’un objet de classe est détruit.

Les destructeurs sont des fonctions membres portant le même nom que laclasse, précédées du caractère tilde (∼). Par exemple, le destructeur de laclasse Rectangle serait nommé ∼Rectangle.

De la même manière que les constructeurs configurent les choses lors de lacréation d’un objet, les destructeurs effectuent des procédures d’arrêt lorsquel’objet disparaît. Par exemple, une utilisation courante des destructeurs consisteà libérer de la mémoire allouée dynamiquement par l’objet de la classe.

Remarques

Comme les constructeurs, les destructeurs n’ont pas de type de retour.

Les destructeurs ne peuvent pas accepter d’arguments, ils n’ont donc jamaisune liste des paramètres.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 55: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Exemple d’utilisation d’un destructeur -1-Voici un exemple plus pratique d’utilisation d’un destructeur. La classe ContactInfocontient les données d’un contact: le nom du contact et son numéro de téléphone.

1 / / S p e c i f i c a t i o n f i l e f o r the Contact c lass .2 # i f n d e f CONTACTINFO_H3 # def ine CONTACTINFO_H4 # inc lude < c s t r i n g > / / Needed f o r s t r l e n and s t r cpy5 / / Contac t In fo c lass d e c l a r a t i o n .6 c lass Contac t In fo7 { p r i v a t e : char *name ; char * phone ; / / The contac t8 p u b l i c :9 Contac t In fo ( char *n , char *p )

10 { / / A l l oca te j u s t enough memory f o r the contac t .11 name=new char [ s t r l e n ( n ) + 1 ] ; phone=new char [ s t r l e n ( p ) + 1 ] ;12 / / Copy the name and phone number to the a l l o c a te d memory .13 s t r cpy (name, n ) ; s t r cpy ( phone , p ) ; }14 ~Contac t In fo ( ) { de le te [ ] name ; de le te [ ] phone ; }15 const char *getName ( ) const { r e t u r n name ; }16 const char * getPhoneNumber ( ) const { r e t u r n phone ; }17 } ;18 # end i f

1 # inc lude <iostream >2 # inc lude " Contac t In fo . h "3 using namespace std ;4 i n t main ( )5 { / / Name: K r i s t en Lee

Phone Number :555−2021

6 Contac t In fo en t ry ( "K r i s t en Lee " , "555−2021" ) ;

7 / / D isp lay the ob jec t ’ sdata .

8 cout <<"Name: "<<en t ry .getName ( ) <<endl ;

9 cout <<" Phone Number : "<<en t ry . getPhoneNumber( ) <<endl ;

10 r e t u r n 0 ;11 }

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 56: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Exemple d’utilisation d’un destructeur -2-Le constructeur accepte des arguments pour les deux éléments. Le nom et lenuméro de téléphone sont transmis sous forme de pointeur vers un C-string.Plutôt que de stocker le nom et le numéro de téléphone dans un tableau decaractères avec une taille fixe, le constructeur obtient la longueur de la chaînede caractères et alloue dynamiquement juste assez de mémoire pour la contenir.Le destructeur libère la mémoire allouée lorsque l’objet est détruit.

1 # i f n d e f CONTACTINFO_H2 # def ine CONTACTINFO_H3 # inc lude < c s t r i n g >4 c lass Contac t In fo5 { p r i v a t e : char *name ; char * phone ;6 p u b l i c :7 Contac t In fo ( char *n , char *p )8 {9 name=new char [ s t r l e n ( n ) + 1 ] ; phone=new char [ s t r l e n ( p ) + 1 ] ;

10 s t r cpy (name, n ) ; s t r cpy ( phone , p ) ; }11 ~Contac t In fo ( ) { de le te [ ] name ; de le te [ ] phone ; }12 const char *getName ( ) const { r e t u r n name ; }13 const char * getPhoneNumber ( ) const { r e t u r n phone ; }14 } ;15 # end i f

1 # inc lude <iostream >2 # inc lude " Contac t In fo . h "3 using namespace std ;4 i n t main ( )5 {6 Contac t In fo en t ry ( "

K r i s t en Lee " , "555−2021" ) ;

7 cout <<"Name: "<<en t ry .getName ( ) <<endl ;

8 cout << " Phone Number : "<< en t ry .getPhoneNumber ( ) <<endl ;

9 r e t u r n 0 ;10 }

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 57: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

Destructeurs et objets de classe allouésdynamiquement

Si un objet de classe a été alloué dynamiquement par l’opérateur new, samémoire doit être libérée lorsque l’objet n’est plus nécessaire. Par exemple,dans le code suivant, objectPtr est un pointeur vers un objet de classeContactInfo alloué dynamiquement.

1 Contac t In fo * o b j e c t P t r = n u l l p t r ; / / Def ine a Contac t In fo p o i n t e r .2 o b j e c t P t r =new Contac t In fo ( " K r i s t en Lee " , "555−2021" ) ; / / Dynamic a l l o c a t i o n

L’instruction suivante utilise l’opérateur delete pour détruire l’objet créédynamiquement. Lorsque l’objet pointé par objectPtr est détruit, son destructeurest automatiquement appelé.

1 de le te o b j e c t P t r ;

XSi vous avez utilisé un pointeur intelligent tel-que unique_ptr(introduit dans C++ 11) pour allouer un objet, l’objet seraautomatiquement supprimé et son destructeur sera appelé lorsque lepointeur intelligent sortira du cadre de son porté.XIl n’est pas nécessaire d’utiliser la suppression avec un unique_ptr.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 58: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Surchage des constructeurs et fonctions membres privésTableaux d’objets

Sommaire1 Programmation orientée objet (POO)

Programmation procédurale vs POOEncapsulation et masquage des données d’un objetRéutilisation d’objetsClasses et objets

2 POO en langage C++Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

3 Surcharge des constructeurs. . .Surchage des constructeurs et fonctions membres privésTableaux d’objets

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 59: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Surchage des constructeurs et fonctions membres privésTableaux d’objets

Surcharge des constructeurs (Overloading)

Surcharge des constructeurs

Une classe peut avoir plusieurs constructeurs.

Plusieurs fonctions portant le même nom peuvent exister dans un programmeC++, tant que leurs listes de paramètres soient différentes.

Les fonctions membres d’une classe peuvent être surchargées, y compris leconstructeur.

Par exemple, un constructeur peut prendre un argument entier, tandis qu’unautre constructeur prend un double. Il pourrait même y avoir un troisièmeconstructeur prenant deux entiers.

Tant que chaque constructeur prend une liste de paramètres différente, lecompilateur peut les différencier.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 60: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Surchage des constructeurs et fonctions membres privésTableaux d’objets

Exemple de surcharge des constructeursLa classe InventoryItem contient les données d’un article stocké dans un stock:

Description de l’article ( description : un objet string), coût(cost) de l’article (double)& nombre d’unités (units) en stock (int).

1 # i f n d e f INVENTORYITEM_H2 # def ine INVENTORYITEM_H3 # inc lude < s t r i n g >4 using namespace std ;5 c lass Inven to ry I tem6 { p r i v a t e : s t r i n g d e s c r i p t i o n ;7 double cost ; i n t u n i t s ;8 p u b l i c : / / Const ruc tor #19 Inven to ry I tem ( )

10 { d e s c r i p t i o n =" " ; cost= 0 . 0 ; u n i t s =0 ; }11 / / Const ruc tor #212 Inven to ry I tem ( s t r i n g des )13 { d e s c r i p t i o n =des ; cost =0 .0 ; u n i t s =0 ; }

14 / / Const ruc tor #315 Inven to ry I tem ( s t r i n g desc , double c , i n t u )16 { d e s c r i p t i o n = desc ; cost = c ; u n i t s = u ; }17 / / Mutator f u n c t i o n s18 void se tDesc r i p t i on ( s t r i n g d ) { d e s c r i p t i o n =d ; }19 vo id setCost ( double c ) { cost = c ; }20 vo id se tUn i t s ( i n t u ) { u n i t s = u ; }21 / / Accessor f u n c t i o n s22 s t r i n g ge tDesc r i p t i on ( ) const { r e t u r n d e s c r i p t i o n ; }23 double getCost ( ) const { r e t u r n cost ; }24 i n t ge tUn i t s ( ) const { r e t u r n u n i t s ; }25 } ;26 # end i f

1er constructeur qui ne prend aucun argument, c’est un default constructor .2ème constructeur accepte un seul argument. cost & units sont initialisés à 0.3ème constructeur accepte 3 arguments pour initialiser description,cost & units.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 61: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Surchage des constructeurs et fonctions membres privésTableaux d’objets

Exemple de surcharge des constructeurs -2-Le programme suivant montre l’utilisation de la déclaration de la classe InventoryItem.Question: Qu’affichera se programme à l’écran?

1 # inc lude <iostream >2 # inc lude <iomanip >3 # inc lude " Inven to ry I tem . h "4 i n t main ( )5 { / / Create an Inven to ry I tem ob jec t6 / / and c a l l the d e f a u l t cons t r uc to r .7 Inven to ry I tem item1 ;8 item1 . se tDesc r i p t i on ( "Hammer" ) ;9 i tem1 . setCost ( 6 . 9 5 ) ;

10 item1 . se tUn i t s (12) ;11 / / Create an Inven to ry I tem ob jec t12 / / and c a l l cons t r uc to r #2.13 Inven to ry I tem item2 ( " P l i e r s " ) ;14 / / Create an Inven to ry I tem ob jec t15 / / and c a l l cons t r uc to r #3.16 Inven to ry I tem item3 ( " Wrench " ,8 .75 ,20) ;17 cout <<" The f o l l o w i n g i tems are i n

inven to ry : \ n " ;18 cout << s e t p r e c i s i o n ( 2 ) << f i xed <<

showpoint ;

19 / / D isp lay the data f o r i tem 1.20 cout <<" Desc r i p t i on : "<<item1 . ge tDesc r i p t i on ( )

<<endl ;21 cout << " Cost : $ " << item1 . getCost ( ) << endl ;22 cout << " Un i ts on Hand : " << item1 . ge tUn i t s ( )

<<endl <<endl ;23 / / D isp lay the data f o r i tem 2.24 cout <<" Desc r i p t i on : "<<item2 . ge tDesc r i p t i on ( )

<<endl ;25 cout << " Cost : $ " << item2 . getCost ( ) << endl ;26 cout << " Un i ts on Hand : " << item2 . ge tUn i t s ( )

<<endl <<endl ;27 / / D isp lay the data f o r i tem 3.28 cout <<" Desc r i p t i on : "<<item3 . ge tDesc r i p t i on ( )

<<endl ;29 cout << " Cost : $ " << item3 . getCost ( ) << endl ;30 cout <<" Un i ts on Hand : "<<item3 . ge tUn i t s ( ) <<endl

;31 r e t u r n 0 ;32 }

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 62: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Surchage des constructeurs et fonctions membres privésTableaux d’objets

Un seul constructeur par défaut et un seul destructeur.

Lorsqu’un objet est défini sans liste d’arguments pour son constructeur, lecompilateur appelle automatiquement le constructeur par défaut. Pour cetteraison, une classe ne peut avoir qu’un seul constructeur par défaut. S’il y avaitplus d’un constructeur qui pouvait être appelé sans argument, le compilateur nesaurait pas lequel appeler par défaut.

N’oubliez pas qu’un constructeur dont les paramètres ont tous un argument pardéfaut est considéré comme un constructeur par défaut. Ce serait une erreur decréer un constructeur qui n’accepte aucun paramètre avec un autre constructeurqui a des arguments par défaut pour tous ses paramètres. Dans un tel cas, lecompilateur ne pourrait pas déterminer quel constructeur exécuter.

Les classes ne peuvent également avoir qu’un seul destructeur. Étant donnéque les destructeurs ne prennent aucun argument, le compilateur n’a aucunmoyen de distinguer les différents destructeurs.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 63: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Surchage des constructeurs et fonctions membres privésTableaux d’objets

Fonctions membres surchargées

D’autres fonctions membres autres que les constructeurs peuvent égalementêtre surchargées. Cela peut être utile car parfois vous avez besoin de plusieursfaçons différentes pour effectuer la même opération.

Dans le code suivant, la première version de la fonction setCost de la classeInventoryItem accepte un argument de type double et l’affecte au cost.La deuxième version de la fonction setCost accepte un objet de type string.Cela peut être utilisé lorsque le coût de l’article est stocké dans un objet chaînede caractères. La fonction appelle la fonction atof pour convertir la chaîne decaractères en type double et affecte sa valeur au cost.

1 vo id setCost ( double c ) { cost = c ; }2 vo id setCost ( s t r i n g c ) { cost = a t o f ( c . c_s t r ( ) ) ; }

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 64: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Surchage des constructeurs et fonctions membres privésTableaux d’objets

Fonctions membres privéesUne fonction membre privée ne peut être appelée qu’à partir d’une fonction quiest membre de la même classe. Lorsqu’une fonction membre est déclaréeprivée, elle ne peut être appelée qu’en interne.Le constructeur de la classe ContactInfo appelle deux fonctions membresprivées, initName et initPhone. Ces fonctions sont privées car elles ne doiventêtre appelées qu’à partir du constructeur. Si elles sont appelées par du code endehors de la classe, ça changerait les valeurs des variables pointeurs name etphone sans libérer la mémoire vers laquelle elles pointent actuellement.

1 / / Contact c lass s p e c i f i c a t i o n f i l e ( vers ion 2)2 # i f n d e f CONTACTINFO_H3 # def ine CONTACTINFO_H4 # inc lude < c s t r i n g > / / Needed f o r s t r l e n and s t r cpy5 c lass Contac t In fo6 { p r i v a t e :7 char *name ; char * phone ;8 vo id ini tName ( char *n )9 {name = new char [ s t r l e n ( n ) + 1 ] ; s t r cpy (name, n ) ; }

10 vo id in i tPhone ( char *p )11 { phone = new char [ s t r l e n ( p ) + 1 ] ; s t r cpy ( phone , p ) ; }

12 p u b l i c :13 / / Const ruc tor14 Contac t In fo ( char *n , char *p )15 { ini tName ( n ) ; in i tPhone ( n ) ; }16 / / Des t ruc to r17 ~Contac t In fo ( )18 { de le te [ ] name ; de le te [ ] phone ; }19 const char *getName ( ) const20 { r e t u r n name ; }21 const char * getPhoneNumber ( ) const22 { r e t u r n phone ; }23 } ;24 # end i f

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 65: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Surchage des constructeurs et fonctions membres privésTableaux d’objets

Sommaire1 Programmation orientée objet (POO)

Programmation procédurale vs POOEncapsulation et masquage des données d’un objetRéutilisation d’objetsClasses et objets

2 POO en langage C++Déclaration d’une classeSpécificateurs d’accès (private & public)Définition des fonctions membres d’une classeDéfinition d’un(e) instance/objet d’une classePointeurs vers des objets, constructeurs et destructeurs

3 Surcharge des constructeurs. . .Surchage des constructeurs et fonctions membres privésTableaux d’objets

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 66: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Surchage des constructeurs et fonctions membres privésTableaux d’objets

Déclaration et initialisation d’un tableau d’objets -1-L’instruction suivante définit un tableau de 40 objets. Le nom du tableau estinventory et le constructeur par défaut est appelé pour chaque objet du tableau.

1 const i n t ARRAY_SIZE = 40; Inven to ry I tem inven to ry [ ARRAY_SIZE ] ;

Si vous souhaitez définir un tableau d’objets et appeler un constructeur quirequiert des arguments, vous devez spécifier les arguments de chaque objetindividuellement dans une liste d’initialisation. Dans l’exemple suivant, unconstructeur d’un seul argument est appelé pour créer chaque objet du tableau.

1 Inven to ry I tem inven to ry [ ] = { "Hammer" , " Wrench " , " P l i e r s " } ;

Si un constructeur nécessite plusieurs arguments, l’initialiseur doit prendre laforme d’un appel de fonction. Ici, le constructeur appelé possède 03 arguments.

1 Inven to ry I tem inven to ry [ ] = { Inven to ry I tem ( "Hammer" , 6 .95 , 12) ,2 Inven to ry I tem ( " Wrench " , 8.75 , 20) , Inven to ry I tem ( " P l i e r s " , 3 .75 , 10) } ;

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 67: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Surchage des constructeurs et fonctions membres privésTableaux d’objets

Déclaration et initialisation d’un tableau d’objets -2-Il n’est pas nécessaire d’appeler le même constructeur pour chaque objet d’untableau. Par exemple, dans l’instruction suivante, le deuxième constructeur estappelé pour inventory[0] et inventory[2], et le troisième constructeur est appelépour inventory[1].

1 Inven to ry I tem inven to ry [ ] = { "Hammer" ,2 Inven to ry I tem ( " Wrench " , 8 .75 , 20) ,3 " P l i e r s " } ;

Si vous ne fournissez pas d’initialiseur pour tous les objets d’un tableau, leconstructeur par défaut sera appelé pour chaque objet qui n’a pas d’initialiseur.Par exemple, l’instruction suivante définit un tableau de trois objets, mais nefournit d’initialiseurs que pour les deux premiers. Le constructeur par défaut estappelé pour le troisième objet.

1 const i n t SIZE = 3;2 Inven to ry I tem inven to ry [ SIZE ] = { "Hammer" ,3 Inven to ry I tem ( " Wrench " , 8 .75 , 20) } ;

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 68: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Surchage des constructeurs et fonctions membres privésTableaux d’objets

Accès aux membres des objets d’un tableauLes objets d’un tableau sont accessibles avec des indices, comme tout autretype de données dans un tableau. Par exemple, pour appeler la fonctionmembre setUnits de inventory[2], l’instruction suivante peut être utilisée.

1 inven to ry [ 2 ] . se tUn i t s (30) ;

Voici un exemple d’un programme complet, qui montre l’utilisation d’un tableaud’objets InventoryItem.

1 # inc lude <iostream > # inc lude <iomanip >2 # inc lude " Inven to ry I tem . h "3 using namespace std ;4 i n t main ( )5 { const i n t NUM_ITEMS = 5;6 Inven to ry I tem inven to ry [NUM_ITEMS] = {7 Inven to ry I tem ( "Hammer" , 6 .95 , 12) ,8 Inven to ry I tem ( " Wrench " , 8.75 , 20) ,9 Inven to ry I tem ( " P l i e r s " , 3 .75 , 10) ,

10 Inven to ry I tem ( " Ratchet " , 7 .95 , 14) ,11 Inven to ry I tem ( " Screwdr iver " ,2 .50 ,22) } ;

12 cout << setw (14) <<" Inven to ry Item "13 << setw ( 8 ) << " Cost " << setw ( 8 )14 << setw (16) << " Un i ts on Hand \ n " ;15 cout << "−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−\n " ;16 f o r ( i n t i = 0 ; i < NUM_ITEMS; i ++)17 {18 cout <<setw (14)<< inven to ry [ i ] . ge tDesc r i p t i on ( ) ;19 cout <<setw ( 8 ) << inven to ry [ i ] . getCost ( ) ;20 cout <<setw ( 7 ) << inven to ry [ i ] . ge tUn i t s ( ) <<endl ;21 }22 r e t u r n 0 ; }

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 69: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Surchage des constructeurs et fonctions membres privésTableaux d’objets

The bibliography

Tony Gaddis, Starting Out with C++ from Control Structuresthrough Objects EIGHTH EDITION, Pearson, 2019.

Dr. Fateh SEGHIR Chapitre III. Classes et objets

Page 70: Conception orientée objet Chapitre III. Classes et objets · 2020-05-07 · Programmation orientée objet (POO) POO en langage C++ Surcharge des constructeurs::: Sommaire 1 Programmation

Programmation orientée objet (POO)POO en langage C++

Surcharge des constructeurs. . .

Surchage des constructeurs et fonctions membres privésTableaux d’objets

Thank you for yourattention

Dr. Fateh SEGHIR Chapitre III. Classes et objets