Перекрытие:
struct Base {
virtual void Foo() { std::cout << "Base\n"; };
};
struct Derived : Base {
virtual void Foo() { std::cout << "Derived\n"; };
// same name and signature as a virtual function in a base class,
// therefore this overrides that function. 'virtual' is optional in
// the derived class (but you should use it).
};
C ++ 11 добавляет способ обеспечить переопределение вашей функции:
struct Derived : Base {
virtual void Foo() override { std::cout << "Derived\n"; };
};
Теперь, если метод Foo
не переопределит что-то, вы получите ошибку.
struct Base {
void Foo();
};
struct Derived : Base {
virtual void Foo() override; // error, Derived::Foo is hiding Base::Foo, not overriding
};