Khi trình biên dịch gặp một lời gọi hàm tới một tên hàm có nhiều phiên bản nạp chồng (overload), nó phải chọn ra đúng một phiên bản dựa trên kiểu các đối số. Cho k overload của cùng một hàm, đánh số 1..k theo thứ tự khai báo; overload thứ i có chữ ký là danh sách kiểu tham số (kiểu ∈{int,float,bool,string}). Cho một lời gọi với danh sách kiểu đối số thực tế.
Luật khớp từng vị trí tham số (kiểu tham số p, kiểu đối số a):
float và a=int.Một overload được coi là khớp lời gọi nếu số tham số bằng số đối số và mọi vị trí đều khớp (chính xác hoặc ép kiểu). Với các overload khớp, gọi độ ưu tiên là số vị trí khớp chính xác. Chọn overload có độ ưu tiên cao nhất.
NO MATCH.AMBIGUOUS.Dòng đầu là k. k dòng tiếp theo, dòng thứ i dạng <p> <t1> ... <tp> mô tả overload thứ i (p = số tham số, rồi p kiểu tham số). Dòng tiếp theo là q — số lời gọi cần xét. q dòng tiếp theo, mỗi dòng dạng <p> <t1> ... <tp> là số lượng và kiểu các đối số của một lời gọi.
In ra q dòng, mỗi dòng là số thứ tự overload được chọn, hoặc AMBIGUOUS, hoặc NO MATCH.
Ví dụ:
Đầu vào:
2
2 int int
2 float float
1
2 int float
Đầu ra:
2
Đầu vào:
2
2 int int
2 float float
1
2 int int
Đầu ra:
1
Đang tải editor...