Partager via


Mots clé d'héritage

Section spécifique à Microsoft

class [__single_inheritance] class-name; 
class [__multiple_inheritance] class-name; 
class [__virtual_inheritance] class-name;

où :

  • class-name
    est le nom de la variable en cours de déclaration.

C++ vous permet de déclarer un pointeur vers un membre de classe avant la définition de la classe. Par exemple :

class S;
int S::*p;

Dans le code ci-dessus, p est déclaré comme étant un pointeur vers membre entier de la classe S. Toutefois, class S n'a pas encore été défini dans ce code ; il a uniquement été déclaré. Lorsque le compilateur détecte ce type de pointeur, il doit créer une représentation généralisée du pointeur. La taille de la représentation dépend du modèle d'héritage spécifié. Il existe quatre façons de spécifier un modèle d'héritage au compilateur :

  • Dans l'IDE, sous Représentation d'un pointeur vers membre

  • En utilisant le commutateur /vmg sur la ligne de commande

  • En utilisant le pragma pointers_to_members

  • En utilisant des mots clés d'héritage __single_inheritance, __multiple_inheritance et __virtual_inheritance. Cette technique contrôle le modèle d'héritage pour chaque classe.

    Notes

    Si vous déclarez toujours un pointeur vers un membre d'une classe après la définition de la classe, vous n'avez pas besoin d'utiliser l'une de ces options.

La déclaration d'un pointeur vers un membre d'une classe avant la définition de classe a une incidence sur la taille et la vitesse du fichier exécutable résultant. Plus l'héritage utilisé par une classe est complexe, plus le nombre d'octets requis pour représenter un pointeur vers un membre de la classe est élevé et plus le code nécessaire pour interpréter le pointeur est volumineux. L'héritage unique est moins complexe, et l'héritage virtuel est plus complexe.

Si l'exemple ci-dessus est modifié comme suit :

class __single_inheritance S;
int S::*p;

indépendamment des options de ligne de commande ou des pragmas, les pointeurs vers des membres de class S utiliseront la plus petite représentation possible.

Notes

La même déclaration anticipée d'une représentation de pointeur de classe vers membre devrait se produire dans chaque unité de traduction qui déclare des pointeurs vers des membres de cette classe, et la déclaration devrait se produire avant que les pointeurs vers des membres soient déclarées.

FIN de la section spécifique à Microsoft

Voir aussi

Référence

Mots clés C++