Share via


Palabras clave de herencia

Específicos de Microsoft

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 a miembro entero de clase S. Sin embargo, 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 cuatro maneras de especificar un modelo de herencia al compilador:

  • En el IDE bajo Representación de puntero a miembro

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

  • Con la directiva 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.

Declarar un puntero a un miembro de una clase antes de la definición de clase afecta 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 cuando mayor es el código necesario para interpretar el puntero. La herencia única es la menos compleja y la herencia virtual la más 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, 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.

FIN de Específicos de Microsoft

Vea también

Referencia

Palabras clave de C++