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:
Escopo de bloco atual se o nome é usado dentro de uma função; escopo global, de outra forma.
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).
Se o nome é usado dentro de uma função de membro, o escopo da classe é pesquisado para o nome.
Classes de base da classe são pesquisados pelo nome.
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.
Escopo global é pesquisado.
No entanto, você pode fazer modificações a esta ordem de pesquisa da seguinte maneira:
Nomes precedido por :: forçar a pesquisa para começar no escopo global.
Precedido de nomes de classe, struct, e união palavras-chave forçar o compilador para pesquisar apenas classe, struct, ou união nomes.
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.