Đa hình (polymorphism) có thể là tĩnh hoặc động. Trong đa hình tĩnh, phản hồi của một hàm được xác định tại thời điểm biên dịch (compile time). Trong đa hình động, quyết định được thực hiện tại thời điểm chạy (run-time).
Đa hình thời gian biên dịch hoặc Ràng buộc tĩnh (Static Binding)
Cơ chế liên kết một hàm với một đối tượng trong quá trình biên dịch được gọi là ràng buộc sớm (early binding). Nó còn được gọi là ràng buộc tĩnh (static binding).
Đa hình thời gian chạy hoặc Ràng buộc động (Dynamic Binding)
Đa hình thời gian chạy có ghi đè phương thức (method overriding) cũng được gọi là ràng buộc động (dynamic binding) hoặc ràng buộc muộn (late binding).
Lớp trừu tượng (abstract class) chứa các phương thức trừu tượng, được triển khai bởi lớp dẫn xuất (derived class). Các lớp dẫn xuất có chức năng chuyên biệt hơn. Đa hình động được triển khai bằng các lớp trừu tượng và hàm ảo (virtual functions).