Heim  >  Artikel  >  Backend-Entwicklung  >  Können C-Mitglieder sowohl statisch als auch virtuell sein?

Können C-Mitglieder sowohl statisch als auch virtuell sein?

DDD
DDDOriginal
2024-10-30 19:09:30423Durchsuche

Can C   Members Be Both Static and Virtual?

Können C-Mitglieder sowohl statisch als auch virtuell sein?

In C können Mitglieder nicht sowohl statisch als auch virtuell deklariert werden. Kompilieren einer Deklaration wie static virtual member(); führt zu einem Fehler.

Sie können jedoch einen ähnlichen Effekt mit den folgenden Methoden erzielen:

  • Separate Funktionen: Definieren Sie eine statische Funktion und eine nicht -statische virtuelle Funktion mit demselben Namen. Die nicht-virtuelle Funktion kann direkt in der Klasse aufgerufen oder in abgeleiteten Klassen überschrieben werden, während die statische Funktion Zugriff auf die Basisklassenimplementierung bietet.
  • Überladene Funktionen:Deklarieren Sie überladene Funktionen mit gleichen Namen (eine statische und eine nicht statische virtuelle). Der Compiler wählt die entsprechende Funktion basierend auf dem Aufrufkontext aus.

Hier ist ein Beispiel:

<code class="cpp">struct Object
{
    static const TypeInformation& GetTypeInformation();
    virtual const TypeInformation& GetTypeInformation() const;
};

struct SomeObject : public Object
{
    static const TypeInformation& GetTypeInformation();
    virtual const TypeInformation& GetTypeInformation() const override;
};</code>

Dadurch können Sie GetTypeInformation() sowohl für Objekte (Objekt-> ;GetTypeInformation()) und auf Klassen (SomeObject::GetTypeInformation()). Object::GetTypeInformation() gibt die Basisklassenimplementierung zurück, während SomeObject::GetTypeInformation() die überschriebene Version aufruft.

Das obige ist der detaillierte Inhalt vonKönnen C-Mitglieder sowohl statisch als auch virtuell sein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn