|
|
Operator Überladung für verschiedene Datentypen |
|
Larvae |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 08.06.2016, 08:42
Titel: Operator Überladung für verschiedene Datentypen
|
|
|
|
|
Hallo,
Ich schreibe zurzeit an einer Ausarbeitung für eine Vorlesung. Dabei geht es um Verschiedene Berechnungen mit Bezierfunktionen. Für mehr Übersichtlichkeit würde ich dabei gerne ein paar Teile des Codes in Klassen kapseln.
Meine Bezierfunktion stellt dabei ein Volumen dar, daher benötige ich hier bereits eine 3D-Matrix, um alle Kontrollpunkte zu speichern, und jeder Punkt hat xyz-Koordinaten.
Um jetzt nicht mit einer 4D-Matrix arbeiten zu müssen wollte ich eine Klasse für den 3D-Punkt erstellen. Funktioniert an sich auch soweit, allerdings würde ich gerne die Operatoren angemessen überladen.
Folgendes Verhalten würde ich gerne erhalten:
Für Addition von zwei Punkten Funktioniert alles. Aber für die Multiplikation bekomme ich immer die Fehlermeldung, die Operation sei für struct nicht definiert. Wenn ich das Array mit den Koordinaten direkt anspreche funktioniert es. Es funktioniert auch, wenn ich zwei Punkte miteinander multiplizieren will (abgesehen davon, dass dafür die Implementierung falsch ist und ich darüber dann eine Fehlermeldung erhalte)
Kann mir jemand sagen, wie ich die Operationen korrekt überlade, damit ich das gewünschte verhalten bekomme? Also z.B. für die zu überladende Funktion Datentypen für die Argumente Vorgebe oder ähnliches. Würde das selbe gerne noch mit anderen Klassen erreichen.
Grüße
Thorsten
|
|
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 08.06.2016, 17:51
Titel:
|
|
Hallo,
stelle doch bitte deine Points3D zur Verfügung.
Grüße,
Harald
|
|
|
Larvae |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 09.06.2016, 08:02
Titel:
|
|
Hi,
meine Klasse sieht momentan so aus:
times und mtimes sehen momentan gleich aus, weil ich, als es nicht funktioniert hat, sichergehen wollte, dass ich nicht die Falsche der beiden genommen habe. Also hab ich einfach beide probiert.
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 09.06.2016, 21:51
Titel:
|
|
Hallo,
die ersten beiden Zeilen funktionieren bei mir.
Dann ist P2 allerdings ein struct, was auch nicht wirklich verwundert. Du hast in deinen arithmetischen Operatoren nämlich nie angegeben, dass P ein Point3D sein soll.
Eine Notlösung:
Sinnvoller wäre es allerdings, den Klassenkonstruktor so zu definieren, dass auch ein Vektor von Koordindaten übergeben werden kann. Dann kann man den Konstruktor in den arithmetischen Operatoren aufrufen.
Grüße,
Harald
|
|
|
Larvae |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 16.06.2016, 10:03
Titel:
|
|
Hi,
Danke für den Hinweis. Aber ich bin mir nicht sicher, ob ich Dich richtig verstehe. Habe deine Version für die Multiplikation eingefügt, aber bekomme trotzdem den Fehler. Hab es auch mit der Vektor-Version des Constructors versucht, da bekomme ich die gleiche Fehlermeldung. Mein Code sieht jetzt so aus:
main.m:
Point3D.m:
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 16.06.2016, 11:42
Titel:
|
|
Hallo,
bei mir läuft dein Code fehlerfrei durch und liefert ein Point3D-Objekt P3.
Falls du mehrere Versionen hast: bist du sicher, dass die richtige ausgeführt wird?
In älteren Versionen von MATLAB muss man nach Veränderung von Klassen
eingeben, damit die aktuelle Version genutzt wird.
Grüße,
Harald
|
|
|
Larvae |
Gast
|
|
Beiträge: ---
|
|
|
|
Anmeldedatum: ---
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 16.06.2016, 12:07
Titel:
|
|
Hi
Danke für die Hilfe, jetzt scheint es zu funktionieren.
Hatte den geposteten Code gekürzt und nur das drinnen gelassen, was scheinbar nicht funktioniert hat. Das funktioniert bei mir auch. Anscheinend war in der Funktion uminus ein Fehler, und das hat irgendwie dazu geführt, dass ich in der anderen Funktion eine Fehlermeldung für die Multiplikation bekommen habe. Matlab hat aber immer nur gesagt, dass die Multiplikation nicht definiert sei, uminus selbst hatte funktioniert.
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|