Compartilhar via


Nomes e nomes qualificados

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

Os 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 suas classes base. Os nomes especificados à direita do operador de seleção de membros (–>) também podem ser objetos de outro tipo de classe, contanto que o lado esquerdo de –> seja um objeto de classe e que a classe defina um operador de seleção de membro sobrecarregado (–>) que é avaliado em um ponteiro para qualquer outro tipo de classe. (Esse provisionamento é abordado em mais detalhes em Acesso de membros de classe.)

O compilador pesquisa por nomes na seguinte ordem, parando quando o nome é encontrado:

  1. Escopo do bloco atual se o nome for usado em uma função; caso contrário, o escopo global.

  2. Em recursos externos por cada escopo do bloco delimitador, incluindo o escopo da função externa (incluindo argumentos de função).

  3. Se o nome for usado dentro de uma função de membro, o escopo da classe será pesquisado por nome.

  4. As classes base da classe são pesquisadas sequencialmente pelo nome.

  5. O escopo delimitador da classe aninhada (se houver) e suas bases são pesquisados. A pesquisa continua até que o escopo delimitador de classe externo ser pesquisado.

  6. O escopo global é pesquisado.

No entanto, você pode modificar essa ordem de pesquisa como segue:

  1. Os nomes precedidos por :: forçam a pesquisa a iniciar no escopo global.

  2. Os nomes precedidos pelas palavras-chave class, struct e union forçam o compilador a pesquisar somente pelos nomes class, struct ou union.

  3. Os nomes no lado esquerdo do operador de resolução de escopo (::) podem ser apenas nomes class, struct, namespace ou union.

Se o nome se refere 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 referir a qualquer membro não estático em uma classe delimitadora, uma mensagem de erro será gerada, pois as classes incluídas não têm os ponteiros this da classe delimitadora.

Consulte também

Referência

Resumo das regras de escopo