WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Objekte

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.03.2013, 16:40     Titel: Objekte
  Antworten mit Zitat      
Hallo,

ich habe eine Klasse geschrieben, zu der Klasse existiert ein Konstruktur, diese initialisiert die Properties, wie kann ich jetzt die Klasse als Objekt speichern und es wo anders mit den Initialisierten Daten aufrufen. Es dient dabei als Objekt mit default Werten.

classdef myclass
properties

w
e
r
t
e

end
methods
function obj=a(obj,val)
bla
end
end
end


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.03.2013, 17:07     Titel:
  Antworten mit Zitat      
Hallo,

bei Objektorientierter Programmierung sollte man auf die Begrifflichkeiten achten.

Zitat:
wie kann ich jetzt die Klasse als Objekt speichern

Das macht keinen Sinn. Ich vermute, du willst ein Objekt aus der Klasse erzeugen, also eine Instanz der Klasse? Das ginge mit
Code:
objekt = Klassenname(Eingabeargumente)


Zitat:
es wo anders mit den Initialisierten Daten aufrufen

Das Objekt ist dann eine Variable, die du wie jede andere Variable verwenden und z.B. auch an andere Programme übergeben kannst.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.03.2013, 22:33     Titel:
  Antworten mit Zitat      
Hallo ich möchte meine Attribute samt ausgeben, dabei habe ich folgende funktion geschrieben


Code:
       function toString()
            display([ obj.a; obj.b; ]);
end
 



und wollte sie wie folgt aufrufen
Code:
objs = myclass(bla bla bla)

objs.toString


bekomme folgende Fehlermeldung:
Code:
Error using myclass/toString
Too many input arguments.

Error in testing (line 35)
objs.toString
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.03.2013, 23:09     Titel:
  Antworten mit Zitat      
Hallo,

eine Methode muss als erstes Eingabeargument immer das Objekt annehmen, worauf sie angewendet werden soll. In deinem Fall also
Code:


Im übrigen bitte ein neues Thema aufmachen, wenn die Frage nicht unmittelbar mit dem anfänglichen Thema zu tun hat.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.03.2013, 13:42     Titel:
  Antworten mit Zitat      
Hallo harald,

jetzt habe ich in der myclass folgende änderung gemacht, und zwar den obj Übergabeparameter mitgeschrieben, wie du das gesagt hast

Code:
   
function toString(obj)
display([ obj.a; obj.b; ]);
end
 


doch was mich verwirrt ist, jetzt der Funktionsaufruf in einer anderen Klasse.
Dabei versuch ich ein objekt von myclass zu machen, doch wie kann ich jetzt die Methode aufrufen
Code:
objs = myclass(bla bla bla)

objs.toString



Die fehlermeldung ist immer noch die gleiche
Code:
Error using myclass/toString
Too many input arguments.

Error in testing (line 35)
objs.toString
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.03.2013, 14:38     Titel:
  Antworten mit Zitat      
Hallo,

vermutlich war die Klassendefinition noch nicht aktualisiert. Das sollte allerdings auch unabhängig vom Aufruf in anderen Klassen ein Problem sein.

Probier in solchen Fällen
Code:


Falls das nicht weiterhilft, bitte ein lauffähiges Beispiel zum Testen zur Verfügung stellen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.03.2013, 15:06     Titel:
  Antworten mit Zitat      
aufruf in example.m

Code:
why = test('ichs', 'dus');
why.toString(why);


definition in test.m
Code:
classdef test
    properties
        ich;
        du;
    end

    methods
        function obj = test(ich, du)
                obj.ich        = ich;
                obj.du       = du;
        end
       
        function toString(obj)
            display([
                obj.ich; obj.du;
                ]);
        end
    end
end


Fehlermeldung
Code:
Error using test
Too many input arguments.
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.03.2013, 15:17     Titel:
  Antworten mit Zitat      
Hallo,

nun liegt es an dem falschen Aufruf. Entweder
Code:
why.toString

oder
Code:
toString(why)


Vielleicht mal einen Blick auf die Beispiele zur objektorientierten Programmierung werfen?
http://www.mathworks.de/de/help/mat.....oriented-programming.html

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.03.2013, 15:32     Titel:
  Antworten mit Zitat      
komisch bekomme trotzdem noch eine fehlermeldung

Code:
Error using vertcat
Dimensions of matrices being concatenated are not consistent.

Error in test/toString (line 14)
             display([

Error in test1 (line 2)
 why.toString;
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.03.2013, 15:43     Titel:
  Antworten mit Zitat      
Hallo,

weil du versuchst, zwei Strings unterschiedlicher Länge untereinander zu schreiben. Das hat aber nun nicht das geringste mit Klassen oder Objekten zu tun.

Eine Möglichkeit:
Code:
       function toString(obj)
            disp(obj.ich);
            disp(obj.du);
        end


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.03.2013, 18:12     Titel:
  Antworten mit Zitat      
Kann man in matlab wie in java die variablen als Zeichenketten verbinden..
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 28.03.2013, 19:50     Titel:
  Antworten mit Zitat      
Hallo,

Was genau meinst Du?
Code:
string1 = 'asd';
string2 = '123';
result = [string1, string2]

?! Oder willst Du Namen von Variablen dynamisch erzeugen? Im letzteren Fall: Bitte mache das nicht! Man handelt sich unnötig viel Ärger ein, wie in diesem Forum in hunderten Thread betreffend des EVAL-Befehls nachgelesen werden kann.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.03.2013, 20:03     Titel:
  Antworten mit Zitat      
Hallo,

in Ergänzung zu Jans Vorschlag seien Cell Arrays erwähnt:
Code:
result1 = {string1, string2}
result2 = {string1; string2}


Vielleicht hilft es, sich erstmal mit den Grundlagen von MATLAB auseinanderzusetzen, bevor man versucht, in die objektorientierte Programmierung einzusteigen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.03.2013, 22:41     Titel:
  Antworten mit Zitat      
ja ist ja gut ich wollte nur die attribute miteinander verknüpfen.
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.