Compartilhar via


Restrições em funções sobrecarregadas

Várias restrições regem um conjunto de funções sobrecarregadas aceitável:

  • Quaisquer duas funções em um conjunto de funções sobrecarregadas devem ter listas de argumentos diferentes.

  • Funções sobrecarregadas com listas de argumentos dos mesmos tipos, com base apenas no tipo de retorno, são um erro.

    Específico da Microsoft

Você pode sobrecarregar o operador new somente com base no tipo de retorno — especificamente, com base no modificador de modelo de memória especificado.

FIM de Específico da Microsoft

  • As funções membro não podem ser sobrecarregadas apenas com base em uma ser estática e a outra não.

  • Declarações typedef não definem novos tipos. Elas introduzem sinônimos para tipos existentes. Elas não afetam o mecanismo de sobrecarga. Considere o código a seguir:

    typedef char * PSTR;
    
    void Print( char *szToPrint );
    void Print( PSTR szToPrint );
    

    As duas funções anteriores têm listas de argumento idênticas. PSTR é um sinônimo do tipo char *. No escopo do membro, esse código gera um erro.

  • Os tipos enumerados são tipos distintos e podem ser usados para distinguir as funções sobrecarregadas.

  • Os tipos “matriz de” e “ponteiro para” são considerados idênticos para fins de distinção das funções sobrecarregadas. Isso é verdadeiro apenas para matrizes dimensionadas exclusivamente. Portanto, as funções sobrecarregadas seguintes entram em conflito e geram uma mensagem de erro:

    void Print( char *szToPrint );
    void Print( char szToPrint[] );
    

    Para matrizes dimensionadas multiplamente, a segunda e todas as dimensões seguintes são consideradas parte do tipo. Portanto, elas são usadas na distinção das funções sobrecarregadas:

    void Print( char szToPrint[] );
    void Print( char szToPrint[][7] );
    void Print( char szToPrint[][9][42] );
    

Consulte também

Referência

Visão geral da sobrecarga