Dal C al C++/Utilizzo basilare di librerie/Dichiarazioni e definizioni: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Riga 221:
 
Il seguente programma è errato in C, ma valido in C++:
<source lang="cpp">double f(int x) { return (double)x; }
double f(float x) { return (double)x * 3; }
int main() {
double a = f(7);
double b = f(7.f);
}</source>
}
Alla variabile "a" viene assegnato il valore "7.0", mentre alla variabile "b" viene assegnato il valore "21.0".
 
Riga 241:
 
Il sovraccaricamento può dare origine ad ambiguità, come nel seguente programma errato:
<source lang="cpp">void f(double x) { }
void g(float x) { }
void g(double x) { }
Riga 247:
f(7);
g(7); // Illegale
}</source>
}
La prima istruzione chiama la funzione "f" passandole un valore di tipo "int".
Non esistono funzioni di nome "f" e con un parametro di tipo "int", ma ne esiste una con nome "f" e un parametro di tipo "double", ed esiste una conversione standard da "int" a "double".
Riga 259:
Per evitare tale errore, in presenza di più funzioni sovraccaricate, si deve passare una parametro avente uno dei tipi per cui esiste la funzione sovraccaricata.
Per esempio, quell'istruzione avrebbe dovuto essere una delle due seguenti:
<source lang="cpp">g(7.f); // Chiama g(float)
g(7.); // Chiama g(double)</source>
oppure una delle due seguenti:
<source lang="cpp"> g((float)7); // Chiama g(float)
g((double)7); // Chiama g(double)</source>
 
=== L' Overloading degli operatori ===