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 Class
E 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 Sub
Ed 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 Class
Ed ecco l'output senza decimali:
10
Nessun commento:
Posta un commento