[19] Héritage — Les bases
(Une partie de C++ FAQ Lite fr, Copyright © 1991-2002, Marshall Cline cline@parashift.com )

Traduit de l'anglais par Stéphane Bailliez

Les FAQs de la section [19]


[19.1] L'héritage est il important en C++?

Oui.

L'héritage est la différence fondamentale entre la programmation avec des types de données abstraits (abstract data type - ADT) et la programmation OO.

[ Haut | Bas | Section précédente | Section suivante ]


[19.2] Quand dois-je utiliser l'héritage?

Pour exprimer la spécificité.

L'être humain effectue une abstraction de deux manières: l'association (part-of) et la généralisation (kind-of). Une Renault Espace est une sorte de (is-a-kind-of) Voiture et une Renault Espace a (has-a) un Moteur, des Pneus, etc... La notion d'association/appartenance fait partie du monde du développement depuis que la programmation ADT a été reconnue, l'héritage ajoute "l'autre" majeure dimension de la décomposition.

[ Haut | Bas | Section précédente | Section suivante ]


[19.3] Comment exprime t-on l'héritage en C++?

A l'aide de la syntaxe : public

    class Car : public Vehicle {
    public:
       // ...
    };

On mentionne cette relation de pluseiurs manières:

(Note: cette FAQ est relative à l'héritage public; l'héritage private et l'héritage protectedsont différents.)

[ Haut | Bas | Section précédente | Section suivante ]


[19.4] Est ce légal de convertir un pointeur sur une classe dérivée en sa classe de base ?

Oui.

Un objet d'une classe dérivée est une sorte de (is a kind of) la classe de base. La conversion d'un pointeur sur une classe dérivée en un pointeur sur sa classe de base est donc parfaitement légal est arrive constamment. Par example si je pointe sur une  voiture, je pointe en fait sur un véhicule, donc convertir de Car* vers un Vehicle* est tout a fait légal et normal.

    void f(Vehicle* v);
    void g(Car* c) { f(c); }  // autorisé, pas de cast nécessaire

(Note: this FAQ has to do with public inheritance; private and protected inheritance are different.)

[ Haut | Bas | Section précédente | Section suivante ]


[19.5] Quelle est la différence entre public:, private:, et protected:?

[Haut

[ Haut | Bas | Section précédente | Section suivante ]


[19.6] Pourquoi mes classes dérivées ne peuvent elles accéder aux élements en private: de ma classe de base?

Pour vous protéger de changements pouvent subvenir ultèrieurement dans la classe de base.

Les classes dérivées ne peuvent accéder aux membres privées de la classe de base. Cela permet d'éviter les classes dérivées de subir un changement réalisé dans la classe de base. Si vous avez 15 classes dérivées utilisant des membres de la classe de base. Un changement de la classe de base vous forcera à modifier vos 15 classes dérivées !

[ Haut | Bas | Section précédente | Section suivante ]


[19.7] Comment puis je protéger mes classes dérivées de l'impact concernant les changements des attributs de la classe de base?

Une classe a deux interfaces distinctes avec deux types de clients distincts: Il est donc préférable de garder les attributs de la classe de base en private:, et d'utiliser des accesseurs en protected:inline, de cette manière les classes dérivées accéderont aux attributs privatede la classe de base et cela minimisera voire supprimera l'impact d'un changement des données en private sur les classes dérivées.

[ Haut | Bas | Section précédente | Section suivante ]


E-mail Marshall Cline Ecrire à l'auteur, au traducteur, ou en savoir plus sur la traduction.
[ C++ FAQ Lite fr | Table des matières | Index | A propos de l'auteur | © | Téléchargez votre propre copie ]
Dernière révision le 12 Nov 2002