Heim >Backend-Entwicklung >C++ >Überschreiben oder nicht überschreiben: Ist die explizite Deklaration von „virtuell' erforderlich, wenn virtuelle Funktionen in C überschrieben werden?
Überschreiben virtueller Funktionen in abgeleiteten C-Klassen: Notwendigkeit oder nicht?
C stellt das Schlüsselwort „virtual“ bereit, um polymorphes Verhalten in abgeleiteten Klassen zu ermöglichen . Polymorphismus ermöglicht es verschiedenen Klassen, unterschiedliche Versionen derselben Funktion zu implementieren. Es stellt sich jedoch die Frage: Ist es notwendig, „virtuell“ anzugeben, wenn virtuelle Funktionen in abgeleiteten Klassen überschrieben werden?
Bedenken Sie die folgende Strukturdefinition:
struct A { virtual void hello() = 0; };
Dies definiert eine Zusammenfassung Basisklasse A mit einer rein virtuellen Funktion hello(). Schauen wir uns nun zwei Ansätze zum Überschreiben dieser Funktion in einer abgeleiteten Klasse B an:
Approach #1: struct B : public A { virtual void hello() { ... } };
Approach #2: struct B : public A { void hello() { ... } };
Die Frage ist: Gibt es einen Unterschied zwischen diesen beiden Ansätzen?
Antwort:
Die Antwort ist nein, es gibt keinen Unterschied im Verhalten zwischen diesen beiden Ansätzen. Es gibt jedoch einen subtilen Unterschied in ihrer Verwendung.
Im bereitgestellten Beispiel ist die überschriebene Funktion bereits in der Basisklasse A als virtuell deklariert. Daher werden beide Ansätze dies tun zu polymorphem Verhalten führen. Die Wahl zwischen den beiden Ansätzen hängt von der Klarheit und Konsistenz ab, die Sie in Ihrem Code bevorzugen.
Das obige ist der detaillierte Inhalt vonÜberschreiben oder nicht überschreiben: Ist die explizite Deklaration von „virtuell' erforderlich, wenn virtuelle Funktionen in C überschrieben werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!