Limitazioni sulle funzioni in overload
Un set di funzioni in overload accettabile è regolato da numerose restrizioni:
È necessario che due funzioni presenti in un set di funzioni in overload abbiano elenchi di argomenti differenti.
Eseguire l'overload di funzioni con elenchi di argomenti dello stesso tipo, basandosi solo sul tipo restituito, è un errore.
Sezione specifica Microsoft
È possibile eseguire l'overload di operator new unicamente sulla base del tipo restituito; in particolare, in base al modificatore del modello di memoria specificato.
Fine sezione specifica Microsoft
Le funzioni membro non possono essere sottoposte a overload unicamente perché una è statica e l'altra non statica.
Le dichiarazioni typedef non definiscono nuovi tipi, ma introducono sinonimi per i tipi esistenti. Esse non influiscono sul meccanismo di overload. Esaminare il codice seguente:
typedef char * PSTR; void Print( char *szToPrint ); void Print( PSTR szToPrint );
Le due funzioni precedenti hanno elenchi di argomenti identici. PSTR è un sinonimo del tipo char *. Nell'ambito del membro, questo codice genera un errore.
I tipi enumerati sono tipi distinti e possono essere utilizzati per distinguere le funzioni in overload.
I tipi "matrice di" e "puntatore a" sono considerati identici, ai fini della distinzione tra le funzioni in overload. Ciò è valido solo per le matrici dimensionate singolarmente. Di conseguenza, le seguenti funzioni in overload sono in conflitto e generano un messaggio di errore:
void Print( char *szToPrint ); void Print( char szToPrint[] );
Nella moltiplicazione delle matrici dimensionate, la seconda dimensione e tutte le successive sono considerate parte del tipo. Di conseguenza, vengono utilizzate per distinguere le funzioni in overload:
void Print( char szToPrint[] ); void Print( char szToPrint[][7] ); void Print( char szToPrint[][9][42] );