override (C++11) xác nhận rõ ràng một hàm ảo (virtual) trong lớp con đang ghi đè hàm ảo của lớp cha. Compiler sẽ báo lỗi nếu chữ ký không khớp.
Ví dụ đúng
#include <iostream>
using namespace std;
class Base {
public:
virtual void show() { cout << "Base\n"; }
};
class Derived : public Base {
public:
void show() override { cout << "Derived\n"; } // OK
};
int main() {
Base* ptr = new Derived();
ptr->show(); // Derived (động binding)
delete ptr;
return 0;
}
Ví dụ sai - Compiler báo lỗi
class Base {
public:
virtual void show() { cout << "Base\n"; }
};
class Derived : public Base {
public:
void show(int x) override { cout << "Derived\n"; } // LỖI!
// Chữ ký khác: Base::show() không có tham số
}
Lỗi compile
error: 'void Derived::show(int)' marked 'override', but does not override
Lợi ích
- Phát hiện sớm lỗi đánh máy tên hàm, sai tham số, sai const.
- Tăng tính đọc hiểu code: thấy
overridebiết ngay đây là ghi đè. - Giúp refactor an toàn: đổi chữ ký base → lỗi compile ở derived.
Từ khóa liên quan: final
finaltrên hàm ảo: ngăn chặn ghi đè tiếp.finaltrên class: ngăn chặn kế thừa.
class Base { virtual void foo() final; };
class Derived : Base { void foo(); } // LỖI: foo() is final