Wenn Sie sagen,
"virtuell" scheint eine verwirrende willkürliche Wahl für das zu sein, was wirklich "übersteuerbar" ist.
Ich stimme zu, dass "überschreibbar" ein besseres Keyword sein könnte, aber ich denke nicht, dass "virtuell" willkürlich ist. Ich denke, es gibt einen guten, historisch plausiblen Grund dafür, es zu benutzen.
Ein Beispiel für C ++:
%Vor%
%code% ruft echten Code auf, daher glaube ich nicht, dass %code% das richtige Wort ist.
Aber welcher Code wird es anrufen? Nur weil %code% ein Zeiger auf %code% ist, heißt es nicht
konnte nicht auf etwas verweisen, das von %code% erbt.
Sehen Sie, der Aufruf ist virtualisiert. Genau wie virtuelle Speicheradressen zugeordnet sind
Zu realen Speicheradressen werden virtuelle Funktionsaufrufe auf reale Funktionen abgebildet
Aufrufe, über die virtuelle Methodentabelle.
Laut Google bedeutet virtuell "fast oder fast wie beschrieben, aber nicht vollständig oder nach strenger Definition". Ich denke, das ist ein ziemlich anständiges Adjektiv, wenn man bedenkt, dass ein virtueller Methodenaufruf fast wie ein realer Methodenaufruf ist, abgesehen von einigen Umleitungen.
Stellen Sie sich vor, wenn virtuelle Methodenaufrufe eine brandneue Idee sind. Du könntest dir vorstellen
das in der berauschenden Aufregung, eine neue Sprache zu schaffen, die sie hat
direkt in eingebaut (!!!), würde man natürlich dazu neigen, dieses Schlüsselwort zu verwenden.
Schlechte %code% ist ein unschuldiger Zuschauer in all dieser Aufregung. Verwendung der
%code% keyword sagt dem Compiler, dass Aufrufe an die Methode virtualisiert werden, aber es gibt eindeutig nichts "virtuelles" oder "abstraktes"
etwa %code% selbst. Es ist nur der arme Trottel, der als Standard zurückbleibt
Methode in der Methodentabelle.
Nun, das ist nur Vermutung, aber vielleicht gibt es einen Grund, dass C ++ den Begriff verwendet
"pure virtual" zum Beschreiben einer Methode, die überschreiben soll . Vielleicht konkret
Objekte des Typs %code% verwenden keine virtuellen Methodenaufrufe, auch nicht für "virtuelle" Methoden.
Reine virtuelle Methoden müssten natürlich immer durch a aufgerufen werden
virtuelle Methodentabelle.
___ qstnhdr ___ Warum verwenden wir das Schlüsselwort "virtual" (etymologisch)? [geschlossen]
___ answer5001998 ___
Betrachten Sie die folgende Codezeile:
%Vor%
Wo base eine Instanz von Base oder einer seiner untergeordneten Klassen ist.
Wenn Methode () eine virtuelle Methode ist, rufen wir nicht direkt die Funktion Method () auf. Stattdessen werden wir auf die tatsächliche Funktion "umgeleitet", abhängig davon, welche Basis ist.
Das Wort 'virtual' versucht also nicht, die Funktion selbst zu beschreiben, die in der Basisklasse deklariert ist. Es beschreibt tatsächlich die Tatsache, dass wir den Aufruf der Funktion abstrahieren wollen.
Ich denke, der Begriff "virtuell" ist nicht real. Zum Beispiel im Hinblick auf den virtuellen Speicher, der zu einem bestimmten Zeitpunkt durch auf realen Speicher abbildet, aber tatsächlich ein Platzhalter ist, bis das Mapping benötigt wird.
In ähnlicher Weise ist eine virtuelle Funktion ein Platzhalter, der sich irgendwann einer reellen Funktion zuordnet.
Auch wenn Sie die (etwas kindische) "vorgetäuschte" Definition verwenden, macht es Sinn:
%Vor%
In all diesen Fällen ist das "Virtuelle" etwas, das nicht real ist. Ihre Verwendung wird in etwas Wirkliches übersetzt (Emulation der Maschine, Zuordnung der Speicheradressen durch eine MMU, Aufruf einer klassenspezifischen tatsächlichen -Funktion anstelle der virtuellen usw.).
>
Die meisten Modifikatoren sind für mich sinnvoll - abstrakt, geschützt usw. Aber "virtuell" scheint eine verwirrende willkürliche Wahl für das zu sein, was wirklich "übersteuerbar" ist.
"Virtuell" in der Computertechnik (virtuelle Maschine, virtueller Speicher) scheint eine abstrakte Darstellung von etwas zu bedeuten. Ich vermute, dass dies aus der Optik stammt, wo ein virtuelles Bild (normalerweise in * vert) selbst aus dem mittelalterlichen lateinischen virtuālis stammt, was "effektiv" bedeutet.
Es scheint mir also sinnvoller zu sein, wenn die "virtuelle" Methode in der Informatik die übergeordnete ist, nicht die zu überwindende.
Vielleicht verpasse ich etwas Grundlegendes über "virtuell", kann jemand mehr Licht auf die Gründe dafür werfen, warum es ausgewählt wurde?
___ tag123languageagnostic ___ Verwenden Sie dieses Tag zum PROGRAMMIEREN VON FRAGEN, die unabhängig von einer bestimmten Programmiersprache sind.
___ tag123virtual ___ Ein erweiterbares oder simuliertes Artefakt
___