BlackBoard (http://www.black-board.net/index.php)
- Design, Programmierung & Entwicklung (http://www.black-board.net/board.php?boardid=55)
-- Programmieren (http://www.black-board.net/board.php?boardid=4)
--- Java Operatoren überladen (http://www.black-board.net/thread.php?threadid=21955)


Geschrieben von Compuholic am 06.03.2006 um 15:50:

  Operatoren überladen

Hallo,

ich schreibe gerade an einer Java-Klasse die Matrizenoperationen durchführen kann. Daher wäre es sehr bequem, wenn ich z.B. den Multiplikationsoperator überladen könnte. Leider habe ich noch nie gesehen, wie das in Java funktioniert und habe auch nichts entsprechendes gefunden.

Vielleicht kann mir jemand von euch helfen.

Danke



Geschrieben von Champus am 06.03.2006 um 16:33:

  RE: Operatoren überladen

Zitat:
Original von Google
"In Java ist daher das Überladen der Operatoren bisher nicht möglich."
"Im Gegensatz zu C++ können in Java keine Operatoren überladen werden."
"kurz und knapp Nein, in Java kann man nur Methoden überladen."



Geschrieben von Misel am 06.03.2006 um 17:21:

erstaunt

Hab eben auch mal nen Kommilitonen gefragt, der kann sich auch nicht erinnern, das jemals gehabt zu haben. :o



Geschrieben von Compuholic am 06.03.2006 um 17:46:

 

@Corvus

Das wichtige Wort hier lautet: "bisher". Da Wikipedia nicht immer auf dem laufenden ist und wir auch schon lange über Java 1.3 hinaus sind, hätte sich da mitlerweile einiges tun können.



Geschrieben von Champus am 06.03.2006 um 17:51:

 

Es sind aber recht aktuelle Zitate die ich oben zusammen gefasst habe, das von dir zitierte ist auch nicht aus der Wikipedia sondern aus einem E-Book was auch recht aktuell ist.



Geschrieben von phlox81 am 06.03.2006 um 17:53:

 

Das wird sich so schnell nicht ändern,
da man im Javaumfeld sowas lieber mit Methoden macht.
Eines der Argumente die gegen das Überladen spricht
aus sicht der Javaianer ist, das man dadurch eine Mehrdeutigkeit
erzeugt. Man kann z.b. den +operator als -operator implementieren
etc. Das man das mit Methoden auch kann, ist ein anderes Thema *g*

phlox



Geschrieben von Compuholic am 07.03.2006 um 12:09:

 

Passt zwar nicht so wirklich in diesen Thread:

Ich habe da ein seltsames Problem mit dem Überladen von Konstruktoren. Beim Kompilieren bekomme ich den folgenden Fehler:
Zitat:
dMatrix.java:132: cannot find symbol
symbol : constructor dMatrix(int,int)
location: class dMatrix
result = new dMatrix(getDimension('M'), B.getDimension('
N'));
^
1 error


So wie ich diese Meldung verstehe, findet er keinen Konstruktor mit den Parametern (int, int). Den habe ich aber wie folgt definiert:

code:
1:
2:
3:
4:
5:
6:
	public void dMatrix(int N, int M)
	{
		//If Dimension of the Array is given, create a correspondig Null-Matrix
		m = new double[N][M];
		DimensionN = N;
		DimensionM = M;


Ich habe schon die Klammerung gecheckt. Die sollte stimmen. Der Compiler zeigt mir auch sonst keinen Fehler an. Ich habe keine Ahnung woran das liegen könnte. Jemand eine Idee?



Geschrieben von Romanticus am 07.03.2006 um 14:01:

 

Worauf wendest du denn die erste getDimension() an? Ist B ein Object der Klasse dMatrix? es ist ein bißchen zu wenig Code vorhanden, um dir sagen zu können woran das liegt. Un eins kann ich mit sicherheit sagen - es liegt nicht am construktor, sondern an den Parametern, die du übergibst. Überprüfe mal, was die Methoden returnen.

mfg
Romanticus

P.S. hab gerade die Prüfung in Info3 geschrieben - alles nur Java smile



Geschrieben von phlox81 am 07.03.2006 um 14:50:

 

Er findet den Konstruktor nicht.
Was du da hast ist ne Methode, Konstruktoren haben
keinen Rückgabetypen.
Korrekt wäre also:
code:
1:
public dMatrix(int N, int M){....


phlox



Geschrieben von Romanticus am 07.03.2006 um 14:57:

 

fuck smile wieso ist mir das nicht aufgefallen? smile )



Geschrieben von Compuholic am 07.03.2006 um 19:50:

 

@phlox81: Ich bin mir nicht ganz sicher, was Du meinst. Ich habe doch geschrieben "public void dMatrix" void ist ja kein Rückgabewert. Es funktioniert ja auch bei allen anderen Konstrukturen. Ich habe es auch mal ausprobiert und es weggelassen. Das ändert nichts am Fehler.

@Romanticus: das erste getDimension bezieht sich auf die aktuelle Instanz. Korrekt wäre also this.getDimension. Aber da man das nicht hinschreiben muß, habe ich das mal getrost weggelassen. Und B ist natürlich auch vom Typ dMatrix.

Ich habe mal den Code der Klasse angehängt:



Geschrieben von Black Star am 07.03.2006 um 20:33:

 

Die voids muessen bei allen Konstruktoren weg.
Und die Methode isWithinBounds muss ein return-Statement ausserhalb des if-else haben.
Danach kompiliert er bei mir fehlerfrei.



Geschrieben von Compuholic am 07.03.2006 um 20:44:

 

Danke an alle.

War mir vollkommen neu, daß es einen Unterschied macht, ob man void schreibt oder einfach keinen Rückgabetyp angibt. Bisher hat es immer funktioniert.



Geschrieben von Misel am 07.03.2006 um 21:47:

 

Zitat:
Original von Compuholic
Danke an alle.

War mir vollkommen neu, daß es einen Unterschied macht, ob man void schreibt oder einfach keinen Rückgabetyp angibt. Bisher hat es immer funktioniert.


naja, void ist Rückgabetyp vom Typ "nichts". Während gar nix eben überhaupt kein Rückgabetyp ist. großes Grinsen



Geschrieben von Romanticus am 09.03.2006 um 10:03:

 

Zitat:
Original von Misel
Zitat:
Original von Compuholic
Danke an alle.

War mir vollkommen neu, daß es einen Unterschied macht, ob man void schreibt oder einfach keinen Rückgabetyp angibt. Bisher hat es immer funktioniert.


naja, void ist Rückgabetyp vom Typ "nichts". Während gar nix eben überhaupt kein Rückgabetyp ist. großes Grinsen


Void ist gar kein Rückgabetyp, deswegen muss man bei methoden mit void eben kein return benutzen. Es liegt viel mehr an der Syntax, Konstruktoren-definitionen dürfen eben keine Angabe über den Rückgabetyp haben, weil sie nie eine Rückgabe haben.

mfg
ich


Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH