E' possibile usare una funzione Somma per numeri di diverso tipo.
Posso applicarlo al mio esempio delle figure geometriche...
Ma prima deriviamo dalla classe astratta figura il trapezio, con il calcolo dell'area...
Class Trapezio
Inherits figura
Private baseMinore As Integer
Sub New(ByVal b As Integer, ByVal a As Integer, ByVal bm As Integer)
MyBase.New(b, a)
baseMinore = bm
Console.WriteLine("la base minore è " & baseMinore)
Console.ReadKey()
End Sub
Public Overrides Function Area() As Object
Return (base + baseMinore) * altezza / 2
End Function
End Class
Ecco: a parte overridare la funzione per il calcolo dell'area, ovviamente, devo aggiungere fra le proprietà la base minore, e inserirla nei parametri del costruttore. Le righe in rosso non sono necessarie per la funzione, ma sono un mio test per vedere se effettivamente la base minore viene modificata come da parametri del costruttore, richiamando il costruttore della classe base e aggiungendo la base minore col valore del terzo parametro.
Ecco l'istanziazione e l'output:
Sub Main() Dim mioTrapezio As New Trapezio(5, 3, 2) End Sub
la base minore è 2Perfetto!
Ecco quindi la classe derivata Trapezio:
Class Trapezio Inherits figura Private baseMinore As Integer Sub New(ByVal b As Integer, ByVal a As Integer, ByVal bm As Integer) MyBase.New(b, a) baseMinore = bm End Sub Public Overrides Function Area() As Object Return (base + baseMinore) * altezza / 2 End Function End ClassE adesso, oltre a istanziarla, ne mettiamo a video il risultato della funzione per il calcolo dell'area:
Sub Main() Dim mioTrapezio As New Trapezio(5, 3, 2) Console.WriteLine(mioTrapezio.Area) Console.ReadKey() End SubEd ecco l'output:
10,5Giusto: infatti (5+2)*3=21 e 21/2=10.5
Bene: HO COMMESSO UN ERRORE CLAMOROSO! Dal momento che nella classe astratta ho dimenticato di specificare il tipo della funzione Area(), l'IDE me l'ha tipizzata automaticamenteo come Object. Per questo ottengo un risultato decimale!
Correggo tutto:
Module Module1 Sub Main() Dim mioTrapezio As New Trapezio(5, 3, 2) Console.WriteLine(mioTrapezio.Area) Console.ReadKey() End Sub End Module MustInherit Class figura Protected base As Integer Protected altezza As Integer Sub New(ByVal b As Integer, ByVal a As Integer) base = b altezza = a End Sub MustOverride Function Area() As Integer End Class Class Triangolo Inherits figura Sub New(ByVal b As Integer, ByVal a As Integer) MyBase.New(b, a) End Sub Public Overrides Function Area() As Integer Return base * altezza / 2 End Function End Class Class Rettangolo Inherits figura Sub New(ByVal b As Integer, ByVal a As Integer) MyBase.New(b, a) End Sub Public Overrides Function Area() As Integer Return base * altezza End Function End Class Class Trapezio Inherits figura Private baseMinore As Integer Sub New(ByVal b As Integer, ByVal a As Integer, ByVal bm As Integer) MyBase.New(b, a) baseMinore = bm End Sub Public Overrides Function Area() As Integer Return (base + baseMinore) * altezza / 2 End Function End ClassEd ecco l'output senza decimali:
10
Nessun commento:
Posta un commento