Pregunta

Si derivar una clase de otra y sobrescribir una función, puedo llamar a la función de base llamando Base::myFunction() dentro de la implementación de myFunc en la clase derivada.

Sin embargo- no es una forma de definir en mi clase Base que la función de base se denomina, en cualquier caso, también sin tener que llama explícitamente en la función sobrescribe? (Ya sea antes o después de la función derivada ejecutado)

O mejor aún, si tengo una función virtual en mi clase Base virtual, y dos implementado funciones privada before() y after(), es posible definir en la clase Base que antes y después de la función de cualquier clase derivada de esta Base clase se llama, serán llamados before() y after()?

Gracias!

¿Fue útil?

Solución

No, esto no es posible.
Sin embargo, se puede simular mediante una llamada a una función virtual diferente, así:

class Base
{
public:
  void myFunc()
  {
    before();
    doMyFunc();
    after();
  }

  virtual void doMyFunc() = 0;
};

Otros consejos

Usted está tratando de evitar que una clase derivada de la sobrecarga / sustituir un método en la base. Usted puede alentar a ella por métodos de marcado como 'no reemplazable' (dependiendo del idioma), pero siempre hay una manera de evitarlo.

En otras palabras, no se puede obligar a nadie a utilizar su clase de una manera particular, sólo se les diga la forma en que se debe utilizar.

Contestación para C ++, no se puede tener una función heredada "invisible" denominado en la forma que desee.

Los únicos métodos que llaman a través de clases heredadas son constructores y destructores.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top