Compartir vía


Palabras clave de herencia

Específicos de Microsoft

class class-name
class __single_inheritance class-name
class __multiple_inheritance class-name
class __virtual_inheritance class-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 /vmg modificador

  • Uso de pragma pointers_to_members

  • Uso 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

Consulte también

Palabras clave