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.
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[1] 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 a, b và c của một kiểu do người dùng định nghĩa, chẳng hạn như ma trận:
a + b * c
Ở 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:
Cộng(a, Nhân(b, c))
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 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: