Function Overriding (การทับฟังก์ชัน) เป็นฟีเจอร์ที่พบบ่อยที่สุดใน C++ โดยพื้นฐาน Function Overriding หมายถึงการนิยามฟังก์ชันซ้ำซึ่งมีอยู่ใน Base Class ไปอีกครั้งใน Derived Class ดังนั้น Function Signature จะเหมือนกัน แต่ Behavior (พฤติกรรม) จะต่างกัน
แต่อาจมีสถานการณ์ที่โปรแกรมเมอร์ทำผิดพลาดขณะ Override ฟังก์ชันนั้น เช่น ถ้า Signature ไม่เหมือนกัน มันจะถูกถือเป็นฟังก์ชันอื่น ไม่ใช่ Overridden Method ในกรณีนั้น เราสามารถใช้คีย์เวิร์ด override ได้ คีย์เวิร์ดนี้ถูกนำเข้ามาใน C++11 เมื่อคอมไพเลอร์พบคีย์เวิร์ดแบบนี้ มันจะเข้าใจว่านี่คือเวอร์ชัน Override ของคลาสเดียวกัน
มาดูตัวอย่างเพื่อเข้าใจแนวคิด
ตัวอย่าง
#include <iostream> using namespace std; class BaseClass{ public: virtual void display() { cout << "Displaying from Base Class\n"; } }; class DerivedClass : public BaseClass{ public: void display() { cout << "Displaying from Derived Class\n"; } }; main() { BaseClass *b_ptr; b_ptr = new DerivedClass(); b_ptr->display(); }
ผลลัพธ์
Displaying from Derived Class
ในกรณีนี้โปรแกรมทำงานได้ดี เพราะ Signature เหมือนกัน ในตัวอย่างต่อไป Signature จะต่างกัน สำหรับคีย์เวิร์ด override จะสร้าง Error
ตัวอย่าง
#include <iostream> using namespace std; class BaseClass{ public: virtual void display() { cout << "Displaying from Base Class\n"; } }; class DerivedClass : public BaseClass{ public: void display(int x) override{ cout << "Displaying from Derived Class\n"; } }; main() { BaseClass *b_ptr; b_ptr = new DerivedClass(); b_ptr->display(); }
ผลลัพธ์
[Error] 'void DerivedClass::display(int)' marked override, but does not override
ในกรณีนี้ โปรแกรมทำงานได้ดี เพราะ Signature เหมือนกัน ในตัวอย่างต่อไป Signature จะต่างกัน สำหรับคีย์เวิร์ด override จะสร้าง Error