Compartilhar via


Nomes e nomes qualificados

Usado com o operador binário de escopo de resolução de nomes (::) são chamados de "nomes qualificados". O nome especificado após o operador binário de resolução de escopo deve ser um membro da classe especificada à esquerda do operador ou um membro da sua classe base (s).

Nomes especificados após o operador de seleção de membro (. ou – >) devem ser membros do tipo de classe do objeto especificado à esquerda do operador ou membros de sua classe base (s).Nomes especificados no lado direito do operador seleção de membro (– >) também podem ser objetos de outro tipo de classe, desde que o lado esquerdo do – > é uma classe de objeto e que a classe define um operador sobrecarregado-seleção de membro (– >) que é avaliada como um ponteiro para algum outro tipo de classe.(Esta disposição é discutida em mais detalhes em Acesso de membro de classe.)

O compilador procura por nomes na seguinte ordem, interrompendo quando o nome for encontrado:

  1. Escopo de bloco atual se o nome é usado dentro de uma função; escopo global, de outra forma.

  2. Para fora por meio de cada escopo de bloco de fechamento, incluindo o escopo de função mais externo (que inclui os argumentos da função).

  3. Se o nome é usado dentro de uma função de membro, o escopo da classe é pesquisado para o nome.

  4. Classes de base da classe são pesquisados pelo nome.

  5. Circunscrito aninhado o escopo de classe (se houver) e suas bases são pesquisados.A pesquisa continua até que o escopo de classe fechamento mais externa é pesquisado.

  6. Escopo global é pesquisado.

No entanto, você pode fazer modificações a esta ordem de pesquisa da seguinte maneira:

  1. Nomes precedido por :: forçar a pesquisa para começar no escopo global.

  2. Precedido de nomes de classe, struct, e união palavras-chave forçar o compilador para pesquisar apenas classe, struct, ou união nomes.

  3. Nomes no lado esquerdo do operador de escopo de resolução (::) só pode ser classe, struct, espaço para nome, ou união nomes.

Se o nome refere-se a um membro não estático, mas é usado em uma função de membro estático, uma mensagem de erro é gerada.Da mesma forma, se o nome se refere a qualquer membro não estático em uma classe de delimitador, uma mensagem de erro será gerada porque classes contidas não tem classe delimitador Este ponteiros.

Consulte também

Referência

Resumo das regras de escopo