Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Từ khóa override trong C++11


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 override biế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

  • final trên hàm ảo: ngăn chặn ghi đè tiếp.
  • final trê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