Composition de classes, classes et fonctions amies, et héritages

Documents pareils
Introduction à l héritage en C++

Introduction à C++ et à wxwidgets

Programmation par les Objets en Java

C++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy

Une introduction à Java

Cours 1: Java et les objets

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

C++ COURS N 2 : CLASSES, DONNÉES ET FONCTIONS MEMBRES Classes et objets en C++ Membres d'une classe Spécification d'une classe Codage du comportement

Objets et Programmation. origine des langages orientés-objet

et Programmation Objet

Package Java.util Classe générique

Programmation en Java IUT GEII (MC-II1) 1

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Plan Pédagogique du cours

INITIATION AU LANGAGE JAVA

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

ETUDE DE CAS en UML : GESTION DES COMMANDES DE PIECES FABRIQUEES PAR LA SOCIETE C

Héritage presque multiple en Java (1/2)

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

TP1 : Initiation à Java et Eclipse

Avertissement : Ce cours suppose la connaissance et la maîtrise du langage C CONTENU DU COURS BIBLIOGRAPHIE

Programmer en JAVA. par Tama

TD/TP PAC - Programmation n 3

Le langage C++ (partie I)

Programmation stochastique

GOL502 Industries de services

as Architecture des Systèmes d Information

Département Automatisation et Informatisation Année Programmation en C++ Institut des Sciences et Techniques de l Ingénieur d Angers

Introduction au pricing d option en finance

30.avr.10 Présentation miniprojet. 9.mars.10 Cours 3 4.mai.10 Cours C mars.10 Cours 4 11.mai.10 Cours C++ 2

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

Projet de programmation (IK3) : TP n 1 Correction

Java c est quoi? Java pourquoi?

IRL : Simulation distribuée pour les systèmes embarqués

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

C++ : PROGRAMMATION-OBJET

TD/TP PAC - Programmation n 3

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

Programmation en C/C++

Projet L1, S2, 2015: Simulation de fourmis, Soutenance la semaine du 4 mai.

Polycopié Cours Programmation Orientée Objet sous Java Programme : Filière SMI S5

Premiers Pas en Programmation Objet : les Classes et les Objets

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Introduction à la programmation Travaux pratiques: séance d introduction INFO0201-1

COMPARAISONDESLANGAGESC, C++, JAVA ET

P r ob lé m a t iq u e d e la g é n é r icit é. Pr in cip e d e la g é n é r icit é e n Ja v a ( 1 /3 )

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Généralités sur le Langage Java et éléments syntaxiques.

Claude Delannoy. 3 e édition C++

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Cours d initiation à la programmation en C++ Johann Cuenin

Tp 1 correction. Structures de données (IF2)

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Programmation par composants (1/3) Programmation par composants (2/3)

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Introduction au langage C

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

Cours d Algorithmique et de Langage C v 3.0

Support de cours et TD Programmation Orientée Objet


Introduction à l algorithmique et à la programmation M1102 CM n 3

INFO-F-105 Language de programmation I Séance VI

Programmation MacOSX / ios

Programmation Orientée Objet

Certificat Big Data - Master MAthématiques

Bases Java - Eclipse / Netbeans

Chapitre 2. Classes et objets

Chapitre VI- La validation de la composition.

Génie Logiciel I. Cours VI - Typage statique / dynamique, fonctions virtuelles et classes abstraites, flots d entrées / sorties, et string

1.6- Génération de nombres aléatoires

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Cours Langage C/C++ Programmation modulaire

Initiation à JAVA et à la programmation objet.

Classes et Objets en Ocaml.

Facultés Universitaires Notre-Dame de la Paix. Conception et Programmation Orientées- Object

Cours de Programmation Impérative: Zones de mémoires et pointeurs

Programmation Orientée Objet

Programmation Orientée Objet application au langage Java Version Novembre 2007

Programmation C++ (débutant)/instructions for, while et do...while

OCL - Object Constraint Language

Chapitre 10. Les interfaces Comparable et Comparator 1

Java 1.5 : principales nouveautés

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

PROJET ALGORITHMIQUE ET PROGRAMMATION II

Programmation Orientée Objet en C#

Anne Tasso. Java. Le livre de. premier langage. 6 e édition. Groupe Eyrolles, 2000, 2002, 2005, 2006, 2008, 2010, ISBN :

CPR Informatique. (poste 3159 ou 3164) Septembre 2002

Cours de C/C++ par la pratique. Hugues Talbot

Apprendre la Programmation Orientée Objet avec le langage Java (avec exercices pratiques et corrigés)

JAVA TD0. Prise en main du langage Environnement de base JAVA 1

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

Diagramme de classes

Transcription:

Licence Sciences, Technologies, Santé Université de Perpignan Via Domitia Semestre 4 (L2) - Mention Mathématiques, Informatique Année universitaire 2016/2017 Programmation Orientée Objet Composition de classes, classes et fonctions amies, et héritages Guillaume Revy guillaume.revy@univ-perp.fr Université de Perpignan Via Domitia Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 1/32

Plan du cours 1. Rappels sur le cours précédent 2. Implantation des relations de composition 3. Classes et fonctions amies 4. Implantation de l héritage en C++ Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 2/32

Rappels sur le cours précédent Plan du cours 1. Rappels sur le cours précédent 2. Implantation des relations de composition 3. Classes et fonctions amies 4. Implantation de l héritage en C++ Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 3/32

Rappels sur le cours précédent Les constructeurs et destructeurs Un constructeur méthode spéciale utilisée pour initialiser les instances d une classe, affecter une valeur à chacun de leurs attributs appelé immédiatement à chaque fois qu un espace est alloué pour un objet constructeur par défaut, par copie, ou spécialisé (défini par l utilisateur) Un destructeur méthode spéciale automatiquement appelée lors de la destruction d une instance de classe juste avant que la mémoire utilisée par l objet ne soit récupérée par le système il y a au plus un destructeur par classe Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 4/32

Rappels sur le cours précédent Les constructeurs et destructeurs Un constructeur méthode spéciale utilisée pour initialiser les instances d une classe, affecter une valeur à chacun de leurs attributs appelé immédiatement à chaque fois qu un espace est alloué pour un objet constructeur par défaut, par copie, ou spécialisé (défini par l utilisateur) Un destructeur méthode spéciale automatiquement appelée lors de la destruction d une instance de classe juste avant que la mémoire utilisée par l objet ne soit récupérée par le système il y a au plus un destructeur par classe // ClasseA.cpp class ClasseA ClasseA (); // constructeur par defaut ClasseA( ClasseA const &); // constructeur par copie ClasseA (...); // constructeur specialise ~ClasseA (); // destructeur Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 4/32

Implantation des relations de composition Plan du cours 1. Rappels sur le cours précédent 2. Implantation des relations de composition 3. Classes et fonctions amies 4. Implantation de l héritage en C++ Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 5/32

Implantation des relations de composition Rappel sur les relations de composition et d agrégation Agrégation/Composition : relation entre classes, indiquant que les instances d une classe sont les composants d une autre Agrégation exprime une relation de composition faible les objets agrégés ont une durée de vie indépendante de celle de l agrégat Composition exprime une relation de composition forte les objets agrégés ont une durée de vie dépendante de celle de l agrégat Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 6/32

Implantation des relations de composition Agrégation : exemple d une classe Email On souhaite modéliser un email, à travers la classe Email, pouvant être composé d un fichier joint (classe Fichier) #ifndef EMAIL_HPP #define EMAIL_HPP # include " Fichier.hpp" class Email private: Fichier * f; Email (); Email( Fichier *); ~Email (); #endif # include <iostream > # include " Email.hpp" Email :: Email () std :: cout << " Creation d un email sans piece jointe" << std :: endl; } Email :: Email( Fichier * f) this ->f = f; std :: cout << " Creation d un email avec piece jointe" << std :: endl; } Email ::~ Email () std :: cout << " Suppression d un email... mais pas de la piece jointe" << std :: endl; } Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 7/32

Implantation des relations de composition Agrégation : exemple d une classe Email // c3 - expl0.cpp # include <iostream > # include " Email.hpp" # include " Fichier.hpp" int main( void ) Fichier * f = new Fichier (); // Appel du constructeur de la classe Fichier Email e(f); // Appel du constructeur de la classe Email std :: cout << "J envoie mon email..." << std :: endl; delete f; // Appel du destructeur de la classe Fichier return 0; // Appel du destructeur de la classe Email } Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 8/32

Implantation des relations de composition Agrégation : exemple d une classe Email // c3 - expl0.cpp # include <iostream > # include " Email.hpp" # include " Fichier.hpp" int main( void ) Fichier * f = new Fichier (); // Appel du constructeur de la classe Fichier Email e(f); // Appel du constructeur de la classe Email std :: cout << "J envoie mon email..." << std :: endl; delete f; // Appel du destructeur de la classe Fichier return 0; // Appel du destructeur de la classe Email } $>./c3 - expl1 Creation d un fichier a joindre a un mail Creation d un email avec piece J envoie mon email... Suppression d un fichier jointe Suppression d un email... mais pas de la piece jointe Construction et destruction des composants effectués par l utilisateur Respect de la spécification de l agrégation Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 8/32

Implantation des relations de composition Composition : exemple d une classe Vélo On souhaite modéliser un vélo, à travers la classe Vélo composé de deux roues, d un guidon, d une selle, et d un cadre On définit une classe Velo, avec 5 attributs privés 2 objets de type Roue 1 objet de type Guidon 1 objet de type Selle 1 objet de type Cadre Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 9/32

Implantation des relations de composition Composition : exemple d une classe Vélo #ifndef VELO_HPP #define VELO_HPP # include "Roue.hpp" # include " Guidon.hpp" # include " Selle.hpp" # include " Cadre.hpp" // Declaration de la classe Velo class Velo private: Roue ravant, rarriere; Guidon g; Selle s; Cadre c; Velo (); ~Velo (); #endif # include <iostream > # include "Velo.hpp" // Constructeur de la classe Velo Velo :: Velo () std :: cout << " Construction d un velo" << std :: endl; } // Destructeur de la classe Velo Velo ::~ Velo () std :: cout << " Destruction d un velo" << std :: endl; } Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 10/32

Implantation des relations de composition Composition : exemple d une classe Vélo // c3 - expl1.cpp # include <iostream > # include "Velo.hpp" int main( void ) Velo v; std :: cout << "J utilise return 0; } maintenant mon velo..." << std :: endl; Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 11/32

Implantation des relations de composition Composition : exemple d une classe Vélo // c3 - expl1.cpp # include <iostream > # include "Velo.hpp" int main( void ) Velo v; std :: cout << "J utilise return 0; } maintenant mon velo..." << std :: endl; $>./c3 - expl1 Construction d une roue Construction d une roue Construction d un guidon Construction d une selle Construction d un cadre Construction d un velo J utilise maintenant mon velo... Destruction d un velo Destruction d un cadre Destruction d une selle Destruction d un guidon Destruction d une roue Destruction d une roue Construction des composants puis de l objet composé, et destruction dans le sens inverse appels automatiques par le constructeur/destructeur du composé Respect de la spécification de la composition Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 11/32

Classes et fonctions amies Plan du cours 1. Rappels sur le cours précédent 2. Implantation des relations de composition 3. Classes et fonctions amies 4. Implantation de l héritage en C++ Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 12/32

Classes et fonctions amies Qu est ce qu une fonction amie? Une fonction amie d une classe A est une fonction qui, sans être membre de la classe A, a le droit d accès à tous les membres de la classe, c est-à-dire, les membres publics, protégés et privés. doit être déclarée dans la classe qui accorde les droits ici, la classe A indifféremment dans la partie publique, protégée ou privée sa déclaration doit être précédée du mot clé friend // A.hpp class A private: int a; A(); friend void print(a&); // A.cpp A::A() a = 0; } void print(a const & obj_a) std :: cout << obj_a.a << std :: endl; } Remarque : bien que définie à l extérieure de la classe A, la méthode print a accès aux attributs (notamment, aux attributs privés) de la classe A Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 13/32

Classes et fonctions amies Remarques sur les fonctions amies Remarques : elle n est attachée à aucun objet particulier le pointeur this n y est donc pas défini Exemple : opération arithmétique entre deux matrices // Matrix.hpp class Matrix private: //... Matrix (); friend Matrix& multiplication ( Matrix&, Matrix &); // Matrix.cpp void multiplication (Matrix& a, Matrix& b) /*... */ } Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 14/32

Classes et fonctions amies Qu est ce qu une classe amie? Une classe amie d une classe A est une classe qui a le droit d accès à tous les membres de la classe A, c est-à-dire, les membres publics, protégés et privés. doit être déclarée dans la classe qui accorde les droits ici, la classe A indifféremment dans la partie publique, protégée ou privée sa déclaration doit être précédée du mot clé friend // A.hpp class A private: int a; A(); friend class B; // B.hpp class B private: A * obj; B() obj = new A(); } void acces_to_a () std :: cout << obj ->a << std :: endl; } Remarque : la classe B a accès aux attributs privés de la classe A seuls les objets B ont le droit d accéder aux attributs de A, le reste du système manipule des objets B. Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 15/32

Classes et fonctions amies Remarques générales sur la relation d amitié La relation d amitié doit être utilisée avec précaution c est une entorse à l ensemble des règles qui régissent les droits d accès. La relation d amitié n est pas transitive les amis des amis de la classe A ne sont pas forcément les amis de la classe A. Le caractère ami n est pas hérité. Les amis de classes imbriquées n ont pas de droit particulier sur les membres de la classe de niveau supérieur. Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 16/32

Plan du cours 1. Rappels sur le cours précédent 2. Implantation des relations de composition 3. Classes et fonctions amies 4. Implantation de l héritage en C++ Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 17/32

Principe de l héritage Mécanisme d héritage définition d une classe (appelée classe dérivée / fille) par assemblage des membres (attributs et méthodes) d une ou plusieurs classes (classes de bases directes), et des membres (attributs et méthodes) spécifiques de la nouvelle classe dérivée. 1 des 3 grands principes de la POO // Classe.hpp # ifndef CLASSE_HPP // <-- directives de precompilation #define CLASSE_HPP // class Classe : <private protected public > ClasseMere1, <private protected public > ClasseMere2,... private: //... protected : //... //... #endif // CLASSE_HPP Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 18/32

Principe de l héritage Mécanisme d héritage définition d une classe (appelée classe dérivée / fille) par assemblage des membres (attributs et méthodes) d une ou plusieurs classes (classes de bases directes), et des membres (attributs et méthodes) spécifiques de la nouvelle classe dérivée. 1 des 3 grands principes de la POO Intérêt de l héritage : réutilisation d une classe telle quelle dans une autre, par composition extension ou adaptation d une classe à partir d une autre L héritage peut être simple une seule classe de base directe multiple plusieurs classes de base directes Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 18/32

Retour, encore une fois, à la déclaration de la classe Point2D // Point2D.hpp # ifndef POINT2D_HPP # define POINT2D_HPP Pour respecter le principe d encapsulation attributs privés, voire protégés prévoir des méthodes get et set class Point2D private: float x, y; void init2d(float, float); void translate2d (float, float); void print(void); float getx(void) const; float gety(void) const; void setx( float); void sety( float); // <---- A NE PAS OUBLIER!! #endif // POINT2D_HPP Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 19/32

Comment étendre à un point de l espace 3D? Un point de l espace 3D est caractérisé par ses coordonnées (x,y,z) dans l espace et peut être affiché (au moins ses coordonnées, dans un premier temps) et translaté. Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 20/32

Comment étendre à un point de l espace 3D? Un point de l espace 3D est caractérisé par ses coordonnées (x,y,z) dans l espace et peut être affiché (au moins ses coordonnées, dans un premier temps) et translaté. On peut voir un point 3D comme une extension d un point 2D ajout d une coordonnée en z, et de ses méthodes d accès/modification redéfinition des méthodes d initialisation et de translation et spécialisation de la méthode d affichage Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 20/32

Comment étendre à un point de l espace 3D? Un point de l espace 3D est caractérisé par ses coordonnées (x,y,z) dans l espace et peut être affiché (au moins ses coordonnées, dans un premier temps) et translaté. On peut voir un point 3D comme une extension d un point 2D ajout d une coordonnée en z, et de ses méthodes d accès/modification redéfinition des méthodes d initialisation et de translation et spécialisation de la méthode d affichage Finalement, on peut utiliser l héritage public extension de la classe Point2D définition d une classe Point3D, qui hérite de Point2D Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 20/32

Comment étendre à un point de l espace 3D? Dans la classe Point3D ajout d une coordonnée en z et des méthodes associées définition des méthodes init3d et translate3d et spécialisation de la méthode d affichage print Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 21/32

Comment étendre à un point de l espace 3D? Dans la classe Point3D ajout d une coordonnée en z et des méthodes associées définition des méthodes init3d et translate3d et spécialisation de la méthode d affichage print Les attributs et les méthodes sont hérités de la classe Point2D Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 21/32

Comment étendre à un point de l espace 3D? Dans la classe Point3D ajout d une coordonnée en z et des méthodes associées définition des méthodes init3d et translate3d et spécialisation de la méthode d affichage print Les attributs et les méthodes sont hérités de la classe Point2D Mais les attributs x et y ne sont pas accessibles depuis Point3D car déclarés en zone privée Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 21/32

Extension à la classe Point3D // Point3D.hpp # ifndef POINT3D_HPP # define POINT3D_HPP # include " Point2D.hpp" class Point3D : public Point2D private : float z; void init3d(float, float, float); void translate3d (float, float, float); void print(void); float getz(void) const; void setz( float); #endif // POINT3D_HPP Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 22/32

Définition de la classe Point3D // Point3D.cpp # include <iostream > // iostream -> gestion des entrees - sorties # include " Point3D.hpp" void Point3D :: init3d( float _x, float _y, float _z) setx(_x); // on ne peut pas modifier x et y directement, sety(_y); // car on n y a pas acces z = _z; } void Point3D :: print(void) std :: cout << " --> Point3D (" << getx () << "," << gety () << "," << z << ")"; std :: cout << std :: endl; // on n a pas acces directement a x et y } void Point3D :: translate3d ( float _x, float _y, float _z) translate2d (_x,_y); // on appelle la methode de la classe mere z += _z; } float Point3D :: getz(void) const return z; } void Point3D :: setz( float _z) z = _z; } Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 23/32

Finalement, utilisation de la classe Point3D // c1 - expl2.cpp # include <iostream > # include " Point2D.hpp" # include " Point3D.hpp" int main( void ) Point3D a; a. init3d (1,1,1); // a = (1,1,1) std :: cout << " Avant translate (0.17,0.34,0.51)" << std :: endl; a. print (); a. translate3d (0.17,0.34,0.51); std :: cout << " Apres translate (0.17,0.34,0.51)" << std :: endl; a. print (); std :: cout << "X : " << a.getx () << std :: endl; // <-- acces aux methodes std :: cout << "Y : " << a.gety () << std :: endl; // <-- de Point2D std :: cout << "Z : " << a.getz () << std :: endl; } return 0; Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 24/32

Héritage et accessibilité des membres Suivant le mode d héritage (privé, protégé ou public), les membres d une classe mère sont accessibles sous certaines conditions dans les classes dérivées. Accessibilité des zones de la classe mère dans la classe fille : Héritage Zone... de la classe de base privée protégée publique public inaccessible protégé public protégé inaccessible protégé protégé privé inaccessible privé privé Remarques héritage le plus utilisé public héritage par défaut privé Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 25/32

Exemple (1) d accessibilités //... class A int x; int getx () return x; } class PublicA: public A int printx () std :: cout << x << std :: endl; } int main( void ) A obja; PublicA objpa; } objpa. printx (); // printx () a acces a l attribut x de A std :: cout << obja.x << std :: endl; // l attribut x est public dans A // -> la fonction main () y a acces std :: cout << objpa.x << std :: endl; // l attribut x est public dans PublicA // -> la fonction main () y a acces Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 26/32

Exemple (2) d accessibilités //... class A protected : int x; int getx () return x; } class PublicA: public A int printx () std :: cout << x << std :: endl; } int main( void ) A obja; PublicA objpa; } objpa. printx (); // printx () a acces a l attribut x de A std :: cout << obja.x << std :: endl; // ERREUR : l attribut x est protege dans A // -> la fonction main () n y a pas acces std :: cout << objpa.x << std :: endl; // ERREUR : l attribut x est protege dans // PublicA // -> la fonction main () n y a pas acces Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 27/32

Redéfinition des fonctions membres Lorsqu un membre de la classe dérivée a le même nom qu un membre de la classe de base, le premier masque le second, quelque soit le mode d héritage exemple : méthode avec la même signature,... //... class A void printx () std :: cout << "A" << std :: endl; } class PublicA: public A int printx () std :: cout << " PublicA" << std :: endl; } int main( void ) A obja; PublicA objpa; } obja. printx (); // printx () de la classe A -> "A" objpa. printx (); // printx () de la classe PublicA -> " PublicA" Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 28/32

Constructeur et héritage Lors de la création d un objet, une série de constructeurs est appelée initialisation de chaque classe de la chaîne d héritage Ordre des appels : classe mère (super-classe) classe dérivées #ifndef A_HPP #define A_HPP class A A(); class B: public A B(); class C: public B C(); #endif // A_HPP # include "A.hpp" A::A() std :: cout << " Constructeur de A" << std :: endl; } B::B() std :: cout << " Constructeur de B" << std :: endl; } C::C() std :: cout << " Constructeur de C" << std :: endl; } # include <iostream > # include "A.hpp" int main( void ) C objc; //... return 0; } Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 29/32

Constructeur et héritage Lors de la création d un objet, une série de constructeurs est appelée initialisation de chaque classe de la chaîne d héritage Ordre des appels : classe mère (super-classe) classe dérivées #ifndef A_HPP #define A_HPP class A A(); class B: public A B(); class C: public B C(); #endif // A_HPP # include "A.hpp" A::A() std :: cout << " Constructeur de A" << std :: endl; } B::B() std :: cout << " Constructeur de B" << std :: endl; } C::C() std :: cout << " Constructeur de C" << std :: endl; } $>./c3 - expl2 Constructeur de A Constructeur de B Constructeur de C Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 29/32

Initialisation des classes de base L initialistion des instances des classes de bases se fait sur le même modèle que l initialisation des membres constants avant l appel du constructeur // Point3D.hpp certains attributs peuvent être privés # ifndef POINT3D_HPP # define POINT3D_HPP # include " Point2D.hpp" class Point3D : public Point2D private : float z; // Constructeurs Point3D (); Point3D(float, float, float); Point3D(Point3D const &); //... #endif // POINT3D_HPP // Point3D.cpp # include <iostream > # include " Point3D.hpp" Point3D :: Point3D (): Point2D (0,0) z = 0; } Point3D :: Point3D( float _x, float _y, float _z): Point2D(_x,_y) z = _z; } Point3D :: Point3D( Point3D const& pt): Point2D(pt.getX (),pt.gety ()) // >> il faut declarer Point2D :: getx () // et Point2D :: gety () en const z = pt.z; } Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 30/32

Destructeur et héritage Lors de la destruction d un objet, une série de destructeurs est appelée nettoyage de chaque classe de la chaîne d héritage Ordre des appels : classe dérivées classe mère (super-classe) #ifndef A_HPP #define A_HPP class A ~A(); class B: public A ~B(); class C: public B ~C(); #endif // A_HPP # include "A.hpp" A::~A() std :: cout << " Destructeur de A" << std :: endl; } B::~B() std :: cout << " Destructeur de B" << std :: endl; } C::~C() std :: cout << " Destructeur de C" << std :: endl; } # include <iostream > # include "A.hpp" int main( void ) C objc; //... return 0; } Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 31/32

Destructeur et héritage Lors de la destruction d un objet, une série de destructeurs est appelée nettoyage de chaque classe de la chaîne d héritage Ordre des appels : classe dérivées classe mère (super-classe) #ifndef A_HPP #define A_HPP class A ~A(); class B: public A ~B(); class C: public B ~C(); #endif // A_HPP # include "A.hpp" A::~A() std :: cout << " Destructeur de A" << std :: endl; } B::~B() std :: cout << " Destructeur de B" << std :: endl; } C::~C() std :: cout << " Destructeur de C" << std :: endl; } $>./c3 - expl2 Destructeur de C Destructeur de B Destructeur de A Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 31/32

Questions? Guillaume Revy (Univ. de Perpignan Via Domitia) Composition de classes, classes et fonctions amies, et héritages 32/32