im Allgemeinen objektorientierte Programmierung, ist es möglich?
Dupe von stackoverflow.com/questions/584664/… was selbst eine Dupe von stackoverflow.com/questions/442026/… ist
– paxdiablo
11. Mai 2010 um 3:32 Uhr
In einer Klasse können mehrere Methoden den gleichen Namen haben, sich aber unterscheiden
Parametertypen
Anzahl Parameter
Reihenfolge der in der Methode deklarierten Parameter
In Abhängigkeit von den für die Methode bereitgestellten Parametern bestimmt der Compiler zur Laufzeit, welche Version der Methode auszuführen ist.
Eine überladene Methode kann unterschiedliche Rückgabetypen haben oder nicht. Der Rückgabetyp allein reicht dem Compiler jedoch nicht aus, um zu bestimmen, welche Methode zur Laufzeit ausgeführt werden soll.
“In der Laufzeit bestimmt der Compiler” AFAIK in der Laufzeit, während das Programm läuft, kann der Compiler nichts bestimmen. und Methodenüberladung ist ein Beispiel dafür Kompilierzeit-Polymorphismus.
– Aritra Chakraborty
11. Dezember 2014 um 20:04 Uhr
@ Dunith Dhanushka, warum sagst du Reihenfolge der Parameter? void fun(int a, char a){ } void fun(char a, int a){ } es funktioniert nicht
– Asif Mushtaq
5. Juni 2015 um 11:08 Uhr
Tatsächlich ist die Reihenfolge der Parameter in C++ unbekannt, also -1.
– Silidron
2. Oktober 2017 um 14:23 Uhr
Eines sei hier noch ergänzt: Das ist in Rust möglich! hat mich umgehauen, als ich es zum ersten Mal dort verwendet sah
– Lars Frölich
1. November 2021 um 7:36 Uhr
Sanshayan
Methodenüberladung bedeutet, zwei oder mehr Methoden mit demselben Namen in derselben Klasse mit unterschiedlichen Argumenten zu haben. Der Vorteil des Überladens von Methoden besteht darin, dass Sie damit Methoden implementieren können, die dieselbe semantische Operation unterstützen, sich jedoch in Argumentnummer oder -typ unterscheiden.
Wichtige Punkte
Überladene Methoden MÜSSEN die Argumentliste ändern
Überladene Methoden KÖNNEN den Rückgabetyp ändern
Überladene Methoden KÖNNEN den Zugriffsmodifikator ändern
Überladene Methoden KÖNNEN neue oder breiter geprüfte Ausnahmen deklarieren
Eine Methode kann in derselben Klasse oder in einer Unterklasse überladen werden
Funktionieren die Szenarien „Überladene Methoden KÖNNEN den Rückgabetyp ändern“ und „•Überladene Methoden KÖNNEN den Zugriffsmodifikator ändern“? Nach meiner praktischen Erfahrung funktioniert es nicht. Bsp.: public class myclass { public int c = 0; öffentlicher String Add(int a, int b) { c=a + b; Rückgabe c.ToString(); } public int Add(int a, int b) { c = a + b; gib c zurück; } }
– SHEKHAR-BLATT
28. August 2015 um 11:26 Uhr
@SHEKHARSHETE Aber die Argumentliste ist in Ihrem Beispiel unverändert, sie muss geändert werden, andere sind optional
– jblixr
26. März 2016 um 5:11 Uhr
Amarnath Rayudu
Es ist nicht möglich, eine Methode mit gleichen und unterschiedlichen Parametern zu haben return Typ. Compiler throws error im folgenden Fall (Duplicate-Methode).
Methode 1:
public int calc(int a, int b, int c)
Methode 2:
public String calc(int e, int f, int g)
Fehler geworfen:
method calc(int, int, int) is already defined
Es ist auch möglich, Rückgabetypen von generischen Methoden zu überladen. Dies kann beispielsweise in C# erfolgen.
– Anderson Green
15. Juni 2021 um 20:34 Uhr
Keine Methodenüberladung ist bei unterschiedlichem Rückgabetyp nicht möglich, da der Compiler nicht herausfinden kann, welche Methode er aufrufen muss.
In diesem Fall wird der Compiler nie wissen, welche Methode aufgerufen werden soll.
Hinweis – Das Überladen von Methoden wird während der Kompilierzeit überprüft
Dustin
Solange du nicht so etwas machst:
int foo (int i, int has_default=0);
double foo (long l);
/* Skipping to the function call. */
foo (1);
du solltest in Ordnung sein. Der obige Code verursacht Probleme, da er möglicherweise versucht, eine der beiden Funktionen aufzurufen. Es kann wirklich schlimm werden, wenn Sie C++ verwenden und Zeiger anstelle von Primitives oder Referenzen zurückgeben …
Beleuchtung
Kurz gesagt, das Überladen des Rückgabetyps erfordert ein leistungsfähiges Typisierungssystem, das die zu verwendende Funktion aus dem Aufrufergebnis ableiten kann.
Die Familie Haskell und ML kann diese Aufgabe erfüllen.
Es ist nicht richtig, das Überladen so zu definieren, dass es auf das Ändern der Argumente beschränkt ist, da das Ändern des Rückgabetyps genügend Informationen für den Compiler hinterlässt, um abzuleiten, welche Funktion verwendet werden soll.
13999900cookie-checkIst es möglich, unterschiedliche Rückgabetypen für eine überladene Methode zu haben?yes
Dupe von stackoverflow.com/questions/584664/… was selbst eine Dupe von stackoverflow.com/questions/442026/… ist
– paxdiablo
11. Mai 2010 um 3:32 Uhr