Skip to main content

Was ist virtuelle Vererbung?

Die virtuelle Vererbung ist eine Art von Vererbung, in der die Implementierung einer Superklasse unvollständig ist und eine Unterklasse für die vollständige Definition eines Objekts erforderlich ist.Diese Art der Vererbung kann in Verbindung mit einer einzelnen und mehreren Vererbung verwendet werden, wird jedoch am häufigsten in mehreren Vererbung verwendet.Jede Klasse, die von einer virtuellen Basisklasse erbt, wird zu einer direkten Unterklasse dieser Basisklasse.Eine virtuelle Basisklasse kann sich auf eine Unterklasse verlassen, um alle ihre Methoden zu implementieren. Dies ist jedoch keine Voraussetzung.

C ++ ist die am häufigsten bekannte Computersprache für die virtuelle Vererbung.Um die virtuelle Vererbung in C ++ zu deklarieren, wird das virtuelle Schlüsselwort verwendet.Sowohl die Superklasse als auch die Unterklasse müssen virtuelle Methoden mit dem virtuellen Schlüsselwort deklarieren.Dies teilt dem C ++ - Compiler mit, dass die Superklasse unvollständig ist und Informationen von der Unterklasse erhalten müssen, um sie zu vervollständigen.Wenn Sie die Unterklasse verwenden, um die Superklasse zu vervollständigenVererbung, globale Funktionen in C ++ können nicht virtuell deklariert werden.Dieser Vererbungsart kann nur verwendet werden, wenn sie an objektorientierte Programmierprinzipien (OOP) einhalten.Der Grund dafür ist, dass globale Funktionen nicht mit einer bestimmten Klasse in Verbindung gebracht werden und daher in der Regel selbst zusammenhängt.Ohne eine Superklasse und Unterklasse können die Vererbung nicht auftreten, sodass sich globale Funktionen und virtuelle Vererbung gegenseitig ausschließen.Globale Funktionen können theoretisch in virtuellen Funktionen verwendet werden, aber das Gegenteil funktioniert möglicherweise nicht immer.

Die virtuelle Vererbung wird verwendet, um viele Programmierprobleme zu lösen, und eine der nützlichsten ist die Auflösung der Mehrdeutigkeit.In mehreren Vererbung kann man eine Basisklasse A haben, die zwei Unterklassen b und c hat, und dann eine Klasse D, die aus beiden Klassen B und C erbt. Dieses Muster wird üblicherweise als Diamant des Todes bezeichnet, weil wenn Klassen A, B,und c alle haben Implementierungen derselben Methode, es ist für die Klasse D nicht möglich, zu bestimmen, welche Implementierung sie verwenden soll.Die virtuelle Vererbung löst dieses Problem, da die Implementierung der einzelnen Klassen unterschiedlich und daher eindeutig bleibt.Diese Unterscheidung wird von speziellen internen Objekten behandelt, die als virtuelle Tabellen (VTables) bezeichnet werden, die jeden Objekttyp verfolgen, diese Tabellen müssen jedoch nicht explizit von einem Programmierer manipuliert werden, da sie in die Sprache eingebaut sind.