Mots clé de l’héritage

Section spécifique à Microsoft

class class-name
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 pointeur vers un membre entier de la classe S. Toutefois, class S n’a pas encore été défini dans ce code ; il n’a été déclaré que. 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 trois façons de spécifier un modèle d’héritage au compilateur :

  • Sur la ligne de commande à l’aide du /vmg commutateur

  • Utilisation du pointers_to_members pragma

  • Utilisation des mot clé d’héritage __single_inheritance, __multiple_inheritanceet __virtual_inheritance. Cette technique contrôle le modèle d'héritage pour chaque classe.

    Remarque

    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.

Si vous déclarez un pointeur vers un membre de classe avant la définition de la classe, il peut affecter négativement 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 requis pour interpréter le pointeur est grand. L’héritage unique (ou non) est le moins complexe et l’héritage virtuel est le plus complexe. Les pointeurs vers les membres que vous déclarez avant la définition de la classe utilisent toujours la représentation la plus grande et la plus complexe.

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

class __single_inheritance S;
int S::*p;

ensuite, quelles que soient les options de ligne de commande ou les pragmas que vous spécifiez, les pointeurs vers les membres class S utilisent la plus petite représentation possible.

Remarque

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.

Pour la compatibilité avec les versions précédentes, , et sont des synonymes pour __single_inheritance, __multiple_inheritanceet __virtual_inheritance sauf si l’option/Zadu compilateur (Désactiver les extensions de langage) est spécifiée._virtual_inheritance_multiple_inheritance_single_inheritance

FIN de la section spécifique à Microsoft

Voir aussi

Mots clés