The intended implementation is that derived classes will implement the same functions (e.g. name hiding) and those will be appropriately called through using the derived class type. Methods that are not re-implemented/hidden will retain their default implementation, which is mostly trivial.