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 está declarando.

C++ permite declarar un puntero a un miembro de clase antes de la definición de 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, pero class S aún no se ha definido en este código; solo se ha declarado. Cuando el compilador encuentra un puntero así, debe crear 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 al compilador:

  • En la línea de comandos mediante el modificador /vmg.

  • Mediante el uso de la pragma pointers_to_members.

  • Mediante las palabras clave de herencia __single_inheritance, __multiple_inheritance y __virtual_inheritance. Esta técnica controla el modelo de herencia clase por clase.

    Nota:

    Si siempre se declara un puntero a un miembro de una clase después de definir la clase, no se necesita usar ninguna de estas opciones.

Si declara un puntero a un miembro de clase antes de definir la clase, esto puede afectar negativamente al tamaño y la velocidad del archivo ejecutable resultante. Cuanto más compleja es la herencia usada por una clase, mayor será el número de bytes necesarios para representar un puntero a un miembro de la clase y mayor será el código necesario para interpretar el puntero. La herencia única (o su ausencia) es la menos compleja, mientras que la herencia virtual es la más compleja. Los punteros a los miembros que declare antes de definir la clase siempre usan la representación más grande y compleja.

Si se cambia el ejemplo anterior a:

class __single_inheritance S;
int S::*p;

independientemente de las opciones de la línea de comandos o las pragmas que se especifiquen, los punteros a miembros de class S usarán la representación más pequeña posible.

Nota:

La misma declaración adelantada de una representación de puntero a miembro de la clase debe aparecer en cada unidad de traducción que declare punteros a miembros de esa clase y la declaración debe aparecer antes de que se declaren los punteros a miembros.

A efectos de compatibilidad con versiones anteriores, _single_inheritance, _multiple_inheritance y _virtual_inheritance son sinónimos de __single_inheritance, __multiple_inheritance y __virtual_inheritance, a menos que se especifique la opción del compilador/Za (deshabilitar extensiones de lenguaje).

FIN de Específicos de Microsoft

Consulte también

Palabras clave