ใน C++ รองรับคอมไพล์ไทม์โพลีมอร์ฟิซึม (compile time polymorphism) ตัวอย่างของคอมไพล์ไทม์โพลีมอร์ฟิซึมคือ การโอเวอร์โหลดฟังก์ชัน (function overloading) และการโอเวอร์โหลดออเปอเรเตอร์ (operator overloading)
มีกฎบางอย่างสำหรับการโอเวอร์โหลดออเปอเรเตอร์ กฎเหล่านี้คือ
สามารถโอเวอร์โหลดได้เฉพาะออเปอเรเตอร์ที่สร้างมาแล้ว (built-in operators) หากมีออเปอเรเตอร์บางตัวไม่มีใน C++ เราไม่สามารถโอเวอร์โหลดมันได้
ไม่สามารถเปลี่ยน arity (จำนวนออเปอรันด์) ของออเปอเรเตอร์ได้
ลำดับความสำคัญ (precedence) ของออเปอเรเตอร์ยังคงเดิม
ออเปอเรเตอร์ที่โอเวอร์โหลดแล้วไม่สามารถมีพารามิเตอร์เริ่มต้น (default parameters) ได้ ยกเว้นออเปอเรเตอร์การเรียกฟังก์ชัน "()"
ไม่สามารถโอเวอร์โหลดออเปอเรเตอร์สำหรับชนิดข้อมูลสร้าง込 (built-in data types) ต้องมีชนิดข้อมูลที่ผู้ใช้กำหนดเอง (user defined data types) อย่างน้อยหนึ่งตัว
ออเปอเรเตอร์กำหนดค่า "=", 下標 "[]", เรียกฟังก์ชัน "()", และลูกศร "->" ต้องถูกกำหนดเป็นฟังก์ชันสมาชิก (member functions) ไม่ใช่ friend functions
ออเปอเรเตอร์บางตัวเช่น การกำหนดค่า "=", ที่อยู่ "&", และจุลภาค "," ถูกโอเวอร์โหลดโดยค่าเริ่มต้นแล้ว