Consider:
class A : public B, public C
{
virtual int lock();
};
what happens if both B::lock and C::lock exist as virtual functions? we can override them both with one function... but what if they are interfaces that do different things and happen to use the same name?
Suggestion, specific override specifier:
virtual int lock_mutex() override(int B::lock());
virtual int lock_device() override(int C::lock());
I'd suggest a different syntax:
class A : public B, public C
{
virtual int B::lock() override;
virtual int C::lock() override;
};