|
|
function mit Call by Value und Refernce (Klassen) |
|
Baki |
Forum-Newbie
|
|
Beiträge: 7
|
|
|
|
Anmeldedatum: 28.02.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 13.03.2014, 16:04
Titel: function mit Call by Value und Refernce (Klassen)
|
|
Hallo,
Es sei drei Klassen A, B und C gegeben.
Funktion1 erstellt Elemente aus der drei Klassen.
Funktion2 soll nur einen Test durchführen. (Sprich mit den Input-Variablen arbeiten, aber nicht ändern. Call by Value denke ich, oder?)
In beiden genannten Funktionen, wird eine dritte Funktion verwendet, die auch die Elemente a,b und c verändern. Ist da was zu beachten, da in Funktion2 diese Änderungen nur für ein Testfall benötigt werden, aber nicht gespeichert werden soll?
Eine alternative und nicht schöne Lösung wäre, die Elemente der Klassen nach Aufruf der Funktion2 erneut zu erstellen... :/
|
|
|
|
|
denny |
Supporter
|
|
Beiträge: 3.853
|
|
|
|
Anmeldedatum: 14.02.08
|
|
|
|
Wohnort: Ulm
|
|
|
|
Version: R2012b
|
|
|
|
|
|
Verfasst am: 13.03.2014, 16:40
Titel:
|
|
Hallo
Eigentlich macht Matlab immer Call by Reference Funktion-Aufrufe.
Der Unterschied liegt nur in Datentyp Verwaltung:
Bei Standard-Datentypen wird wirklich erst bei einer Änderung eine Copy in Speicher erstellt
Bei Instanzen, welche von Handle abgeleitet werden, wird dagegen keine Copy erstellt.
Aber du hast doch in anderen Beitrag erwähnt, dass die Klassen von matlab.mixin.Copyable abgeleitet werden?
Dann kannst du eine Copy von Objekt erstellen und diese an Funktion2 übergeben, dann bist auf der sicheren Seite
Zuletzt bearbeitet von denny am 13.03.2014, 16:44, insgesamt einmal bearbeitet
|
|
|
Verschoben: 13.03.2014, 16:41 Uhr von denny Von Programmierung nach Objektorientierte Programmierung |
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 13.03.2014, 16:41
Titel:
|
|
Hallo,
die entscheidende Frage ist, ob die Klassen "normale" Klassen sind oder ob sie von der Handle-Klasse vererbt sind.
In ersterem Fall hat man (aus Sicht von MATLAB-Nutzern) ganz normales Call-By-Value, im zweiten Fall hat man Call-By-Reference. Bei Handle-Klassen lässt sich das Call-By-Reference - Verhalten nur insofern abschwächen, dass man bei Vererbung von matlab.mixin.Copyable mit der Copy-Methode eine Kopie des Objekts erstellen und diese Kopien dann an die dritte Funktion schicken kann.
Grüße,
Harald
|
|
|
Baki |
Themenstarter
Forum-Newbie
|
|
Beiträge: 7
|
|
|
|
Anmeldedatum: 28.02.14
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 17.03.2014, 10:29
Titel:
|
|
Hallo denny und Harald,
Ich erhalte folgende Fehlermeldung, wenn ich copy nutze:
Undefined function 'copy' for input arguments of type 'Klasse'.
Meine Klassen waren alle von der Handle-Klasse vererbt, somit Call-By-Reference. Jetzt habe ich alle drei Klassen zu 'normale' Klassen gemacht und es funktioniert.
Danke euch beiden!
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.495
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 17.03.2014, 10:40
Titel:
|
|
|
|
Andy386 |
Forum-Guru
|
|
Beiträge: 485
|
|
|
|
Anmeldedatum: 24.06.09
|
|
|
|
Wohnort: ---
|
|
|
|
Version: 7.1/8
|
|
|
|
|
|
Verfasst am: 16.06.2014, 08:27
Titel:
|
|
|
|
|
|
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.
|
|