Palavras-chave de herança

Seção específica da Microsoft

class class-name
class __single_inheritance class-name
class __multiple_inheritance class-name
class __virtual_inheritance class-name

em que:

class-name
O nome da classe que está sendo declarada.

O C++ permite que você declare um ponteiro para um membro de classe antes da definição da classe. Por exemplo:

class S;
int S::*p;

No código acima, p é declarado como um ponteiro para o membro inteiro da classe S. No entanto, class S ainda não foi definido neste código; ele só foi declarado. Quando o compilador encontrar esse ponteiro, ele fará uma representação generalizada do ponteiro. O tamanho de representação depende do modelo de herança especificado. Há três maneiras de especificar um modelo de herança para o compilador:

  • Na linha de comando usando a opção /vmg

  • Use o pragma pointers_to_members

  • Usando as palavras-chave de herança __single_inheritance, __multiple_inheritance e __virtual_inheritance. Essa técnica controla o modelo de herança com base em classes.

    Observação

    Se você sempre declara um ponteiro para um membro de uma classe depois de defini-la, você não precisa usar qualquer uma dessas opções.

Se você declarar um ponteiro para um membro de classe antes que a classe seja definida, isso poderá afetar negativamente o tamanho e a velocidade do arquivo executável resultante. Quanto mais complexa a herança usada por uma classe, maior será o número de bytes necessários para representar um ponteiro para um membro da classe. E maior será o código necessário para interpretar o ponteiro. A herança única (ou não) é a menos complexa, e a herança virtual é a mais complexa. Os ponteiros para os membros que você declara antes que a classe seja definida sempre usam a representação maior e mais complexa.

Se o exemplo anterior for alterado para:

class __single_inheritance S;
int S::*p;

independentemente das opções de linha de comando ou pragmas que você especificar, os ponteiros para os membros de class S usarão a menor representação possível.

Observação

A mesma declaração de encaminhamento de uma representação de ponteiro para membro de classe deve ocorrer em cada unidade de tradução que declarar ponteiros para membros daquela classe, e a declaração deve ocorrer antes que os ponteiros para os membros sejam declarados.

Para compatibilidade com versões anteriores, _single_inheritance, _multiple_inheritance e _virtual_inheritance são sinônimos de __single_inheritance, __multiple_inheritance e __virtual_inheritance, a menos que a opção do compilador /Za (Desabilitar extensões de linguagem) esteja especificada.

Fim da seção específica da Microsoft

Confira também

Palavras-chave