INF1101 Algorithmes et structures de données1 Cours 1 Les classes et les objets.

Slides:



Advertisements
Présentations similaires
La programmation orientée objet avec Java L3-MIAGE Plan
Advertisements

Modèle Logique de données
C++ 6ème cours Patrick Reuter maître de conférences
1 Quelques précisions sur l'héritage. 2 Signification de super.f() appel à la méthode f() masquée super : désigne l'objet appelant comme s'il était de.
(Classes prédéfinies – API Java)
C.
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
Programmation Orientée Objet (POO)
Paramètres et pointeurs
Leçon 3 : Héritage IUP 2 Génie Informatique
Introduction à la POO: Les classes vs les objets
Chapitre III Héritage (début)
Principes de programmation (suite)
Points importants de la semaine Les fonctions. La portée. La passage par copie. Les tableaux.
Programmation orientée objet
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Algorithmique et Programmation
Langage Oriente Objet Cours 4.
Principes de programmation (suite)
Conception des données
IFT1025, Programmation 2 Jian-Yun Nie
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
C++ : classes Introduction aux Langages Orientés Objets
Les Classes les structures en C (struct) regroupent des variables : structuration de l'analyse mais problèmes de cohérence problèmes de sécurité d'accès.
77 Utilisation des classes (suite). 7-2 Objectifs A la fin de ce cours, vous serez capables de : Définir des méthodes surchargées dans une classe Fournir.
Classes abstraites et Interfaces
Langage Oriente Objet Cours 2.
Leçon 2 : Surcharge des opérateurs IUP 2 Génie Informatique Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Structures de données IFT-2000
Structures de données IFT-10541
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
Introduction au paradigme orienté-objet (suite)
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
8PRO100 Éléments de programmation Les types composés.
Langages orientés objets
COURS DE PROGRAMMATION ORIENTEE OBJET :
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
INF1101 Algorithmes et structures de données
Structures de données IFT-2000
INF1101 Algorithmes et structures de données
Plan cours La notion de pointeur et d’adresse mémoire.
Héritage Licence Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier.
Héritage et composition
Les classes et les objets
B.Shishedjiev - Conception des données
La notion de type revisitée en POO
11/04/ L'héritage Cours 7 Cours 7.
Programmation objet La base.
7ième Classe (Mardi, 24 novembre) CSI2572. Devoir 3 ?
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 1 – Objets et Classes Master 1 SIGLIS1Java Lecteur - Chapitre 1 Objets et classes.
Tutorat en bio-informatique
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
PHP 7° PARTIE : PROGRAMMATION OBJET
HistoriqueHistorique Langage C++, parution du livre Bjarne Stroustrup Normalisation ANSI.
Réaliser par: Sadok Amel Cheboui hassiba
Les classes présenté par: RAHMOUNE RIME / ZEKRI SELMA.
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
Les surcharges d'opérateurs
Les classes Introduction aux Langages Orientés Objets
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O.
Chapitre VII Techniques plus avancées à travers le concept de classe.
Héritage Conception par Objet et programmation Java
Introduction à la Programmation Orientée Objet
Langage de Programmation Orientée Objet : C++
Conception de Programmes - IUT de Paris - 1ère année Les classes Introduction Déclaration d’une classe Utilisation d’une classe Définition des.
Transcription de la présentation:

INF1101 Algorithmes et structures de données1 Cours 1 Les classes et les objets

INF1101 Algorithmes et structures de données2 Plan du cours 2 I.Principe de modélisation orientée objet II.Définition et implémentation dune classe III. Constructeurs et destructeurs IV. Détails de C++ V. Conversion de types

INF1101 Algorithmes et structures de données3 I - Principe de modélisation orientée objet Classe Classe Objet Objet Principe dencapsulation Principe dencapsulation Réutilisation Réutilisation

INF1101 Algorithmes et structures de données4 Une classe Un objet possède des attributs (propriétés) et des comportements ou des opérations sur ces attributs, réalisées par des fonctions membres (on les appelle aussi méthodes) Un objet possède des attributs (propriétés) et des comportements ou des opérations sur ces attributs, réalisées par des fonctions membres (on les appelle aussi méthodes) On définit une classe pour représenter On définit une classe pour représenter un ensemble d'objets ayant les mêmes un ensemble d'objets ayant les mêmes propriétés et des comportements communs. propriétés et des comportements communs.

INF1101 Algorithmes et structures de données5 Une classe Supposons un logiciel qui doit traiter plusieurs types de cube, tel que une boîte 10x5x20, de couleur rouge, ou bien un cube 5x5x5 de couleur orange. Supposons un logiciel qui doit traiter plusieurs types de cube, tel que une boîte 10x5x20, de couleur rouge, ou bien un cube 5x5x5 de couleur orange. Il faut travailler avec plusieurs types de cubes mais qui Il faut travailler avec plusieurs types de cubes mais qui possèdent tous les mêmes propriétés et les mêmes possèdent tous les mêmes propriétés et les mêmes opérations (ou comportements) pour modifier ces opérations (ou comportements) pour modifier ces propriétés. propriétés.

INF1101 Algorithmes et structures de données6 Une classe (suite) Une classe est donc un « super » type que lon définit, une Une classe est donc un « super » type que lon définit, une généralisation dun objet possédant des propriétés et généralisation dun objet possédant des propriétés et des opérations (ou comportements). des opérations (ou comportements). Dans le langage C++, une classe ressemble à une structure Dans le langage C++, une classe ressemble à une structure que lon définirait ( struct type_cube ) avec des que lon définirait ( struct type_cube ) avec des méthodes (ou fonctions membres) pouvant modifier les méthodes (ou fonctions membres) pouvant modifier les champs de la structure. champs de la structure. Largeur Longueur Hauteur

INF1101 Algorithmes et structures de données7 Attributs et opérations dune classe Les propriétés d'un objet sont représentées à l'aide Les propriétés d'un objet sont représentées à l'aide d'attributs. d'attributs. Des valeurs sont associées à ces attributs. Des valeurs sont associées à ces attributs. Exemple : Largueur de Cube1 est 10 Exemple : Largueur de Cube1 est 10 Les comportements d'un objet sont représentés à l'aide Les comportements d'un objet sont représentés à l'aide de fonctions membres (méthodes). de fonctions membres (méthodes). Une fonction membre est une action ou une Une fonction membre est une action ou une transformation qui peut être effectuée sur un objet ou transformation qui peut être effectuée sur un objet ou par un objetExemple : Pour effectuer un déplacement, par un objet. Exemple : Pour effectuer un déplacement, il est nécessaire de faire translater le cube. il est nécessaire de faire translater le cube.

INF1101 Algorithmes et structures de données8 Représentation dune classe Nom de la classe Listes des attributs attribut: type Listes des fonctions membres fonction(arguments): valeur retournée Cube Largeur: double Longueur: double Hauteur: double setCouleur ( Couleur ) setTaille (haut, larg, long )

INF1101 Algorithmes et structures de données9 Un objet Exemple: Un rectangle 5x10x20 est un objet de classe Cube et un Cube 5x5x5est un autre objet de la classeCube. Cube 5x5x5 est un autre objet de la classe Cube. Un objet est donc une instanciation dune classe. Un objet est donc une instanciation dune classe. Cet objet possède tous les attributs et toutes les fonctions membres de la classe, mais avec des valeurs dattributs propres à lobjet. Cet objet possède tous les attributs et toutes les fonctions membres de la classe, mais avec des valeurs dattributs propres à lobjet.

INF1101 Algorithmes et structures de données10 Un objet (suite) Une fois quune classe Cube a été définie, il est possible dinstancier des objets de la classe Cube, qui posséderont des attributs associés à des valeurs. Largeur = 5 Hauteur = 10 ChangerCouleur rectangle

INF1101 Algorithmes et structures de données11 Représentation d'une instance (Cube) Hauteur = 5 Longueur = 5 Largeur = 5 (Cube) Hauteur = 5 Longueur = 5 Largeur = 5 Cube unCube; Nom de lobjet La classe Valeurs par défaut

INF1101 Algorithmes et structures de données12 Programmation par objets Principe dencapsulation (masquage des données) Types de données abstraits ( classe indépendante de son implémentation). Limplémentation de classe peut changer et le client est toujours fonctionnel. Réutilisation, réutilisation, réutilisation… Réutilisation: agrégation, héritage, généralisation.

INF1101 Algorithmes et structures de données13 Principe dencapsulation Largeur Longueur Hauteur Couleur Largeur Longueur Hauteur Couleur Les valeurs des attributs peuvent être changées seulement par les méthodes fournies avec l'objet. Changer Taille L'état de l'objet ne peut être modifié directement par le client. Écrire Info Translater Rotation Les opérations pour afficher les valeurs des attributs pour le client Changer Couleur

INF1101 Algorithmes et structures de données14 La réutilisation La réutilisation est une notion omniprésente dans le langage C++, car il est possible dutiliser une classe dun certain contexte pour la redéfinir dans un autre contexte en effectuant un héritage Héritage

INF1101 Algorithmes et structures de données15 II - Définition et implémentation dune classe ClasseClasse AttributsAttributs Fonctions membresFonctions membres Double inclusion du fichier dentêteDouble inclusion du fichier dentête Paramètres par défaut des fonctionsParamètres par défaut des fonctions InlineInline Principe dencapsulation et abstraction des donnéesPrincipe dencapsulation et abstraction des données

INF1101 Algorithmes et structures de données16 Classe En C++, la définition dune classe débute toujours en spécifiant class, suivie du nom de la classe.En C++, la définition dune classe débute toujours en spécifiant class, suivie du nom de la classe. Toute linterface de la classe, cest-à-dire les attributs etToute linterface de la classe, cest-à-dire les attributs et les signatures (entête) de fonctions, est contenue les signatures (entête) de fonctions, est contenue entre des accolades. entre des accolades. La définition dune classe se situe TOUJOURS La définition dune classe se situe TOUJOURS dans un fichier entête (ex: cube.h) dans un fichier entête (ex: cube.h)Exemple: class Cube class Cube { { (... Définition) }; Note: ne pas oublier le ; après la deuxième accolade. }; Note: ne pas oublier le ; après la deuxième accolade.

INF1101 Algorithmes et structures de données17 Interface et implémentation dune classe Limplémentation de la classe représente la définition des fonctions membres. (fichier.cpp)Limplémentation de la classe représente la définition des fonctions membres. (fichier.cpp) Linterface dune classe représente les comportements ou les fonctions membres disponibles aux clientsLinterface dune classe représente les comportements ou les fonctions membres disponibles aux clients ( fichier.h). ( fichier.h).

INF1101 Algorithmes et structures de données18 Attributs Les attributs dune classe sont des variables ou des pointeurs, mais qui ne seront généralement accessibles que par les fonctions membres de la classe. Principe dencapsulation.Les attributs dune classe sont des variables ou des pointeurs, mais qui ne seront généralement accessibles que par les fonctions membres de la classe. Principe dencapsulation. Daucune façon les attributs pourront être modifiés ou accédés à lextérieur de la classe (ex: à partir du main() ). Ils seront accessibles à laide des fonctions membres.Daucune façon les attributs pourront être modifiés ou accédés à lextérieur de la classe (ex: à partir du main() ). Ils seront accessibles à laide des fonctions membres. Pour les protéger, on indique que les attributs seront classifiés private.Pour les protéger, on indique que les attributs seront classifiés private.

INF1101 Algorithmes et structures de données19 Attributs (suite) Pour la classe Cube, on a: RÉFÉRENCE: cube.h class Cube {private: int Largeur; int Longeur; int Hauteur; Couleur maCouleur;... };

INF1101 Algorithmes et structures de données20 Attributs (suite) Cependant, le compilateur déclarera les attributs private par défaut (mais cest une bonne habitude de toujours le spécifier explicitement): class Cube { int Largeur; int Longeur; int Hauteur; Couleur maCouleur;... };

INF1101 Algorithmes et structures de données21 Fonctions membres Afin de pouvoir manipuler les attributs dune classe, nous avons recours aux fonctions membres qui permettent de retourner ou modifier la valeur dun ou des attributs.Afin de pouvoir manipuler les attributs dune classe, nous avons recours aux fonctions membres qui permettent de retourner ou modifier la valeur dun ou des attributs. Les fonctions membres qui seront accessibles au client de la classe seront signalées par : publicLes fonctions membres qui seront accessibles au client de la classe seront signalées par : public De ce fait même, les fonctions membres qui nont aucune utilité à lextérieur de la classe mais qui seront utilisées uniquement par la classe peuvent être regroupées dans la section privateDe ce fait même, les fonctions membres qui nont aucune utilité à lextérieur de la classe mais qui seront utilisées uniquement par la classe peuvent être regroupées dans la section private

INF1101 Algorithmes et structures de données22 Fonctions membres (suite) Pour la classe Cube, on a : class Cube { public: public: void setTaille(float la, float lo, float ha); void setCouleur(const couleur &uneCouleur); void setTransformation(const transf &uneTransformation); void getTaille(float &la, float &lo, float &ha) const; Couleur getCouleur() const;... private: private: int Largeur; int Longeur; int Hauteur; Couleur maCouleur;......};

INF1101 Algorithmes et structures de données23 Implémentation dune fonction membre La définition de la classe est située dans le fichier.h de la classe, toutes les implémentations des fonctions membres dune classe se situent dans le fichier.cpp de la classe (ex: moteur.cpp). Limplémentation dune classe devrait TOUJOURS être dans un fichier.cpp (ex: cube.cpp) et avoir le même nom que la classe.La définition de la classe est située dans le fichier.h de la classe, toutes les implémentations des fonctions membres dune classe se situent dans le fichier.cpp de la classe (ex: moteur.cpp). Limplémentation dune classe devrait TOUJOURS être dans un fichier.cpp (ex: cube.cpp) et avoir le même nom que la classe. La nomenclature à utiliser pour identifier une fonction La nomenclature à utiliser pour identifier une fonction membre dune classe dans le fichier.cpp est: membre dune classe dans le fichier.cpp est: [Type de retour de la fonction] [Nom de classe]::[Nom de la fonction] [Type de retour de la fonction] [Nom de classe]::[Nom de la fonction] (Paramètres de la fontion) { Implémentation de la fonction... } (Paramètres de la fontion) { Implémentation de la fonction... }

INF1101 Algorithmes et structures de données24 Exemple dimplémentation dune fonction membre Dans la classe Cube, on retrouverait dans le fichier Cube.cpp limplémentation de la fonction membre setTaille() : void Cube::setTaille(float uneLargeur, float uneLongueur, float uneHauteur) float uneHauteur){ maLargeur = uneLargeur; maLongueur = uneLongueur; maHauteur = uneHauteur; }

INF1101 Algorithmes et structures de données25 Double inclusion du fichier dentête : problématique Problématique: En compilant tout le programme, le compilateur passera à travers tous les fichiers séquentiellement. Cependant, si le compilateur passe deux fois à travers un fichier.h contenant la définition dune classe, ce dernier indiquera une erreur de redéfinition. Comment faire pour que le compilateur ne passe quune seule fois à travers la définition dune classe afin déviter la redéfinition?

INF1101 Algorithmes et structures de données26 Double inclusion du fichier dentête : solution Solution: #ifndef CUBE_H #define CUBE_H class Cube {... };#endif

INF1101 Algorithmes et structures de données27 Double inclusion du fichier dentête : explications La première fois que le compilateur passe à travers le fichier cube.h pour compiler la définition (ou linterface) de la classe Cube: 1) #ifndef CUBE_H : Est ce que le mot CUBE_H a été défini? Non. défini? Non. 2) Alors, #define CUBE_H : Définir le mot CUBE_H 3) #endif : Termine la définition La deuxième fois que le compilateur passe à travers le fichier cube.h pour compiler la définition (ou linterface) de la classe Cube: 1) #ifndef CUBE_H Est ce que le mot CUBE_H a été défini? Oui. défini? Oui. 2) Alors, sort du fichier.

INF1101 Algorithmes et structures de données28 Exemple double inclusion du fichier dentête Vérifiez le problème de la double inclusion en mettant en commentaire dans le fichier cube.h: #ifndef CUBE_H, #define CUBE_H et #endif Compilez tout le programme, et observez lerreur: error C2011: 'Cube' : 'class' type redefinition Cube.cpp Le compilateur indique cette erreur puisque le fichier Cube.h est inclus dans voiture.h et dans main.cpp. Ainsi, le compilateur passe deux fois dans le fichier Cube.h, et puisque que les entêtes de double inclusion ont été retirées, il y a redéfinition de la classe Cube.

INF1101 Algorithmes et structures de données29 Paramètres par défaut des fonctions Les signatures des fonctions recevant des paramètres peuvent posséder des valeurs de défaut si aucun paramètre nest envoyé lors de lappel de la fonction.Les signatures des fonctions recevant des paramètres peuvent posséder des valeurs de défaut si aucun paramètre nest envoyé lors de lappel de la fonction. Les valeurs par défaut des paramètres doivent se trouver seulement dans la déclaration des fonctions membres de linterface de la classe et non pas dans limplémentation de la fonction membre.Les valeurs par défaut des paramètres doivent se trouver seulement dans la déclaration des fonctions membres de linterface de la classe et non pas dans limplémentation de la fonction membre.

INF1101 Algorithmes et structures de données30 Paramètres par défaut des fonctions (suite) RÉFÉRENCE: Cube.h, Cube(…) void setTaille2(float uneLargeur=5, float uneLongueur=5, float uneHauteur=5); float uneLongueur=5, float uneHauteur=5); Exemple: Si setTaille2() est appelée sans paramètres, la fonction recevra des paramètres avec les valeurs de défaut.Si setTaille2() est appelée sans paramètres, la fonction recevra des paramètres avec les valeurs de défaut. Cube C2; C2.setTaille2(); C2.setTaille2(); C2.setTaille2(2,6); C2.setTaille2(2,6); C2.setTaille2(2); C2.setTaille2(2); // Impossible de faire M2.SetValvesCylindre(,6); // Impossible de faire M2.SetValvesCylindre(,6);

INF1101 Algorithmes et structures de données31 III - Constructeurs et destructeurs Constructeurs par défaut et par paramètres Constructeurs par défaut et par paramètres Constructeur de recopie Constructeur de recopie Destructeurs Destructeurs New dun objet (constructeur) New dun objet (constructeur)

INF1101 Algorithmes et structures de données32 Le constructeur Le constructeur est une fonction membre publique appelée implicitement lors de la création dun objet.Le constructeur est une fonction membre publique appelée implicitement lors de la création dun objet. Pour un tableau dobjet, le constructeur par défaut est appelé pour chaque élément du tableau.Pour un tableau dobjet, le constructeur par défaut est appelé pour chaque élément du tableau. Le constructeur sert à initialiser un objet lors de sa création.Le constructeur sert à initialiser un objet lors de sa création.

INF1101 Algorithmes et structures de données33 Constructeurs par défaut Un constructeur par défaut : Constructeur ne recevant aucun paramètre. Constructeur ne recevant aucun paramètre. RÉFÉRENCE: cube.cpp, Cube::Cube(){ maLargeur = 0; maLargeur = 0; maLongueur = 0; maLongueur = 0; maHauteur = 0; maHauteur = 0;}

INF1101 Algorithmes et structures de données34 Constructeurs par paramètres Un constructeur par paramètres est un constructeur recevant des paramètres afin dinitialiser les attributs de lobjet selon les valeurs des arguments reçus.Un constructeur par paramètres est un constructeur recevant des paramètres afin dinitialiser les attributs de lobjet selon les valeurs des arguments reçus. Contrairement au constructeur par défaut, une classe peut posséder plusieurs constructeurs par paramètres, ayant tous des signatures différentes.Contrairement au constructeur par défaut, une classe peut posséder plusieurs constructeurs par paramètres, ayant tous des signatures différentes.

INF1101 Algorithmes et structures de données35 Constructeurs par paramètres RÉFÉRENCE: cube.cpp Cube::Cube(float uneLargeur, float uneLongueur, float uneHauteur) float uneHauteur){ maLargeur = uneLargeur; maLargeur = uneLargeur; maLongueur = uneLongueur; maLongueur = uneLongueur; maHauteur = uneHauteur; maHauteur = uneHauteur;}

INF1101 Algorithmes et structures de données36 Constructeurs par défaut et paramètres Note: il ne peut jamais coexister dans une classe un constructeur par défaut sans paramètres et un constructeur par défaut avec des paramètres possédant des valeurs de défaut. Il ne peut y avoir quun seul constructeur par défaut.Note: il ne peut jamais coexister dans une classe un constructeur par défaut sans paramètres et un constructeur par défaut avec des paramètres possédant des valeurs de défaut. Il ne peut y avoir quun seul constructeur par défaut. Il y aurait une ambiguïté lors de lappel dun constructeur, le compilateur ne sachant pas quel constructeur appeler.Il y aurait une ambiguïté lors de lappel dun constructeur, le compilateur ne sachant pas quel constructeur appeler.

INF1101 Algorithmes et structures de données37 Constructeurs par défaut et par paramètres (suite) Un constructeur par défaut et par paramètres : Un constructeur par défaut et par paramètres : Constructeur possédant des paramètres avec des valeurs Constructeur possédant des paramètres avec des valeurs de défaut. de défaut. RÉFÉRENCE: couleur.h RÉFÉRENCE: couleur.h class Couleur {public: Couleur(float r=0, float g=0, float b=0); Couleur(float r=0, float g=0, float b=0);... private: float rouge; float rouge; float vert; float vert; float bleu; float bleu;}

INF1101 Algorithmes et structures de données38 Constructeurs par défaut et par paramètres (suite) Faire une démonstration de lambiguité. Faire une démonstration de lambiguité. Il ny aura pas dambiguité tant que lon ne déclare pas dobjets (seulement un warning). Il ny aura pas dambiguité tant que lon ne déclare pas dobjets (seulement un warning).

INF1101 Algorithmes et structures de données39 Passage par référence void agrandirX2(image & img) //img change de valeur { /*--- modification de l'image transmise /*--- modification de l'image transmise a la fonction ----*/ a la fonction ----*/ img.bitmap = imgX2.bitmap; img.bitmap = imgX2.bitmap; img.largeur = imgX2.largeur; img.largeur = imgX2.largeur; img.hauteur = imgX2.hauteur; img.hauteur = imgX2.hauteur; En ajoutant un & devant le paramètre reçu, ceci indique quune référence En ajoutant un & devant le paramètre reçu, ceci indique quune référence à ladresse est transmise, et donc en modifiant la valeur du paramètre à ladresse est transmise, et donc en modifiant la valeur du paramètre dans la fonction, la modification sera conservée à la sortie de la fonction. dans la fonction, la modification sera conservée à la sortie de la fonction.

INF1101 Algorithmes et structures de données40 Schématisation du passage par référence image void agrandirX2(image & img) {(..)} lImage lImage Lobjet reçoit temporairement un nouveau nom qui sera utilisé par la fonction img img

INF1101 Algorithmes et structures de données41 Passage par valeur void agrandirX3(image img) void agrandirX3(image img) { /*--- modification de l'image transmise a la fonction ----*/ img.bitmap = imgX2.bitmap; img.bitmap = imgX2.bitmap; img.largeur = imgX2.largeur; img.largeur = imgX2.largeur; img.hauteur = imgX2.hauteur; // <- img RECU EN VALEUR, img.hauteur = imgX2.hauteur; // <- img RECU EN VALEUR, NE CHANGERA PAS! NE CHANGERA PAS! } Contrairement à la transmission par référence, la transmission par Contrairement à la transmission par référence, la transmission par valeur fait une copie temporaire de la variable dans la fonction, et donc valeur fait une copie temporaire de la variable dans la fonction, et donc une modification de la variable ne sera pas conservée à la sortie de la une modification de la variable ne sera pas conservée à la sortie de la fonction, puisque la modification a été faite sur une variable temporaire. fonction, puisque la modification a été faite sur une variable temporaire.

INF1101 Algorithmes et structures de données42 void agrandirX3(image img) {(..)} Schématisation du passage par valeur image= lImage lImage image= Le contenu de lImage est copié dans le paramètre img img

INF1101 Algorithmes et structures de données43 Constructeur de recopie Un constructeur qui sert à créer un objet identique à lobjet reçu en paramètre.Un constructeur qui sert à créer un objet identique à lobjet reçu en paramètre. Chaque attribut de lobjet en construction est initialisé selon les valeurs des attributs de lobjet à copier.Chaque attribut de lobjet en construction est initialisé selon les valeurs des attributs de lobjet à copier.

INF1101 Algorithmes et structures de données44 Exemple dun constructeur de recopie RÉFÉRENCE: cube.cpp Cube::Cube(const Cube &copie) : maCouleur( copie.maCouleur ), maTransformation( copie.maTransformation) maTransformation( copie.maTransformation){ maLargeur = copie.maLargeur; maLargeur = copie.maLargeur; maLongueur = copie.maLongueur; maLongueur = copie.maLongueur; maHauteur = copie.maHauteur; maHauteur = copie.maHauteur;}

INF1101 Algorithmes et structures de données45 Appel du constructeur de recopie Le constructeur de recopie est appelé lorsquon doit créer une instance dun objet qui est la copie dun autre objet.Le constructeur de recopie est appelé lorsquon doit créer une instance dun objet qui est la copie dun autre objet. Le constructeur de recopie est toujours appelé lorsquun objet est envoyé par valeur à une autre fonction. La fonction créera une copie temporaire de lobjet pour les fins de la fonction.Le constructeur de recopie est toujours appelé lorsquun objet est envoyé par valeur à une autre fonction. La fonction créera une copie temporaire de lobjet pour les fins de la fonction. Il est aussi appelé lorsquune fonction retourne un objet (attention: le constructeur de recopie nest pas appelé lorsquune fonction retourne une référence à un objet).Il est aussi appelé lorsquune fonction retourne un objet (attention: le constructeur de recopie nest pas appelé lorsquune fonction retourne une référence à un objet).

INF1101 Algorithmes et structures de données46 Destructeurs Le destructeur est une fonction membre publique appelée implicitement lors de la destruction dun objet.Le destructeur est une fonction membre publique appelée implicitement lors de la destruction dun objet. Les destructeurs sont appelés dans lordre inverse des constructeurs.Les destructeurs sont appelés dans lordre inverse des constructeurs. La fonction principale dun destructeur réside dans la désallocation de mémoire dynamique qui a été allouée par le constructeur.La fonction principale dun destructeur réside dans la désallocation de mémoire dynamique qui a été allouée par le constructeur.

INF1101 Algorithmes et structures de données47 Destructeurs (suite) RÉFÉRENCE: sphere.h class Sphere { public: public: Sphere(); Sphere(); Sphere(float unRayon, char* unNom); Sphere(float unRayon, char* unNom); Sphere(const sphere &copie); Sphere(const sphere &copie); ~Sphere(); ~Sphere(); private: private: floatmonRayon; char* monNom; CouleurmaCouleur; TranslationmaPosition; Rotation monAngle; Rotation monAngle; static unsigned int nbSphere; }; Destructeur

INF1101 Algorithmes et structures de données48 Destructeurs (suite) Sphere::~Sphere(){ nbSphere--; nbSphere--; if(monNom) if(monNom) delete []monNom; } Sphere::Sphere() : monRayon( 0 ), monRayon( 0 ), maCouleur( ), maCouleur( ), maTransformation( ) maTransformation( ){ nbSphere++; nbSphere++; monNom = new char[30]; monNom = new char[30];} Constructeur de sphere : Destructeur de sphere :

INF1101 Algorithmes et structures de données49 Constructeur et destructeur Une classe a toujours automatiquement un constructeur par défaut, un constructeur de recopie et un destructeur sans quil soit nécessaire de les écrire.Une classe a toujours automatiquement un constructeur par défaut, un constructeur de recopie et un destructeur sans quil soit nécessaire de les écrire. Le constructeur de recopie implicite fait une copie attribut par attribut.Le constructeur de recopie implicite fait une copie attribut par attribut.

INF1101 Algorithmes et structures de données50 New dun objet (constructeur) Lallocation dynamique permet la création dun objet ou dun vecteur dobjets.Lallocation dynamique permet la création dun objet ou dun vecteur dobjets. Voir exemple sur les newVoir exemple sur les new

INF1101 Algorithmes et structures de données51 Vecteurs Utilisation de la classe vector de la librairie STL pour une gestion plus facile et efficace. La classe vector est une classe générique, cest-à-dire une classe qui permet de stocker nimporte quel type dobjet. Inclusion de la librairie: #include Déclaration en spécifiant le nom du vecteur et le type déléments à conserver: Ex: vector lesEntiers;

INF1101 Algorithmes et structures de données52 Manipulation dun vecteur Redimensionnement dun vecteur : vector Im; Im.resize(9); Accès à une position avec lopérateur [ ] : image UneIm=Im[4]; Im.clear();Il est aussi possible de retirer tout les élements dun vecteur : Im.clear(); Im.size();Récupérer le nombre déléments dun vecteur avec la fonction size() : Im.size();

INF1101 Algorithmes et structures de données53 Utilisation dun string Inclusion de la librairie: #include Déclaration en spécifiant le nom de la chaîne Ex: string c_chaine; La classe string gère toute manipulation dune chaîne de caractères, tel que la copie (=),la copie (=), La concaténation (+=),La concaténation (+=), Laccès à un caractère ([]) etLaccès à un caractère ([]) et La taille de la chaîne (.size() ).La taille de la chaîne (.size() ).

INF1101 Algorithmes et structures de données54 Utilisation dun string Exemple: c_chaine=Bonjour; c_chaine+= le monde; c_chaine[c_chaine.size()-1]=s;