Palavras-chave de herança
Específicos do Microsoft
class [__single_inheritance] class-name;
class [__multiple_inheritance] class-name;
class [__virtual_inheritance] class-name;
Onde:
- nome da classe
O nome da classe que está sendo declarado.
C++ permite declarar um ponteiro para um membro de classe antes para a definição da classe.Por exemplo:
class S;
int S::*p;
No código acima, p está declarada como um ponteiro para o membro de inteiro da classe s.No entanto, class S ainda não foi definida nesse código; Ele só foi declarado.Quando o compilador encontra tal um ponteiro, ele deve fazer uma representação generalizada do ponteiro.O tamanho da representação depende do modelo de herança especificado.Existem quatro maneiras para especificar um modelo de herança do compilador:
No IDE em representação de ponteiro para membro
Com a linha de comando usando o /vmg alternar
Usando o pointers_to_members pragma
Usando as palavras-chave de herança __single_inheritance, __multiple_inheritance, e __virtual_inheritance.Essa técnica controla o modelo de herança em uma base por classe.
Observação Se você sempre declarar um ponteiro para um membro de uma classe após a definição da classe, você não precisa usar qualquer uma dessas opções.
Declarar um ponteiro para um membro de uma classe antes da definição de classe afeta o tamanho e a velocidade do arquivo executável resultante.Quanto mais complexo a herança usado por uma classe, maior 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.Herança única é menos complexa e herança virtual é mais complexa.
Se o exemplo acima é alterado para:
class __single_inheritance S;
int S::*p;
independentemente das opções de linha de comando ou pragmas, ponteiros para os membros do class S usará a menor representação possível.
Observação |
---|
A mesma declaração de encaminhamento de uma representação de ponteiro para o membro de classe deve ocorrer em cada unidade de conversão que declara ponteiros para os membros dessa classe, e a declaração deve ocorrer antes que os ponteiros para os membros são declarados. |
Específicos do Microsoft final