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] );