#include <iostream>

struct Base
{
    virtual void f(){std::cout << "Base";}
    virtual ~Base() = default;
};

struct Derived: Base
{
    virtual void f(int){std::cout << "Derived";} // we hide the Base::f()
};

int main()
{
    Base* pBase = new Derived;
    pBase -> f(); // calls Base::f()
    delete pBase;
}