La fuerza derivada de clase para llamar a la función de base
-
19-09-2019 - |
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!
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.