Partilhar via


Palavras-chave de herança

Específico da Microsoft

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

onde:

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

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

class S;
int S::*p;

No código acima, p é declarado como um ponteiro para membro inteiro da classe S. No entanto, ainda não foi definido neste código, class S apenas foi declarado. Quando o compilador encontra tal ponteiro, ele deve fazer uma representação generalizada do ponteiro. O tamanho da 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 o /vmg switch

  • Usando o pointers_to_members pragma

  • Usando as palavras-chave __single_inheritancede herança , __multiple_inheritancee __virtual_inheritance. Esta técnica controla o modelo de herança por classe.

    Observação

    Se você sempre declarar um ponteiro para um membro de uma classe depois de definir a classe, não precisará usar nenhuma dessas opções.

Se você declarar um ponteiro para um membro da classe antes que a classe seja definida, isso poderá afetar negativamente o tamanho e a velocidade do arquivo executável resultante. Quanto mais complexa for 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, quanto maior o código necessário para interpretar o ponteiro. A herança única (ou nenhuma) é menos complexa, e a herança virtual é a mais complexa. Os ponteiros para os membros que você declara antes de a classe ser definida sempre usam a representação maior e mais complexa.

Se o exemplo acima for alterado para:

class __single_inheritance S;
int S::*p;

então, não importa as opções de linha de comando ou pragmas que você especificar, os ponteiros para os membros do 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 declara ponteiros para membros dessa classe, e a declaração deve ocorrer antes que os ponteiros para membros sejam declarados.

Para compatibilidade com versões anteriores, _single_inheritance, _multiple_inheritance, e _virtual_inheritance são sinónimos de , __multiple_inheritancee __virtual_inheritance a menos que a __single_inheritanceopção /Za do compilador (Desativar extensões de idioma) seja especificada.

END Específico da Microsoft

Ver também

Palavras-chave