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