F # - Sobrecarga do operador

Você pode redefinir ou sobrecarregar a maioria dos operadores integrados disponíveis no F #. Assim, um programador também pode usar operadores com tipos definidos pelo usuário.

Operadores são funções com nomes especiais entre colchetes. Eles devem ser definidos como membros de classe estáticos. Como qualquer outra função, um operador sobrecarregado tem um tipo de retorno e uma lista de parâmetros.

O exemplo a seguir mostra um operador + em números complexos -

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

A função acima implementa o operador de adição (+) para uma classe Complex definida pelo usuário. Ele adiciona os atributos de dois objetos e retorna o objeto Complex resultante.

Implementação de Sobrecarga do Operador

O programa a seguir mostra a implementação 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 você compila e executa o programa, ele produz a seguinte saída -

7 5
4.2 3.1
11.2 8.1
2.8 1.9