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
commutateurUtilisation du
pointers_to_members
pragmaUtilisation des mot clé d’héritage
__single_inheritance
,__multiple_inheritance
et__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_inheritance
et __virtual_inheritance
sauf si l’option/Za
du 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
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour