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!

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top