ในบทความนี้ เราจะทำความเข้าใจความแตกต่างระหว่าง function overloading และ function overriding ใน C++
Overloading (การโอเวอร์โหลด)
- ไม่มีคีย์เวิร์ดใดๆ ถูกใช้ระหว่างการ overload
- โปรโตไทป์แตกต่างกันเฉพาะจำนวนหรือประเภทของพารามิเตอร์
- เกิดขึ้นในขณะคอมไพล์ (compile time)
- Constructor สามารถ overload ได้
- Destructor ไม่สามารถ overload ได้
- สามารถใช้เพื่อให้เกิด early binding
- เวอร์ชันของฟังก์ชันที่ถูกเรียกจะถูกกำหนดโดยจำนวนหรือประเภทของพารามิเตอร์ที่ใช้
- ฟังก์ชันจะถูกนิยามใหม่ด้วยชื่อเดียวกัน แต่จำนวนหรือประเภทพารามิเตอร์ต่างกัน
Overriding (การโอเวอร์ไรด์)
- โปรโตไทป์คงที่ตลอด
- เกิดขึ้นในขณะรันไทม์ (runtime)
- Virtual functions ไม่สามารถ override ได้ (หมายเหตุ: ควรเป็น Virtual functions *can* be overridden)
- Destructor สามารถ override ได้
- Overriding ยังเรียกว่า late binding
- ฟังก์ชันที่จะถูก override จะนำหน้าด้วยคีย์เวิร์ด 'virtual' ในคลาสฐาน
- ที่อยู่ของอ็อบเจกต์ของคลาสจะถูกมอบหมายให้พอยน์เตอร์ซึ่งฟังก์ชันถูกเรียกโดยพอยน์เตอร์
- เมื่อนิยามฟังก์ชัน จะนำหน้าด้วยคีย์เวิร์ด 'virtual' ในคลาสหลัก
- ฟังก์ชันเดียวกันจะถูกนิยามใหม่ในคลาสลูกโดยใช้คีย์เวิร์ด 'override' (แก้จาก 'out')