las funciones sobrecargadas están ocultas en la clase derivada

En una clase derivada Si redefino / sobrecarga un nombre de función de una clase Base,
entonces esas funciones sobrecargadas no son accesibles / visibles para la clase derivada.
¿¿Por qué es esto??

Si no sobrecargamos la función oveloaded de la clase base en la clase derivada, todas las versiones sobrecargadas de esa función estarán disponibles para la clase derivada
objetos, ¿por qué es esto?
Cuál es la razón detrás de esto. Si explicas esto en comstackdor y nivel de enlazador
eso será más útil para mí. ¿No es posible apoyar este tipo de scinario?

  Editado  
 Por examble:

 clase B  
 {  

   público: 
      int f () {}
      int f (cadena s) {}
 };

 clase D: público B
 {
    público:
     int f (int) {}
 };

 int main ()
 {
    D d;
    df (1);
    // df (cadena);  // oculto para D
 } 

 Ahora el objeto 'd' no puede acceder a f () y f (cadena). 

TTBOMK esto no tiene una razón técnica real, es solo que Stroustrup, al crear el lenguaje, consideró que este era el mejor predeterminado. (En esto, es similar a la regla de que los valores r no se unen implícitamente a referencias no const .)

Puede solucionarlo fácilmente al incluir explícitamente las versiones de clase base en el scope de la clase derivada:

 class base { public: void f(int); void g(int); }; class derived : public base { public: using base::f; void f(float); void g(float); // hides base::g }; 

o llamando al explícito:

 derived d; d.base::g(42); // explicitly call base class version 

Las funciones están disponibles, solo necesita llamarlas explícitamente:

 struct A { void f(){} }; struct B : public A { void f() {} }; int main() { B b; bf(); // call derived function bA::f(); // call base function }