webentwicklung-frage-antwort-db.com.de

Können wir eine virtuelle statische Methode haben? (c ++)

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

40
Ron_s

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.

52

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.

4
RvdK

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.

2
EnabrenTane

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.

1
ks1322