Ich habe eine Basisklasse und eine Klasse erben Basis. Die Basisklasse verfügt über mehrere virtuelle Funktionen, die von der geerbten Klasse überschrieben werden können. Die virtuellen Funktionen in der Basisklasse verfügen jedoch über Code, der ausgeführt werden muss, bevor die geerbten Klassenüberschreibungen aufgerufen werden. Gibt es eine Möglichkeit, dass ich die virtuellen Funktionen der Basisklassen zuerst aufrufen kann, dann die geerbten Klassenüberschreibungen. Ohne einen Aufruf von base.function().Call-Base-Funktion dann geerbte Funktion
Ich weiß, ich kann einfach zwei Funktionen machen, eine, die aufgerufen wird, die andere virtuelle. Aber gibt es eine Möglichkeit, dass ich dieselben Namen behalten kann? Ich weiß, dass ich einige Dinge ändern muss.
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(); */ }
}
ähnliche Frage here.
Gibt es eine Möglichkeit, dies zu tun, ohne zwei Funktionen in der Basisklasse zu machen?oder zumindest den gleichen Namen haben? – Dave
@Dave: Nein, es gibt keine Möglichkeit, eine überschriebene Basismethode vor oder nach dem virtuellen Methodenaufruf magisch aufzurufen. Sie müssen es in irgendeiner Weise teilen. (Wenn Sie es teilen, können Sie auch erzwingen, dass eine überschreibende Methode die überschriebene Basismethode aufruft, zusätzlich zu etwas vor und nach der geschützten Methode.) – dtb
Dies wird auch als nicht-virtuelles Interface idiom - http: // de. wikibooks.org/wiki/More_C%2B%2B_Idioms/Non-Virtual_Interface – sll