Overloading: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
RolloBot (discussione | contributi)
m Bot: Sostituzione automatica (-[Ll]ibreria \(informatica\) +Libreria (software))
ValterVBot (discussione | contributi)
m tag source deprecati, replaced: <source lang= → <syntaxhighlight lang= (4), </source> → </syntaxhighlight> (4)
Riga 7:
==Overloading del costruttore e dei metodi delle classi==
Ecco alcuni esempi di sovraccarico di un costruttore "''Persona''" e un [[metodo (informatica)|metodo]] "''Rubrica.Inserisci''", in [[linguaggio di programmazione|linguaggio]] [[Visual Basic]] (è omessa la dichiarazione di un [[Tipo di dato|tipo enumerativo]] "Sesso" di valore "Maschio/Femmina" e di alcune implementazioni)
<sourcesyntaxhighlight lang="vb">
Class Persona
 
Riga 37:
Public Overloads Sub Inserisci(ByVal Item As Persona)
End Class
</syntaxhighlight>
</source>
 
In questo modo è possibile inizializzare un'[[Istanza (informatica)|istanza]] della classe Persona sia fornendo nome e cognome come stringa che copiandoli da un'altra istanza di Persona.
Riga 44:
==Overloading degli operatori==
Prendiamo in considerazione il seguente esempio [[C++]]: una classe che rappresenta i [[numeri complessi]] (sono omesse le implementazioni del file .cpp)
<sourcesyntaxhighlight lang="Cpp">
class Complex
{
Riga 57:
Complex(Complex c);
}
</syntaxhighlight>
</source>
Vorremmo essere in grado di eseguire sui numeri complessi le stesse operazioni che eseguiamo normalmente sui [[numeri reali]]. Ad esempio, vorremmo poter eseguire il seguente codice:
<sourcesyntaxhighlight lang="Cpp">
Complex c,d;
...
Riga 66:
...
cout << c;
</syntaxhighlight>
</source>
Tale codice solleverebbe un errore di [[compilazione]], in quanto il [[compilatore]] non è in grado di valutare da solo se il complesso c è minore di d, né tantomeno di scriverlo a video. La soluzione, adottabile '''solo''' in [[C++]] e [[C sharp|C#]], è quella di definire un opportuno ''sovraccarico'' per gli operatori ''<'' e ''<<''. Per fare ciò è necessario conoscere come il compilatore dei linguaggi C tratta le espressioni con operatore. Esso le traduce con una chiamata a subroutine ''operator?()'', dove al posto di ''?'' va il simbolo dell'operatore. Ecco quindi i prototipi (e un paio di realizzazioni) di una completa famiglia di overloading per gli operatori principali di confronto e output.
<sourcesyntaxhighlight lang="Cpp">
//operator<
int operator<(Complex a, Complex b)
Riga 111:
cout << c.i << "i";
}
</syntaxhighlight>
</source>
In linguaggio [[Visual Basic]] è possibile simulare il sovraccarico degli operatori implementando l'[[interfaccia (informatica)|interfaccia]] IComparable.