Скрытие имени имеет смысл, потому что оно предотвращает двусмысленности в разрешении имен.
Рассмотрим этот код:
class Base
{
public:
void func (float x) { ... }
}
class Derived: public Base
{
public:
void func (double x) { ... }
}
Derived dobj;
Если Base::func(float)
не был скрыт Derived::func(double)
в Derived, мы вызывали бы функцию базового класса при вызове dobj.func(0.f)
, хотя поплавок можно было бы продвигать до двойного.
Ссылка: http://bastian.rieck.ru/blog/posts/ 2016 / name_hiding_cxx /