10 Unterschied zwischen virtueller Funktion und rein virtueller Funktion in C++

Contents

Was ist eine virtuelle Funktion?

Eine virtuelle Funktion ist eine Memberfunktion, die innerhalb einer Basisklasse deklariert und von einer abgeleiteten Klasse neu definiert wird. Wenn Sie mit einem Zeiger oder einer Referenz auf die Basisklasse auf ein abgeleitetes Klassenobjekt verweisen, können Sie eine virtuelle Funktion für dieses Objekt aufrufen und die Version der Funktion der abgeleiteten Klasse ausführen. Virtuelle Funktionen stellen sicher, dass die richtige Funktion für ein Objekt aufgerufen wird, unabhängig vom Ausdruck, der zum Ausführen des Funktionsaufrufs verwendet wird.

Virtuelle Funktionen werden ‘spät’ aufgelöst. Wenn die fragliche Funktion in der Basisklasse “virtuell” ist, wird die Implementierung der Funktion der am meisten abgeleiteten Klasse gemäß dem tatsächlichen Typ des Objekts aufgerufen, auf das verwiesen wird, unabhängig vom deklarierten Typ des Zeigers oder der Referenz. Wenn es nicht „virtuell“ ist, wird die Methode „früh“ aufgelöst und gemäß dem deklarierten Typ des Zeigers oder der Referenz ausgewählt.

Dieses Konzept ist ein wichtiger Teil des (Laufzeit-) Polymorphie-Teils der objektorientierten Programmierung (OOP). Kurz gesagt, eine virtuelle Funktion definiert eine auszuführende Zielfunktion, aber das Ziel ist möglicherweise zur Kompilierzeit nicht bekannt.

Was Sie über virtuelle Funktionen wissen müssen

  • Eine virtuelle Funktion ist eine Elementfunktion in einer Basisklasse, die in einer abgeleiteten Klasse neu definiert werden kann.
  • Virtuelle Funktion’ hat ihre Definition in der Basisklasse.
  • Alle abgeleiteten Klassen können die virtuelle Funktion der Basisklasse überschreiben oder nicht.
  • Wenn die abgeleitete Klasse die virtuelle Funktion nicht neu definieren (überschreiben) kann, kann sie die virtuelle Funktion der Basisklasse verwenden.
  • Die Basisklasse, die die virtuelle Funktion enthält, kann instanziiert werden, dh ihr Objekt kann erstellt werden.
  • Klassen mit virtuellen Funktionen sind nicht abstrakt.
  • Die Auflösung des Funktionsaufrufs erfolgt zur Laufzeit.
  • Es wird verwendet, um den Compiler anzuweisen, eine dynamische Verknüpfung oder späte Bindung für die Funktion durchzuführen.

Was ist eine rein virtuelle Funktion?

Eine rein virtuelle Funktion ist eine virtuelle Funktion, die innerhalb der Klasse keine Definition hat. Ihre Definition liegt nur in der abgeleiteten Klasse, dh die abgeleitete Klasse muss zwingend die Definition einer reinen virtuellen Funktion liefern. Mit anderen Worten, es kann als leere Funktion betrachtet werden, was bedeutet, dass die rein virtuelle Funktion keine Definition relativ zur Basisklasse hat.

Eine Klasse mit rein virtueller Funktion kann nicht verwendet werden, um eigene direkte Objekte zu erzeugen. Das bedeutet, dass die Klasse eine rein virtuelle Funktion enthält, dann können wir das Objekt dieser Klasse nicht erstellen. Dieser Klassentyp wird als abstrakte Klasse bezeichnet. Programmierer müssen die rein virtuelle Funktion in der abgeleiteten Klasse neu definieren, da sie in der Basisklasse keine Definition hat.

Was Sie über die reine virtuelle Funktion wissen müssen

  • Eine rein virtuelle Funktion ist eine Elementfunktion in einer Basisklasse, deren Deklaration in einer Basisklasse bereitgestellt und in einer abgeleiteten Klasse implementiert wird.
  • Pure Virtual Function hat keine Definition in der Basisklasse.
  • Alle abgeleiteten Klassen müssen die virtuelle Funktion der Basisklasse überschreiben.
  • Wenn die abgeleitete Klasse die rein virtuelle Funktion nicht definiert; Es wird kein Fehler ausgegeben, aber die abgeleitete Klasse wird zu einer abstrakten Klasse.
  • Die Basisklasse enthält eine rein virtuelle Funktion, dh eine abstrakte Klasse kann nicht instanziiert werden, da eine abstrakte Klasse nicht vollständig definiert ist.
  • Die Basisklasse, die eine rein virtuelle Funktion enthält, wird abstrakt.
  • Abstrakte Klassen werden hauptsächlich für Upcasting verwendet, damit ihre abgeleiteten Klassen ihre Schnittstelle verwenden können.

osky