Eu correrei o risco de declarar o óbvio: você chama a função, se definida na classe base, está automaticamente disponível na classe derivada (a menos que seja private
).
Se houver uma função com a mesma assinatura na classe derivada, você pode desambiguá-la adicionando o nome da classe base seguido por dois pontos base_class::foo(...)
. Observe que, diferentemente de Java e C #, o C ++ não possui uma palavra-chave para "a classe base" ( super
ou base
), pois o C ++ suporta herança múltipla, o que pode levar à ambiguidade.
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'
}
};
Aliás, você não pode derivar diretamente da mesma classe duas vezes, pois não haverá como se referir a uma das classes base sobre a outra.
class bottom : public left, public left { // Illegal
};