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
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de