Heim  >  Artikel  >  Backend-Entwicklung  >  Neue Funktionen von C++11 – Polymorphismus und virtuelle Funktionen, Überschreibungsspezifizierer

Neue Funktionen von C++11 – Polymorphismus und virtuelle Funktionen, Überschreibungsspezifizierer

php是最好的语言
php是最好的语言Original
2018-08-01 14:11:432384Durchsuche

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:

Neue Funktionen von C++11 – Polymorphismus und virtuelle Funktionen, Überschreibungsspezifizierer

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:

  1. Zeiger auf die Basisklasse

  2. Objekt, das auf die abgeleitete Klasse zeigt

  3. Die abgeleitete Klasse überschreibt die in der Basisklasse definierte virtuelle Funktion

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:

  1. virtuelles Schlüsselwort ist nicht erforderlich

  2. Es ist nicht erforderlich, die Funktion als öffentlich zu deklarieren

Abdeckungsfehler

Überschreibung von Virtuelle Funktion Es ist erforderlich, dass die Signaturen der beiden Funktionen konsistent sind. Zum Beispiel der folgende Code:

Neue Funktionen von C++11 – Polymorphismus und virtuelle Funktionen, Überschreibungsspezifizierer

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:

Neue Funktionen von C++11 – Polymorphismus und virtuelle Funktionen, Überschreibungsspezifizierer

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!

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