Unterschied zwischen virtueller und reiner virtueller Funktion

Autor: Laura McKinney
Erstelldatum: 2 April 2021
Aktualisierungsdatum: 10 Kann 2024
Anonim
Events in Virtual Reality planen - XING Puls mit Michael Reiner
Video: Events in Virtual Reality planen - XING Puls mit Michael Reiner

Inhalt


Die virtuelle Funktion und die reine virtuelle Funktion sind die Konzepte des Laufzeitpolymorphismus. Der Hauptunterschied zwischenvirtuelle Funktion “ und "Reine virtuelle Funktion" ist, dass "virtuelle Funktion" ihre Definition in der Basisklasse hat und auch die übernehmenden abgeleiteten Klassen sie neu definieren. Die reine virtuelle Funktion ist in der Basisklasse nicht definiert, und alle vererbenden abgeleiteten Klassen müssen sie neu definieren.

Die virtuelle Funktion wird jedoch auch als dynamischer Versand und Laufzeitversand bezeichnet, da die aufgerufene Funktion in der Laufzeit entsprechend dem Typ des verwendeten Objekts angegeben wird.

Polymorphismus wird sowohl von den Sprachen C ++ als auch von Java unterstützt. In Java wird der Begriff "Überschreiben" anstelle von "virtuelle Funktion" verwendet, da die virtuelle Funktion der Begriff von C ++ ist.

  1. Vergleichstabelle
  2. Definition
  3. Hauptunterschiede
  4. Fazit

Vergleichstabelle

Grundlage für den VergleichVirtuelle FunktionReine virtuelle Funktion
BasicVirtuelle Funktion hat ihre Definition in der Basisklasse.Pure Virtual Function hat keine Definition in der Basisklasse.
Erklärungvirtueller Funktionsname (Parameterliste) {. . . . .};virtueller Funktionsname (Parameterliste) = 0;
Abgeleitete KlasseAlle abgeleiteten Klassen können die virtuelle Funktion der Basisklasse überschreiben oder nicht.Alle abgeleiteten Klassen müssen die virtuelle Funktion der Basisklasse überschreiben.
Bewirken

Virtuelle Funktionen sind hierarchischer Natur. Dies hat keine Auswirkungen auf die Kompilierung, wenn abgeleitete Klassen die virtuelle Funktion der Basisklasse nicht überschreiben.Wenn alle abgeleiteten Klassen die virtuelle Funktion der Basisklasse nicht überschreiben können, tritt der Kompilierungsfehler auf.
Abstrakte KlasseKein Konzept.Wenn eine Klasse mindestens eine rein virtuelle Funktion enthält, wird sie als abstrakt deklariert.


Definition der virtuellen Funktion

Das virtuelle Funktion ist die Mitgliedsfunktion der Basisklasse und wird durch die abgeleiteten Klassen neu definiert, die die Basisklasse erben. Es ist nicht erforderlich, dass alle vererbenden abgeleiteten Klassen die virtuelle Funktion neu definieren müssen. Sie wird nur von den abgeleiteten Klassen neu definiert, die möglicherweise ihre Funktion erfordern. Eine virtuelle Funktion wird erstellt, indem die Funktion in der Basisklasse deklariert wird, der das Schlüsselwort vorangestellt ist "Virtuell".

Erklärung:

Klassenbasis {public: virtual type funt_name (Parameterliste) {. . . }};

Die vererbenden abgeleiteten Klassen können die virtuelle Funktion ohne das Schlüsselwort "virtual" neu definieren. Abgeleitete Klassen definieren die virtuelle Funktion neu, um ihre Aufgabe zu erfüllen. Da die virtuelle Funktion in abgeleiteten Klassen neu definiert wird, gibt es mehrere Formen derselben Funktion. Welche Version der Funktion aufgerufen wird, hängt davon ab, auf welche Art von Objekt verwiesen wird, um diese Funktion aufzurufen.


Mehrstufige Vererbung

Bei der mehrstufigen Vererbung kann eine abgeleitete Klasse, die die virtuelle Funktion von ihrer Basisklasse geerbt hat, die virtuelle Funktion dennoch überschreiben, wenn sie selbst als Basisklasse für eine andere abgeleitete Klasse verwendet wird. Wenn also eine virtuelle Funktion vererbt wird, wird auch ihre virtuelle Natur vererbt.

Virtuelle Funktionen sind ebenfalls hierarchischer Natur, d. H. Wenn eine abgeleitete Klasse die von der Basisklasse geerbte virtuelle Funktion nicht überschreibt / neu definiert und wenn das Objekt der abgeleiteten Klasse diese virtuelle Funktion aufruft, wird die von der Basisklasse definierte virtuelle Funktion aufgerufen.

Definition der reinen virtuellen Funktion

Wie oben gezeigt, wird die von der Basisklasse definierte virtuelle Funktion verwendet, wenn die abgeleitete Klasse die virtuelle Funktion nicht überschreibt. Was aber, wenn die Basisklasse selbst die virtuelle Funktion nicht definiert? In vielen Fällen hat die Basisklasse keine Definition für die virtuelle Funktion, oder manchmal möchten Sie, dass alle abgeleiteten Klassen die virtuelle Funktion überschreiben müssen.

Um diese beiden Situationen zu bewältigen, unterstützt C ++ das Konzept vonReine virtuelle Funktion“. Eine "reine virtuelle Funktion" wird in der Basisklasse deklariert, hat jedoch keine Definition in der Basisklasse. Die reine virtuelle Funktion wird wie folgt deklariert.

virtueller Typ Funktionsname (Parameterliste) = 0;

Immer wenn eine virtuelle Funktion in der Basisklasse als "rein" deklariert wird, muss jede abgeleitete Klasse die rein virtuelle Funktion der Basisklasse zwingend überschreiben. Wenn die abgeleitete Klasse die rein virtuelle Funktion der Basisklasse nicht überschreibt, führt dies zu einem Kompilierungsfehler.

Abstrakte Klasse

Die Klasse, die mindestens eine reine Funktion enthält, heißt "abstrakte Klasse". Es können keine Objekte abstrakter Klassen erstellt werden, Sie können jedoch Verweise und Zeiger auf abstrakte Klassen erstellen. Auf Mitglieder der abstrakten Klassen kann über das Objekt der abgeleiteten Klassen zugegriffen werden, die die abstrakte Basisklasse erben.

Eine Klasse, die Sie als abstrakt deklarieren möchten, verwenden Sie das Schlüsselwort 'abstrakt' vor dem 'Klasse' Stichwort.

// zum Beispiel abstrakte Klasse Klassenname {. . virtueller Typ Funktionsname (Parameterliste) = 0; . . };

  1. Virtuelle Funktionen werden definitiv in der Basisklasse definiert und in der abgeleiteten Klasse neu definiert (überschrieben). Bei der reinen virtuellen Funktion hingegen ist die Basisklasse in der Basisklasse insbesondere nicht definiert
  2. Die abgeleitete Klasse definiert die virtuelle Funktion bei Bedarf neu (überschreibt sie), wohingegen die abgeleitete Klasse im Fall einer reinen virtuellen Funktion die reine virtuelle Funktion definitiv neu definieren muss.
  3. Wenn die abgeleitete Klasse die virtuelle Funktion nicht neu definiert (überschreibt), kann sie die virtuelle Funktion der Basisklasse verwenden. Umgekehrt tritt ein Kompilierungsfehler auf, wenn eine abgeleitete Klasse die reine virtuelle Funktion nicht überschreibt.
  4. Die Basisklasse, die die virtuelle Funktion enthält, kann instanziiert werden, d. H. Ihr Objekt kann erstellt werden. Im Gegensatz dazu kann die Basisklasse, die eine reine virtuelle Funktion enthält, d. H. Eine abstrakte Klasse, nicht instanziiert werden, da eine abstrakte Klasse nicht vollständig definiert ist.

Hinweis:
Der Prototyp der „virtuellen Funktion“ und der „reinen virtuellen Funktion“ bleibt im gesamten Programm gleich.

Fazit:

Die 'virtuellen Funktionen' und 'rein virtuelle Funktion' haben beide ihre Bedeutung, da in 'virtuellen Funktionen' alle abgeleiteten Klassen die virtuelle Funktion nicht neu definieren müssen und wir möchten, dass alle abgeleiteten Klassen die virtuelle Funktion, rein virtuell, neu definieren Funktion trifft dort am besten zu.