Nạp chồng hàm (function overloading) là tính năng của đa hình (polymorphism) trong lập trình hướng đối tượng.
Để nạp chồng, các hàm phải:
- Cùng tên hàm
- Cùng kiểu trả về
- Tham số khác kiểu hoặc khác số lượng
Ví dụ
int hienThi(int a); int hienThi(float a); // Có thể nạp chồng int hienThi(int a); float hienThi(float b); // KHÔNG thể nạp chồng (khác kiểu trả về)
Các trường hợp KHÔNG thể nạp chồng
1. Hàm khác tên và khác số tham số
int max_hai(int a, int b); // 2 tham số int max_ba(int a, int b, int c); // 3 tham số - KHÔNG nạp chồng được (khác tên)
2. Cùng tên nhưng khác kiểu trả về
int max_hai(int a, int b) { ... }
float max_hai(int a, int b) { ... } // LỖI: nạp chồng không được
3. Hàm thành viên static và non-static cùng tên, cùng tham số
class KiemTra {
static void test(int i) { }
void test(int i) { } // LỖI: static không nạp chồng với non-static
};
4. Chỉ khác nhau ở tham số mặc định (default argument)
int ham(int a, int b) { return a*b; }
int ham(int a, int b = 40) { return a+b; } // LỖI: coi như khai báo trùng
Lưu ý: Nạp chồng dựa vào chữ ký hàm (tên + danh sách tham số), không phụ thuộc vào kiểu trả về.