Héritage multiple En langage C++, il est possible d’utiliser l’héritage multiple. Il permet de créer des classes dérivées à partir de plusieurs classes.

Slides:



Advertisements
Présentations similaires
Erratum C Surcharge For(int x=0; … 2.
Advertisements

Cours n° 7 Standard Template Library II.
Cours n° 6 Standard Template Library I.
Le langage C++ Les boucles.
Introduction au langage C++
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.
Responsables : Joël Falcou et Jean-Thierry Lapresté
Cours n° 8 Conception et Programmation à Objets
Langages objet Définitions Traduction des méthodes en C++
POO.
M. BENJELLOUN : Info II Mohammed BENJELLOUN Service dInformatique Faculté Polytechnique de Mons
Exercice 1 1 (père) et 1 (fils) 1 (père) et 0 (fils)
1 Une introduction à Java IFT 287 (Semaine 1). 2 Java - Historique Développé par Sun Microsystems en 1994 –Inventeur James Gosling (canadien!) Objectif.
2ième Classe (Mercredi, 13 Octobre) C++ Intro CSI2572.
Nous allons vous présenter: - Photoshop - Algorithme et programmation
Bibliothèque standard du C++
C++ : classes Introduction aux Langages Orientés Objets
Interfaces (fin) classes locales et internes, Object, clonage.
Structures de données IFT-2000
HistoriqueHistorique Langage C++, parution du livre Bjarne Stroustrup Normalisation ANSI.
Programmation Initiation Aux Langages C et C++ (3) Bruno Permanne 2006.
Structures de données IFT Abder Alikacem La classe string Département dinformatique et de génie logiciel Édition Septembre 2009 Département dinformatique.
Structures de données IFT Abder Alikacem Espace de nommage Département d’informatique et de génie logiciel Édition Septembre 2009.
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Espace de nommage Département dinformatique et de génie logiciel Édition Septembre 2009 Département dinformatique.
Conteneurs STL.
GPA789 Analyse et conception orientées objet 1 Professeur: Tony Wong, Ph.D., ing. Chapitre 6 Correspondance UML et C++
1 PROTOTYPE PGC++ Vecteur_3D DÉFINITION. 2 class Vecteur_3D { private : float vx, vy, vz, vw; // Représentation en coordonnées homogènes. public : Vecteur_3D();
Un langage de programmation hybride
8PRO107 Éléments de programmation
Introduction au C++ héritage / polymorphisme
Standard Template Library
Héritage Lhéritage permet de spécialiser une classe en définissant une relation de type « est une sorte de ». #include comptebancaire.h class CompteEpargne.
INF1101 Algorithmes et structures de données
Structures de données IFT-2000 Abder Alikacem L’héritage en C++ Département d’informatique et de génie logiciel Édition Septembre 2009.
Héritage ou dérivation d’une classe
Une introduction à Java
Structures de données IFT-2000
Formation C++. Hello World ! #include /* Commentaire sur plusieurs lignes */ int main() { //Affiche hello world std::cout
Structures de données IFT-2000
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Introduction Semaine 1 Département d’informatique et de génie logiciel Édition Septembre 2009.
Faculté Polytechnique de Mons
Chapitre X Modèles.
(Vient du grec et signifie « Peut prendre plusieurs formes »)
La notion de type revisitée en POO
GESTION ET TRAITEMENT DES ERREURS
11/04/ L'héritage Cours 7 Cours 7.
7ième Classe (Mardi, 24 novembre) CSI2572. Devoir 3 ?
Notions avancées du C++
Constructeurs H Batatia. Variable statique Une variable statique est partagée par tous les objets d’une classe.
HistoriqueHistorique Langage C++, parution du livre Bjarne Stroustrup Normalisation ANSI.
Un peu de Design Pattern Quelques modèles pour développer vite et bien.
Les opérateurs L’amitié Les opérateurs Introduction
Les surcharges d'opérateurs
Conception de Programmes - IUT de Paris - 1ère année – Cours 8 – Les entrées/sorties Comment fonctionnent les opérateurs > pour les types élémentaires.
Conception de Programmes - IUT de Paris - 1ère année – Cours 6 - Les opérateurs L’amitié Les opérateurs –Introduction –Surcharge par fonction.
Conception de Programmes - IUT de Paris - 1ère année Cours 2 – Références et passage de paramètres Les Références –Introduction aux références.
Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O. et au.
LIFI-Java 2004 Séance du Mercredi 29 sept. Cours 4.
Introduction à la programmation objet avec java
Ecrire 10 fois "Bonjour" sur 10 lignes différentes
Langage de programmation
1 Listes des méthodes de la classe string, et exemples.
C++ Les fonctions. Présentation Utilité : Dès qu'un programme dépasse la centaine de lignes de code, il est pratique de pouvoir le décomposer en plusieurs.
Les flux en C++ Les flux d’entrées sorties Les flux standards.
Coding party Écrire un programme qui élève un nombre au carré Écrire un programme qui teste si un nombre est pair Écrire un programme qui calcule la factorielle.
Int 10. Int 6.
Transcription de la présentation:

Héritage multiple En langage C++, il est possible d’utiliser l’héritage multiple. Il permet de créer des classes dérivées à partir de plusieurs classes de base. Bien entendu, pour chaque classe de base, comme lorsqu’on utilise l’héritage simple, on peut définir le mode d’héritage.

Héritage multiple Exemple // exemple héritage multiple #include using namespace std; class V { public: int i=55;/*... */ }; class A : public V { /*... */ }; class B : public V { /*... */ }; class C : public A, public B { public: void fonc(){ cout << &(A::i) << " / " << &(B::i) << endl; } }; void main() { C obj; obj.fonc(); system("pause"); }

// exemple héritage virtuel #include using namespace std; class V { public: int i=55;/*... */ }; class A : public V { /*... */ }; class B : public V { /*... */ }; class C : public A, public B { public: void fonc(){ cout << &(A::i) << " / " << &(B::i) << endl; } }; void main() { C obj; obj.fonc(); system("pause"); } La classe A contient une variable membre i. Il en va de même pour la classe B. En ce qui concerne la classe C, elle possède deux variables membres i, l'une par l'héritage par A, l'autre selon l'héritage de B, c'est ce qui provoque une erreur si on tente d'accéder à i dans C, le compilateur ne sait pas s'il doit regarder A::i ou B::i Observez ce qui se passe à l’exécution sur l’acétate suivante

La solution que propose le C++ est alors l'héritage virtuel. A hérite virtuellement de V et pour B il en va de même. Exemple // exemple héritage virtuel version 2 #include using namespace std; class V { public: int i = 55;/*... */ }; class A : virtual public V { /*... */ }; class B : virtual public V { /*... */ }; class C : public A, public B { public: void fonc(){ cout << &(A::i) << " / " << &(B::i) << endl; } }; void main() { /*... */ C obj; obj.fonc(); system("pause"); }

Vous constatez dans le code C++ ci-dessus que la ligne « cout » affiche deux fois la même chose et il n'y a plus d'ambiguïté sur i. On parle d' héritage en losange ou en diamant.

Classe abstraite En programmation orientée objet, une fonction virtuelle est une fonction définie dans une classe (méthode) qui est destinée à être redéfinie dans les classes qui en héritent. Exemple: // Classe Forme. // class Forme { public: // Méthode virtuelle pure. virtual void aire() = 0; }; // Classe Triangle dérivée de Forme. class Triangle : public Forme { public: virtual void aire(); }; // Classe Cercle dérivée de Forme. class Cercle : public Forme { public: virtual void aire(); };

// Classe Forme. // class Forme { public: // Méthode virtuelle pure. virtual void aire() = 0; }; // Classe Triangle dérivée de Forme. class Triangle : public Forme { public: virtual void aire(); }; // Classe Cercle dérivée de Forme. class Cercle : public Forme { public: virtual void aire(); }; La méthode aire() est redéfinie par chaque classe dérivée. En effet, la manière de calculer l'aire d'une forme dépend du type de celle-ci. Il suffit qu'une classe possède une méthode virtuelle pure pour qu'elle soit dite abstraite. On ne peut pas instancier une classe abstraite car cela n'aurait aucun sens. Par exemple : on peut instancier un objet « triangle » qui hérite de la classe de base abstraite « forme » mais on ne peut pas créer un objet « forme».

Par ailleurs, une tentative d’instanciation d’une classe abstraite affiche un message comme ci-dessous: