Me arriesgaré a decir lo obvio: llama a la función, si está definida en la clase base, está automáticamente disponible en la clase derivada (a menos que sea private
).
Si hay una función con la misma firma en la clase derivada, puede desambiguarla agregando el nombre de la clase base seguido de dos puntos base_class::foo(...)
. Debe tener en cuenta que, a diferencia de Java y C #, C ++ no tiene una palabra clave para "la clase base" ( super
o base
) ya que C ++ admite la herencia múltiple, lo que puede generar ambigüedad.
class left {
public:
void foo();
};
class right {
public:
void foo();
};
class bottom : public left, public right {
public:
void foo()
{
//base::foo();// ambiguous
left::foo();
right::foo();
// and when foo() is not called for 'this':
bottom b;
b.left::foo(); // calls b.foo() from 'left'
b.right::foo(); // call b.foo() from 'right'
}
};
Por cierto, no puede derivar directamente de la misma clase dos veces, ya que no habrá forma de referirse a una de las clases base sobre la otra.
class bottom : public left, public left { // Illegal
};