[[cpp:syntax:deriving]] ===== Définition d'une classe dérivée ==== La classe dérivée est une **extension** d'une classe de base. C'est une classe à laquelle on a ajouté des __champs__ et des __fonctions membres__ supplémentaires. La classe dérivée **hérite** de l'ensemble des __fonctions membres__ et des __champs__ définis par la ou les classes de bases. C'est pour cela que l'on parle d'héritage quand on parle de classes dérivées d'une autre classe. ===== Déclaration d'une classe dérivée ==== La syntaxe pour déclarer une classe comme héritant d'une classe de base est la suivante : class DerivingClass: public BaseClass { }; ==== Accessibilité des méthodes et des champs d'une classe de base ==== Cette définition indique que la classe ''DerivingClass'' hérite de la classe ''BaseClass'' et donc que l'ensemble des méthodes et des champs définis par la classe ''BaseClass'' sont présents dans la classe ''DerivingClass''. Cependant, il faut faire attention, présent ne veut pas dire qu'ils sont accessibles dans la classe de base. Ainsi, nous avons les règles d'accessibilité suivantes pour les méthodes et les champs définis dans la classe de base. ^ Déclaration dans la classe de base ^ Accesibilité dans la classe dérivée ^ |les champs ou méthodes déclarés ''public'' dans la classe de base | les champs et méthodes sont accessibles dans la classe dérivée | |les champs ou méthodes déclarés ''protected'' dans la classe de base | les champs et méthodes sont accessibles dans la classe dérivée | |les champs ou méthodes déclarés ''private'' dans la classe de base | les champs et méthodes ne sont pas accessibles dans la classe dérivée | Cependant, il faut aussi s'intéresser à l'accesibilité des méthodes en dehors de la classe dérivée. C'est ici qu'intervient les attributs d'accessibilité que l'on place devant le type de la classe dont hérite qui peuvent être ''public'', ''protected'' ou ''private''. ^ Attribut d'héritage ^ Accessibilité en dehors de la classe ^ Accessibilité dans une classe dérivant de ''DerivingClass'' ^ |''DerivingClass: public BaseClass''| Les méthodes et champs ''public'' de ''BaseClass'' sont accessibles. | Les méthodes et champs ''public'' ou ''protected'' de ''BaseClass'' sont accessibles à la classe dérivée. | |''DerivingClass: private BaseClass''| Aucune méthode ou champs de ''BaseClass'' ne sont accessibles. | Aucune méthode ou champs de ''BaseClass'' ne sont accessibles à la classe dérivée. | |''DerivingClass: protected BaseClass''| Aucune méthode ou champs de ''BaseClass'' sont accessibles. | Les méthodes et champs ''public'' ou ''protected'' de ''BaseClass'' sont accessibles à la classe dérivée. |