Destructeurs virtuels

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, lorsqu’ils sont redéfinis pour une classe, ne sont pas virtuels.

Les fonctions membres statiques ne peuvent pas être virtuelles non plus, puisqu’elles peuvent être appelées « hors contexte ». C’est 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 c’est même préférable en général. En effet, nous verrons plus loin qu’un pointeur pr sur une classe de base (rectangle*) peut en fait pointer sur un objet d’une classe dérivée (rectplein*) ; dès lors, si l’on écrit delete pr, le mauvais destructeur sera appelé, à moins que l’on ait pris la précaution de le déclarer virtuel. Nous recommandons de toujours le faire si l’on compte dériver des classes à partir de la classe courante, même si le destructeur ne fait rien.

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