Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Específicos de Microsoft
classclass-name
class __single_inheritanceclass-name
class __multiple_inheritanceclass-name
class __virtual_inheritanceclass-name
donde:
class-name
Nombre de la clase que se va a declarar.
C++ permite declarar un puntero a un miembro de clase antes de la definición de la clase. Por ejemplo:
class S;
int S::*p;
En el código anterior, p se declara como un puntero al miembro entero de la clase S. Sin embargo, class S aún no se ha definido en este código; solo se ha declarado. Cuando el compilador encuentra este puntero, debe realizar una representación generalizada del puntero. El tamaño de la representación depende del modelo de herencia especificado. Hay tres maneras de especificar un modelo de herencia para el compilador:
En la línea de comandos mediante el
/vmgmodificadorUso de pragma
pointers_to_membersUso de las palabras clave
__single_inheritancede herencia ,__multiple_inheritancey__virtual_inheritance. Esta técnica controla el modelo de herencia por clase.Nota:
Si siempre declara un puntero a un miembro de una clase después de definir la clase, no es necesario usar ninguna de estas opciones.
Si declara un puntero a un miembro de clase antes de definir la clase, puede afectar negativamente al tamaño y la velocidad del archivo ejecutable resultante. Cuanto más compleja sea la herencia usada por una clase, mayor será el número de bytes necesarios para representar un puntero a un miembro de la clase . Además, cuanto mayor sea el código necesario para interpretar el puntero. La herencia única (o no) es menos compleja y la herencia virtual es la más compleja. Los punteros a los miembros que declara antes de definir la clase siempre usan la representación más grande y compleja.
Si el ejemplo anterior se cambia a:
class __single_inheritance S;
int S::*p;
después, independientemente de las opciones de línea de comandos o pragmas que especifique, los punteros a los miembros de class S usarán la representación más pequeña posible.
Nota:
La misma declaración de reenvío de una representación de puntero a miembro de clase debe producirse en cada unidad de traducción que declara punteros a miembros de esa clase y la declaración debe producirse antes de que se declaren los punteros a los miembros.
Para la compatibilidad con versiones anteriores, _single_inheritance, _multiple_inheritancey _virtual_inheritance son sinónimos de __single_inheritance, __multiple_inheritancey __virtual_inheritance a menos que se especifique la opción /Za del compilador (Deshabilitar extensiones de lenguaje).
FIN Específico de Microsoft