Was ist das virtuelle Vererbung?

virtuelles 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. Um die virtuelle Vererbung in C ++ zu deklarieren, wird das Schlüsselwort "virtueller" verwendet. Sowohl die Superklasse als auch die Unterklasse müssen virtuelle Methoden mit dem "virtuellen" Schlüsselwort deklarieren. Dies gibt dem C ++ - Compiler mit, dass die Superklasse unvollständig ist und Informationen von der Unterklasse erhalten müssen, um sie abzuschließen. Die Verwendung der Unterklasse, um die Superklasse zu vervollständigenDie gleiche Basisklasse, und stattdessen kümmert sich der C ++ - Compiler darum, zu bestimmen, was Teile mit jedem Objekt gehen.

Da eine virtuelle Basisklasse für die virtuelle Vererbung erforderlich ist, können globale Funktionen in C ++ 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 globale Funktionen und virtuelle Vererbung sich gegenseitig ausschließen. Globale Funktionen können theoretisch in virtuellen Funktionen verwendet werden, aber das Gegenteil funktioniert möglicherweise nicht immer.

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

ANDERE SPRACHEN

War dieser Artikel hilfreich? Danke für die Rückmeldung Danke für die Rückmeldung

Wie können wir helfen? Wie können wir helfen?