F # - Sovraccarico dell'operatore

È possibile ridefinire o sovraccaricare la maggior parte degli operatori incorporati disponibili in F #. Pertanto un programmatore può utilizzare anche operatori con tipi definiti dall'utente.

Gli operatori sono funzioni con nomi speciali, racchiusi tra parentesi. Devono essere definiti come membri di una classe statica. Come qualsiasi altra funzione, un operatore sovraccarico ha un tipo restituito e un elenco di parametri.

L'esempio seguente mostra un operatore + sui numeri complessi -

//overloading + operator
static member (+) (a : Complex, b: Complex) =
Complex(a.x + b.x, a.y + b.y)

La funzione precedente implementa l'operatore di addizione (+) per una classe Complex definita dall'utente. Aggiunge gli attributi di due oggetti e restituisce l'oggetto Complex risultante.

Implementazione del sovraccarico dell'operatore

Il seguente programma mostra l'implementazione completa:

//implementing a complex class with +, and - operators
//overloaded
type Complex(x: float, y : float) =
   member this.x = x
   member this.y = y
   //overloading + operator
   static member (+) (a : Complex, b: Complex) =
      Complex(a.x + b.x, a.y + b.y)

   //overloading - operator
   static member (-) (a : Complex, b: Complex) =
      Complex(a.x - b.x, a.y - b.y)

   // overriding the ToString method
   override this.ToString() =
      this.x.ToString() + " " + this.y.ToString()

//Creating two complex numbers
let c1 = Complex(7.0, 5.0)
let c2 = Complex(4.2, 3.1)

// addition and subtraction using the
//overloaded operators
let c3 = c1 + c2
let c4 = c1 - c2

//printing the complex numbers
printfn "%s" (c1.ToString())
printfn "%s" (c2.ToString())
printfn "%s" (c3.ToString())
printfn "%s" (c4.ToString())

Quando compili ed esegui il programma, restituisce il seguente output:

7 5
4.2 3.1
11.2 8.1
2.8 1.9