J'ai une classe de base et une base héritière de classe. La classe de base a plusieurs fonctions virtuelles que la classe héritée peut remplacer. Cependant, les fonctions virtuelles dans la classe de base ont un code qui DOIT s'exécuter avant que les substitutions de classe héritées ne soient appelées. Est-il possible que je puisse d'abord appeler les fonctions virtuelles des classes de base, puis les remplacements de classe hérités. Sans faire un appel à base.function().Fonction de base d'appel puis fonction héritée
Je sais que je peux simplement faire deux fonctions, l'une qui est appelée, l'autre virtuelle. Mais y a-t-il un moyen de garder les mêmes noms? Je sais que je vais devoir changer certaines choses.
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(); */ }
}
Une question similaire here.
Y at-il un moyen que je peux faire cela sans faire deux fonctions dans la classe de base?ou à tout le moins les faire avoir le même nom? – Dave
@Dave: Non, il n'y a aucun moyen d'appeler magiquement une méthode de base surchargée avant ou après l'appel de la méthode virtuelle. Vous devez le diviser d'une manière ou d'une autre. (Si vous le divisez, vous pouvez également appliquer qu'une méthode de substitution appelle la méthode de base substituée, en plus de faire quelque chose avant et après la méthode protégée.) – dtb
Ceci est également connu sous le nom d'interface idiome non-virtuelle - http: // en. wikibooks.org/wiki/More_C%2B%2B_Idioms/Non-Virtual_Interface – sll