Heim > Artikel > Backend-Entwicklung > Neue Funktionen von C++11 – Polymorphismus und virtuelle Funktionen, Überschreibungsspezifizierer
Polymorphismus und virtuelle Funktionen
Polymorphismus ist eines der wichtigen Merkmale von C++ und auch für Anfänger schwer zu verstehen. Schauen wir uns zunächst ein einfaches Beispiel an:
Der Code ist nach den eigenen Worten des Autors sehr einfach. Beschreiben Sie die wichtigsten Punkte von der Definition bis zur Funktion Polymorphismus im obigen Code. Es sollte nicht mehr einfacher sein, ausgehend von der Hauptfunktion:
Zeiger auf die Basisklasse
Diese drei Punkte sind notwendige Bedingungen und keiner von ihnen darf fehlen.
Der obige Code enthält noch weitere interessante Dinge, obwohl er die Ergebnisse nicht beeinflusst, ist es dennoch gut, ihn zu verstehen. Beim Neudefinieren (Überschreiben) der virtuellen Funktion in der Basisklasse in der abgeleiteten Klasse:
virtuelles Schlüsselwort ist nicht erforderlich
Abdeckungsfehler
Überschreibung von Virtuelle Funktion Es ist erforderlich, dass die Signaturen der beiden Funktionen konsistent sind. Zum Beispiel der folgende Code:
Da die Signatur von sub2::f1 nicht mit der Signatur von base::f1 übereinstimmt, kann kein Polymorphismus erreicht werden.
Vielleicht denken Sie, dass dieser Fehler zu offensichtlich ist und niemals passieren wird. Das liegt daran, dass die Memberfunktion in diesem Beispiel zu einfach ist. In der tatsächlichen Entwicklung wird mit der Erweiterung des Entwicklungsumfangs die Vererbungsbeziehung der Klassen immer tiefer und die Parameter der Mitgliedsfunktionen werden immer umfangreicher. Wir stoßen häufig auf die Signaturen und Überschreibungen von Mitgliedsfunktionen, die in abgeleiteten Klassen definiert sind. Die Signatur des Objekts ist inkonsistent, was zu einem Fehler beim Überschreiben führt.
Und das Schlimmste ist, dass diese Art von Fehler keine Kompilierungsfehler erzeugt und nicht leicht zu finden ist.
Override-Spezifizierer
Um dieses Problem zu lösen, wurde in C++11 eine Methode eingeführt: Verwenden Sie die Override-Spezifikation, wenn Sie Override-Funktionen in abgeleiteten Klassen deklarieren und definieren Symbole:
Wenn der Compiler aufgrund des klaren Zwecks der Funktion keine virtuelle Funktion mit derselben Signatur in der Basisklasse finden kann, tritt ein Kompilierungsfehler auf.
Der Autor ist der Meinung
Es ist besser, die Funktionen der Sprache selbst zu nutzen und keine Möglichkeit aufzugeben, Fehler automatisch zu erkennen. Dies sollte zur Gewohnheit von C++-Programmierern werden. Es kann auch als Verkörperung des Handwerksgeistes angesehen werden.
Verwandte Artikel:
Sprechen Sie ausführlich über C++11-Final- und Override-Spezifizierer
Auto und neue Funktionen in C++ 11 Decltype-Unterschiede und Zusammenhänge
Ähnliche Videos:
Neue Funktionen von Android 6.0
Das obige ist der detaillierte Inhalt vonNeue Funktionen von C++11 – Polymorphismus und virtuelle Funktionen, Überschreibungsspezifizierer. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!