Diskussion:Virtuelle Methode

aus Wikipedia, der freien Enzyklopädie
Letzter Kommentar: vor 2 Monaten von Uncopy in Abschnitt Erstes Beispiel
Zur Navigation springen Zur Suche springen

"In einigen Fällen ist es allerdings wünschenswert, bereits existierende Methoden abzuändern, d.h. sie neu zu schreiben. In diesem Fall spricht man von Überlagerung (Java) oder Überschreiben (C++, Delphi)." Müßte es nicht "Überladen (Java)" statt "Überlagerung (Java)" heißen? --84.137.14.27 21:39, 16. Aug 2006 (CEST)

Nein, überladen ist es, wenn eine Funktion mit gleichem namen für verschiedene parametertypen existiert.

Sicher, dass das richtig ist?[Quelltext bearbeiten]

Im Artikel steht: "In objektorientierten Programmiersprachen wie z. B. C++,C#, Delphi oder Java ist es nur möglich, Klassen zu erzeugen, indem man sie von anderen Klassen ableitet." Das stimmt meiner Meinung nach nicht. Ich kann doch auch eine Klasse schreiben die nicht von einer anderen erbt. (nicht signierter Beitrag von 92.231.106.138 (Diskussion) 22:19, 24. Jul 2010 (CEST))

Verstehe ich auch nicht. Erstelle ich in C++ eine Klasse class MeineKlasse{ int meineVariable } ist dies meiner Meinung nach eine eigene Klasse, welche nicht von einer anderen Klasse abgeleitet ist und auch über keine anderen Variablen oder Methoden verfügt, als die Variable int MeineVariable. -- 89.0.69.249 11:19, 7. Dez. 2010 (CET) Nachtrag: wow, da hat wohl jemand, während ich hier geschrieben habe den Satz schon angepasst, merkwürdig... -- 89.0.69.249 11:21, 7. Dez. 2010 (CET)Beantworten

In Java ist jede Klasse, die nicht abgeleitet ist, implizit von java.lang.Object abgeleitet. Das kann man sich z.B. mit this.getClass().getSuperclass().getName() anzeigen lassen. 217.229.55.225 10:33, 4. Mär. 2011 (CET)Beantworten

In der aktuellen Fassung ist die Ausschließlichkeit verschwunden, die für C++ falsch ist: Der C++-Standard verzichtet ausdrücklich auf eine einheitliche Basisklasse für alle Klassen. Bei den anderen Sprachen wird meines Wissens von einer gemeinsamen Basis abgeleitet, sofern die Spezifikation der Basisklasse fehlt. Ich würde das Thema daher als erledigt betrachten. --Uncopy (Diskussion) 10:33, 19. Feb. 2024 (CET)Beantworten

Erstes Beispiel[Quelltext bearbeiten]

Dieses main() würde doch genauso funktionieren, wenn es die Klasse "Tier" gar nicht gäbe.

In Java würde man in main() eine Referenzvariable vom Typ "Tier" anlegen und sie mit einer Referenz auf ein "Wolf"-Objekt belegen; dann kann auf der "Tier"-Variablen die essen()-Methode aufgerufen werden, und tatsächlich ausgeführt wird die essen()-Methode von "Wolf".

Irgendwie muss das doch in C++ auch gehen, sonst wäre die Polymorphie massiv eingeschränkt.

88.67.170.91 12:08, 28. Jun. 2015 (CEST)Beantworten

Du hast völlig recht mit deiner Bemerkung. Ich habe das Beispiel angepasst. (Dabei ist das essen dem fressen gewichen.) Allerdings kann man in C++ Objekte auch per Wert erzeugen (was die automatische Bereinigung einschließt), deshalb habe ich eine allgemein nutzbare Funktion hinzugefügt, die auf der Referenz (Tier& tier) arbeitet.
So lässt sich die Idee hinter der Polymorphie hoffentlich besser nachvollziehen.
--Uncopy (Diskussion) 11:06, 19. Feb. 2024 (CET)Beantworten

Virtuelle Destruktoren[Quelltext bearbeiten]

Das Beispiel zum Destruktor leuchtet mir nicht ein: Bei "delete b1;" steht "// Meist wird nur ~A() aufgerufen, da ~A() nicht virtuell", allerdings wird der Destruktor in class A als virtuell deklariert. --Xr~dewiki (Diskussion) 11:31, 22. Jul. 2015 (CEST)Beantworten