Estaba leyendo las preguntas más frecuentes sobre C++ 0x de Stroustrup y me quedé atascado con este código. Considere el siguiente códigoReglas de alcance al heredar - C++
struct A
{
void f(double)
{
std::cout << "in double" << std::endl;
}
};
struct B : A
{
void f(int)
{
std::cout << "in int" << std::endl;
}
};
int main()
{
A a; a.f(10.10); // as expected, A.f will get called
B b; b.f(10.10); // This calls b.f and we lose the .10 here
return 0;
}
Mi opinión fue cuando se hereda un tipo, a todos los miembros protegidas públicas y serán accesibles desde la clase derivada. Pero según este ejemplo, parece que estoy equivocado. Esperaba que b.f llame a las clases base f. Me dieron el resultado esperado por el cambio de la clase derivada como
struct B : A
{
using A::f;
void f(int)
{
std::cout << "in int" << std::endl;
}
};
Preguntas
- ¿Por qué no funciona en el primer código?
- ¿Qué sección en el estándar de C++ describe todas estas reglas de alcance?
pregunta qood .. + 1 – Warrior