Tengo una clase base y una base de clases heredadas. La clase base tiene varias funciones virtuales que la clase heredada puede anular. Sin embargo, las funciones virtuales en la clase base tienen un código que DEBE ejecutarse antes de que se llame a las anulaciones de clases heredadas. ¿Hay alguna forma de que pueda llamar primero a las funciones virtuales de las clases base y luego anular las clases heredadas? Sin hacer una llamada a base.function().Función de base de llamadas y luego función heredada
Sé que puedo simplemente hacer dos funciones, una que es llamada, la otra virtual. Pero, ¿hay alguna manera de que pueda mantener los mismos nombres? Sé que podría necesitar cambiar algunas cosas.
class myBase
{
public virtual myFunction()
{ /* must-run code, Called first */ }
}
class myInherited : myBase
{
public override myFunction()
{ /* don't use base.myFunction();,
called from base.myFunction(); */ }
}
pregunta similares here.
¿Hay alguna manera de hacer esto sin hacer dos funciones en la clase base?o al menos hacer que tengan el mismo nombre? – Dave
@Dave: No, no hay forma de llamar mágicamente a un método base anulado antes o después de la llamada al método virtual. Tienes que dividirlo de alguna manera. (Si lo divide, también puede exigir que un método de anulación invoque el método base anulado, además de hacer algo antes y después del método protegido). – dtb
También conocido como idioma de interfaz no virtual - http: // en. wikibooks.org/wiki/More_C%2B%2B_Idioms/Non-Virtual_Interface – sll