Méthodes héritées

Tous les membres d’une classe, et notamment les méthodes, sont hérités par la classe dérivée. Cependant, il y a quelques exceptions. D’abord les constructeurs et destructeurs ne sont pas hérités, ils ont leur propres règles (voir ci-après).

Les opérateurs sont hérités normalement, comme d’autres fonctions. Cependant, aucune opération n’est réalisée sur les nouveaux membres, c’est pourquoi il est généralement préférable de redéfinir ces opérateurs.

Enfin l’opérateur d’affectation est un cas particulier, car il n’est pas à proprement parler hérité non plus. Lorsqu’il n’est pas redéfini explicitement dans une classe dérivée, il recopie membre à membre les nouveaux membres de cette classe dérivée, et appelle l’opérateur d’affectation de la classe de base pour la copie de la partie héritée. Lorsqu’on le redéfinit pour la classe dérivée, l’opérateur pour la classe de base n’est pas appelé, il faut donc le faire explicitement, comme ceci :

rectplein& rectplein::operator=(rectplein  rp){     *(rectangle*)this = rp;     coul = rp.coul;}

Le changement de type sur this permet la recopie sous la forme d’une instance rectangle, soit par l’opérateur d’affectation de celle-ci, s’il existe, soit par la copie membre à membre par défaut (voir le paragraphe sur le polymorphisme). On aurait pu aussi écrire un appel explicite à rectangle::operator=, si l’on savait que celui-ci était défini (le compilateur refuse en effet cet appel lorsque seule l’affectation par défaut est définie).

Notons que notre exemple est assez inutile, puisqu’il fait exactement ce que ferait l’opérateur d’affectation par défaut (il n’y a aucune opération particulière de réalisée).

Précédent Précédent Sommaire Sommaire Suivant Suivant