I clienti apprezzano tutti, anche quelli che a volte preferivano soltanto un semplice piatto di pasta col sugo o pasta col pesto, sapendo che c'è solo l'Apprendista e che lui dà il meglio di sé coi piatti di pasta a due condimenti, si adeguano e ordinano tutti pasta a due condimenti.
Senonché arriva l'anziano sig. Sclerosetti, il quale è un tradizionalista inguaribile, e, abituato a mangiare sempre e solo pasta a un condimento solo, esige che l'Apprendista gli prepari un piatto di pasta col ragù e basta!
L'apprendista si dà da fare, e vediamo che succede nei quattro linguaggi:
In C++:
#include "iostream" using namespace std; class Cuoco{ public: void Pasta(char * condimento){ cout << "io cucino pasta con " << condimento << endl; getchar(); } }; class Apprendista: public Cuoco{ public: void Pasta(char * condimento, char * condimento2){ cout << "io cucino pasta con " << condimento << " e " << condimento2 << endl; getchar(); } }; void main(){ Apprendista * Antonio = new Apprendista(); Antonio->Pasta("ragu"); }
1>c:\users\antonello\documents\visual studio 2010\projects\test15\test15\foglio1.cpp(25): error C2660: 'Apprendista::Pasta': la funzione non accetta 1 argomenti
In VB:
Module Module1 Class Cuoco Public Sub Pasta(condimento As String) Console.WriteLine("io cucino pasta con " & condimento) Console.ReadLine() End Sub End Class Class Apprendista Inherits Cuoco Public Sub Pasta(condimento As String, condimento2 As String) Console.WriteLine("io cucino pasta con " & condimento & " e " & condimento2) Console.ReadLine() End Sub End Class Sub Main() Dim Antonio As New Apprendista Antonio.Pasta("ragu") End Sub End Module
Errore 2 Argomento non specificato per il parametro 'condimento2' di 'Public Sub Pasta(condimento As String, condimento2 As String)'. C:\Users\Antonello\AppData\Local\Temporary Projects\ConsoleApplication1\Module1.vb 21 9 ConsoleApplication1
In C#:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication3 { class Cuoco { public void Pasta(string condimento) { Console.WriteLine("io cucino la pasta con " + condimento); Console.ReadLine(); } } class Apprendista : Cuoco { public void Pasta(string condimento, string condimento2) { Console.WriteLine("io cucino la pasta con " + condimento + " e " + condimento2); Console.ReadLine(); } } class Program { static void Main(string[] args) { Apprendista Antonio = new Apprendista(); Antonio.Pasta("ragu"); } } }
io cucino la pasta con ragu
In Java:
package javaapplication1; class Cuoco{ public void Pasta(String condimento){ System.out.println("io cucino pasta con " + condimento); } } class Apprendista extends Cuoco{ public void Pasta(String condimento, String condimento2){ System.out.println("io cucino pasta con " + condimento + " e "+ condimento2); } } public class JavaApplication1 { public static void main(String[] args) { Apprendista Antonio=new Apprendista(); Antonio.Pasta("ragu"); } }
run: io cucino pasta con ragu BUILD SUCCESSFUL (total time: 0 seconds)
Ecco: abbiamo messaggi di errore in C++ e in VB.NET.
In C++ avevo risolto ridichiarando il metodo ereditato nella classe derivata.
Ma vediamo se esiste qualche altro modo...
Ecco: ho trovato un altro modo: mettere nella classe derivata un using Base::metodo;.
In VB.NET, invece, bisogna mettere nell'altro metodo la parola chiave Overloads a indicare che il metodo viene overloadato e non overridato... (anche se forse questa non è la parola giusta).
Facciamo la comparazione fra C++ e VB.NET:
In C++:
#include "iostream"
using namespace std;
class Cuoco{
public:
void Pasta(char * condimento){
cout << "io cucino pasta con " << condimento << endl;
getchar();
}
};
class Apprendista: public Cuoco{
public:
using Cuoco::Pasta;
void Pasta(char * condimento, char * condimento2){
cout << "io cucino pasta con " << condimento << " e " << condimento2 << endl;
getchar();
}
};
void main(){
Apprendista * Antonio = new Apprendista();
Antonio->Pasta("ragu");
}
io cucino pasta con ragu
in VB:
Module Module1
Class Cuoco
Public Sub Pasta(condimento As String)
Console.WriteLine("io cucino pasta con " & condimento)
Console.ReadLine()
End Sub
End Class
Class Apprendista
Inherits Cuoco
Public Overloads Sub Pasta(condimento As String, condimento2 As String)
Console.WriteLine("io cucino pasta con " & condimento & " e " & condimento2)
Console.ReadLine()
End Sub
End Class
Sub Main()
Dim Antonio As New Apprendista
Antonio.Pasta("ragu")
End Sub
End Module
io cucino pasta con ragu
In C# e in Java l'overload è implicito.
Nessun commento:
Posta un commento