PDA

Visualizza versione completa : Overloading di funzioni in VB


LoryOne
26-02-2004, 15.53.59
A chi afferma che l'overloading di funzioni sia possibile solo in C++ e derivati , io come al solito rispondo che non è poi così vero.
Prendiamo un semplice programma in C++:


#include <iostream>
using namespace std;

int maximum(int, int);
int maximum(int, int, int);
double maximum(double, double);

int main() {
cout << maximum(99,77) << " " << maximum(55,66,33) << " " << maximum(3.4,7.2) << endl;
}

int maximum(int x, int y) {
return (x > y ? x : y);
}
int maximum(int x, int y, int z) {
int m = (x > y ? x : y);
return (z > m ? z : m);
}
double maximum(double x, double y) {
return (x > y ? x : y);
}


e trasformiamolo in VB
(non voglio utilizzare le API per l'interfaccia con la console di Windows solo per comodità)


Private Function maximum(ByVal x As Variant, Optional ByVal y As Variant, Optional ByVal z As Variant) As Variant
If (VarType(x) = vbInteger And VarType(y) = vbInteger) Then
maximum = CInt(IIf(x > y, x, y))
End If
If (VarType(x) = vbInteger And VarType(y) = vbInteger And VarType(z) = vbInteger) Then
Dim m As Integer
m = IIf(x > y, x, y)
maximum = CInt(IIf(z > m, x, y))
End If
If (VarType(x) = vbDouble And VarType(y) = vbDouble) Then
maximum = CDbl(IIf(x > y, x, y))
End If
End Function

Private Sub Command1_Click()
Print maximum(99, 77) & " " & maximum(55, 66, 33) & " "; maximum(3.4, 7.2)
End Sub


Il risultato è identico.
A chi invece afferma che l'overloading di operatori (potenza esagerata del C++) sia possibile solo in C++ e derivati non posso che dargli ragione.
Voi cosa ne pensate ?