Les constructeurs ne peuvent jamais être déclarés virtuels, pour des raisons évidentes : ils sont spécifiques à une classe et doivent être redéfinis dans les classes descendantes pour une initialisation correcte. De la même façon, les opérateurs new
et delete
, lorsquils sont redéfinis pour une classe, ne sont pas virtuels.
Les fonctions membres statiques ne peuvent pas être virtuelles non plus, puisquelles peuvent être appelées « hors contexte ». Cest là une différence importante avec les fonctions membres normales.
Les méthodes en ligne peuvent être virtuelles, mais le compilateur ne les placera pas en ligne dans ce cas.
Les destructeurs cependant peuvent être déclarés virtuels, et cest même préférable en général. En effet, nous verrons plus loin quun pointeur pr
sur une classe de base (rectangle*
) peut en fait pointer sur un objet dune classe dérivée (rectplein*
) ; dès lors, si lon écrit delete pr
, le mauvais destructeur sera appelé, à moins que lon ait pris la précaution de le déclarer virtuel. Nous recommandons de toujours le faire si lon compte dériver des classes à partir de la classe courante, même si le destructeur ne fait rien.
Précédent | Sommaire | Suivant |