Tous les membres dune classe, et notamment les méthodes, sont hérités par la classe dérivée. Cependant, il y a quelques exceptions. Dabord 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 dautres fonctions. Cependant, aucune opération nest réalisée sur les nouveaux membres, cest pourquoi il est généralement préférable de redéfinir ces opérateurs.
Enfin lopérateur daffectation est un cas particulier, car il nest pas à proprement parler hérité non plus. Lorsquil nest 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 lopérateur daffectation de la classe de base pour la copie de la partie héritée. Lorsquon le redéfinit pour la classe dérivée, lopérateur pour la classe de base nest 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 dune instance rectangle
, soit par lopérateur daffectation de celle-ci, sil 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 lon savait que celui-ci était défini (le compilateur refuse en effet cet appel lorsque seule laffectation par défaut est définie).
Notons que notre exemple est assez inutile, puisquil fait exactement ce que ferait lopérateur daffectation par défaut (il ny a aucune opération particulière de réalisée).
Précédent | Sommaire | Suivant |