F # - Surcharge de l'opérateur

Vous pouvez redéfinir ou surcharger la plupart des opérateurs intégrés disponibles dans F #. Ainsi, un programmeur peut également utiliser des opérateurs avec des types définis par l'utilisateur.

Les opérateurs sont des fonctions avec des noms spéciaux, entre crochets. Ils doivent être définis comme des membres de classe statiques. Comme toute autre fonction, un opérateur surchargé a un type de retour et une liste de paramètres.

L'exemple suivant montre un opérateur + sur les nombres complexes -

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

La fonction ci-dessus implémente l'opérateur d'addition (+) pour une classe définie par l'utilisateur Complex. Il ajoute les attributs de deux objets et renvoie l'objet Complex résultant.

Mise en œuvre de la surcharge des opérateurs

Le programme suivant montre l'implémentation complète -

//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())

Lorsque vous compilez et exécutez le programme, il produit la sortie suivante -

7 5
4.2 3.1
11.2 8.1
2.8 1.9