Força Derivada de Classe para chamar a função base
-
19-09-2019 - |
Pergunta
Se eu derivar uma classe de outra e substituir uma função, posso chamar a função base ligando para Base::myFunction()
dentro da implementação de myFunc
na classe derivada.
No entanto, existe uma maneira de definir no meu Base
Classe de que a função base é chamada em algum caso, também sem que a chamasse explicitamente na função substituída? (antes ou depois da função derivada executada)
Ou melhor ainda, se eu tenho uma função virtual no meu virtual Base
classe e duas funções privadas implementadas before()
e after()
, é possível definir no Base
classe que antes e depois da função em qualquer classe derivada disso Base
A classe é chamada, before()
e after()
será chamado?
Obrigado!
Solução
No, this is not possible.
But you can simulate it by calling a different virtual function like so:
class Base
{
public:
void myFunc()
{
before();
doMyFunc();
after();
}
virtual void doMyFunc() = 0;
};
Outras dicas
You're trying to prevent a derived class from overloading/overriding a method in the base. You can encourage it by marking methods as 'not overridable' (depending on the language), but there's always a way around it.
In other words, you can't force someone to use your class in a particular way, only tell them the way it should be used.
Answering for C++, you cannot have an inherited function "invisibly" called in the way you want.
The only methods that call down through inherited classes are constructors and destructors.