I virtuelle Methode, die statische Methode der entsprechenden Klasse ruft:C++ Aufruf statische Funktion von virtueller Funktion
class A{
public:
static void bar() {std::cout<<"bar A\n";}
virtual void foo(){
//Some A work...
bar();
}
};
class B : public A{
public:
static void bar() {std::cout<<"bar B\n";}
virtual void foo() override {
//Some B work...
bar(); //prints bar B, as intended.
}
};
Aber jetzt will ich Klasse C haben, mit der Methode foo(), mit dem einzigen Unterschied C :: bar() aufgerufen werden am Ende:
class C : public A {
public:
static void bar() override {std::cout<<"bar C\n";}
virtual void foo(){
//Some **A** work...
bar(); //I want to print "bar C" here
}
}
Doch hier musste ich vollständige Kopie der Methode A :: foo Definition machen. Ich könnte auch eine virtuelle Dummy-Methode wie `virtual void callStaticBar() {bar();} einführen und sie in Klasse C mit demselben Text überschreiben. Gibt es einen eleganteren Weg, so etwas zu tun?
Ok, ich denke, ich sehe den Punkt. 'A :: bar()' und 'C :: bar()' sind völlig verschiedene Funktionen und sie haben denselben Namen und ändern diese Tatsache nicht. Ich konnte nicht hoffen, 'C :: other_bar()' von 'A :: foo()' zu nennen, ohne es zu überschreiben, also kann ich es auch nicht mit 'C :: bar()' tun. –