Restrictions relatives aux fonctions surchargées
Plusieurs restrictions régissent un ensemble acceptable de fonctions surchargées :
Deux fonctions d'un ensemble de fonctions surchargées doivent avoir des listes d'arguments différentes.
Le surchargement de fonctions avec des listes d'arguments de même type, basées uniquement sur le type de retour, est une erreur.
Section spécifique à Microsoft
Vous pouvez surcharger operator new uniquement en fonction du type de retour ; plus précisément, en fonction du modificateur de modèle de mémoire spécifié.
FIN de la section spécifique à Microsoft
Les fonctions membres ne peuvent pas être surchargées uniquement sur la base d'une étant statique et l'autre non statique.
Les déclarations typedef ne définissent pas de nouveaux types ; elles introduisent des synonymes pour les types existants. Elles n'ont aucune incidence sur le mécanisme de surcharge. Examinons le code ci-dessous.
typedef char * PSTR; void Print( char *szToPrint ); void Print( PSTR szToPrint );
Les deux fonctions précédentes ont des listes d'arguments identiques. PSTR est un synonyme du type char *. Dans la portée du membre, ce code génère une erreur.
Les types énumérés sont des types distincts et peuvent être utilisés pour établir une distinction entre les fonctions surchargées.
Les types « array » et « pointer to » sont considérés comme identiques pour établir une distinction entre les fonctions surchargées. Ceci est vrai uniquement pour les tableaux dimensionnés séparément. Par conséquent, les fonctions surchargées suivantes sont en conflit et génèrent un message d'erreur :
void Print( char *szToPrint ); void Print( char szToPrint[] );
Pour les tableaux dimensionnés de façon multiple, la deuxième et toutes les dimensions suivantes sont considérées comme faisant partie du type. Par conséquent, elles sont utilisées pour établir une distinction entre les fonctions surchargées :
void Print( char szToPrint[] ); void Print( char szToPrint[][7] ); void Print( char szToPrint[][9][42] );