Nạp chồng toán tử

Trong lập trình, nạp chồng toán tử (tiếng Anh: operator overloading), thỉnh thoảng còn được gọi đa hình tùy biến toán tử (operator ad hoc polymorphism), là một trường hợp đặc biệt của đa hình, trong đó các toán tử khác nhau có cách cài đặt khác nhau dựa vào tham số của chúng. Nạp chồng toán tử thường do ngôn ngữ lập trình hoặc lập trình viên định nghĩa.

 Cơ sở hình thành  
Nạp chồng toán tử là dạng cú pháp đặc biệt, và được sử dụng bởi vì nó cho phép lập trình bằng các kí hiệu gần với "miền mục tiêu" hơn và cho phép các kiểu do người dùng định nghĩa được hỗ trợ ở một mức độ nhất định về cú pháp giống với các kiểu có sẵn của một ngôn ngữ. Ví dụ, trong tính toán khoa học, nạp chồng toán tử cho phép thao tác với biểu diễn của các đối tượng toán học bằng cú pháp giống như khi viết trên giấy.

Nạp chồng toán tử không làm thay đổi sức mạnh biểu đạt của một ngôn ngữ (hỗ trợ hàm), bởi vì nó cũng giống như việc gọi các hàm vậy. Chẳng hạn, xét các biến ,  và  của một kiểu do người dùng định nghĩa, chẳng hạn như ma trận:

Ở trong ngôn ngữ hỗ trợ nạp chồng toán tử, giả sử rằng toán tử nhân '*' có độ ưu tiên cao hơn so với toán tử '+', biểu thức trên là một cách viết súc tích hơn của biểu thức dưới đây:

Tuy nhiên, cú pháp đầu tiên phản ánh cách viết thường dùng trong toán học.

 Bảng phân loại 
Bảng sau đây phân loại các ngôn ngữ lập trình phổ biến dựa vào việc các ngôn ngữ này có hỗ trợ định nghĩa toán tử mới ngoài các toán tử có sẵn hay không và có hỗ trợ nạp chồng toán tử hay không:
Toán tửKhông nạp chồng đượcNạp chồng đượcThêm mới đượcCompletely new operators can be added. ML
 PicoBinary functions with a symbolic name can be called infix.
 Prolog
 Smalltalk ALGOL 68
 Clojure
 Eiffel
 FortranIntroduced in Fortran 90.
 Futhark
 F#
 HaskellType classes instead of overloading.
 Io
 Nim
 R
 Raku
 Scala
 Seed7
 SwiftBị giới hạn BASIC
 C
 Go
 Java
 JavaScript
 Modula-2
 Objective-C
 Pascal
 TypeScript
 Visual Basic Ada
 C#
 C++
 Ceylon
 D
 Dart
 FreeBASIC
 Groovy
 Java (thông qua Manifold, một trình cắm cho trình biên dịch Java)
 Kotlin
 Lua
 MATLAB
 Object Pascal (Free Pascal, Delphi (từ năm 2005))
 PHP (sử dụng phương thức ma thuật, giao diện ArrayAccess, hoặc phần mở rộng Operator)
 Perl
 Python
 Ruby
 Rust
 Visual Basic .NET

 Xem thêm 
Chồng hàm
Đa hình (khoa học máy tính)
Chương trình con
Toán tử (lập trình máy tính)
Toán tử trong C và C++

 Tham khảo 

Thể loại:Toán tử (lập trình)