Mögliches Duplikat:
C++ statische virtuelle Mitglieder?
Können wir eine virtuelle statische Methode haben (in C++)? Ich habe versucht, den folgenden Code zu kompilieren:
#include <iostream>
using namespace std;
class A
{
public:
virtual static void f() {cout << "A's static method" << endl;}
};
class B :public A
{
public:
static void f() {cout << "B's static method" << endl;}
};
int main()
{
/* some code */
return 0;
}
aber der Compiler sagt, dass:
member 'f' cannot be declared both virtual and static
ich denke, die Antwort ist nein, aber warum?
danke, Ron
Nein. static
für eine Funktion in einer Klasse bedeutet, dass für die Funktion kein Objekt zum Bearbeiten erforderlich ist. virtual
bedeutet, dass die Implementierung vom Typ des aufrufenden Objekts abhängt. Für static gibt es kein aufrufendes Objekt. Daher ist es nicht sinnvoll, dass sowohl static
als auch virtual
dieselbe Funktion haben.
Denken Sie nicht, dass dies möglich ist, da Sie A::F();
aufrufen könnten, ohne das Objekt A zu haben. Es würde einen Widerspruch bedeuten, es virtuell und statisch zu machen.
Weil die Klasse keinen this
Zeiger hat. Darin befindet sich die Nachschlagetabelle für virtuelle Funktionen. Ein kurzer Blick auf Google kann Ihnen mehr über die virtuelle Funktionsnachschlagetabelle erzählen.
Nein, die Funktion static
ähnelt der globalen Funktion, befindet sich jedoch auch im Klassennamensraum. virtual
impliziert Vererbung und Neuimplementierung in abgeleiteten Klassen - Sie können die 'globale' Funktion nicht neu implementieren.