F # - Quá tải nhà điều hành
Bạn có thể xác định lại hoặc nạp chồng hầu hết các toán tử tích hợp sẵn có trong F #. Do đó, một lập trình viên cũng có thể sử dụng các toán tử với các kiểu do người dùng xác định.
Toán tử là những hàm có tên đặc biệt, được đặt trong dấu ngoặc. Chúng phải được định nghĩa là thành viên lớp tĩnh. Giống như bất kỳ hàm nào khác, toán tử được nạp chồng có kiểu trả về và danh sách tham số.
Ví dụ sau đây cho thấy một toán tử + trên các số phức:
//overloading + operator
static member (+) (a : Complex, b: Complex) =
Complex(a.x + b.x, a.y + b.y)
Hàm trên thực hiện toán tử cộng (+) cho một lớp Complex do người dùng định nghĩa. Nó thêm các thuộc tính của hai đối tượng và trả về đối tượng Complex kết quả.
Thực hiện quá tải nhà điều hành
Chương trình sau đây cho thấy việc triển khai hoàn chỉnh:
//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())
Khi bạn biên dịch và thực thi chương trình, nó sẽ tạo ra kết quả sau:
7 5
4.2 3.1
11.2 8.1
2.8 1.9