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

klasse in andere klasse instanzieren

 

ROIIOR
Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 18.01.16
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 27.06.2016, 11:14     Titel: klasse in andere klasse instanzieren
  Antworten mit Zitat      
Hallo zusammen,

könnte jemand mir sagen wie ich eine Klasse in andere klasse instazieren kann.?

vielen Dank

ROIIOR
Private Nachricht senden Benutzer-Profile anzeigen


punkNgrind
Forum-Century

Forum-Century


Beiträge: 136
Anmeldedatum: 10.03.11
Wohnort: Hamburg
Version: R2014b
     Beitrag Verfasst am: 27.06.2016, 12:30     Titel:
  Antworten mit Zitat      
Vielleicht verstehe ich dein Problem nicht ganz, aber ich würde sagen so:

Erstellen der Klasse A:
Code:

classdef classA
 
  properties
    x = 0;
  end
 
  methods
  end
 
end
 


Instanz der Klasse A in B erstellen:

Code:

classdef classB
 
  properties (Access = private)
    y = 0;
  end
 
  methods
   
    function result = addYToX(obj, Y, X)
      obj.y = Y;
      InstanceClassA = classA;                % Instanz von Klasse A in B erstellen
      InstanceClassA.x = X;                    % Instanz verwenden
      result = obj.y + InstanceClassA.x;   % Instanz verwenden
     
    end
  end
 
end
 


Aufruf der Klasse B:
Code:

>> test = classB

test =

  classB with no properties.

>> test.addYToX(1,2)

ans =

     3
 


Macht so natürlich kein Sinn, aber es geht ja um das Prinzip.
Private Nachricht senden Benutzer-Profile anzeigen
 
ROIIOR
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 18.01.16
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 27.06.2016, 13:04     Titel:
  Antworten mit Zitat      
vilen Dank für die schnelle Antwort,

aber muss man kein Konstruktur definieren, wo (obj) als rüchgabe wert ist?


Grüß
ROIIOR
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: 27.06.2016, 13:08     Titel:
  Antworten mit Zitat      
Hallo,

wenn kein Konstruktor definiert ist, wird der Default-Konstruktor angewendet, der ein leeres Objekt erstellt.

Die kurze Antwort auf deine Frage wäre: so, wie du das außerhalb der Klasse auch machst.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 18.01.16
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 27.06.2016, 13:25     Titel:
  Antworten mit Zitat      
bei mir hat nicht funktioniert, er kennt nicht die Funktion addYtoX


>> Test = classB;
>> Test.addYtoX(2,3)
No appropriate method, property, or field addYtoX for class classB.
Private Nachricht senden Benutzer-Profile anzeigen
 
ROIIOR
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 18.01.16
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 27.06.2016, 13:28     Titel:
  Antworten mit Zitat      
ohhhh sorry ich habe den fehler gefunden.
ich habe die fkt falsch geschrieben Smile

aber danke
Private Nachricht senden Benutzer-Profile anzeigen
 
ROIIOR
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 18.01.16
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 27.06.2016, 13:49     Titel:
  Antworten mit Zitat      
könnten Sie mir bitte diese gleiche beispweiel aber dieses mal mit konstruktor
damit ich die Unterschied merken kann. weil ich diese satz 'Die kurze Antwort auf deine Frage wäre: so, wie du das außerhalb der Klasse auch machst. ' nicht verstanden habe was sie damit meinen

vielen Dank

ROIIOR
Private Nachricht senden Benutzer-Profile anzeigen
 
punkNgrind
Forum-Century

Forum-Century


Beiträge: 136
Anmeldedatum: 10.03.11
Wohnort: Hamburg
Version: R2014b
     Beitrag Verfasst am: 28.06.2016, 08:49     Titel:
  Antworten mit Zitat      
Code:

classdef classA
 
  properties
    x = 0;
  end
 
  methods
    function obj = classA()
      % Constructor
      display('Constructor classA');
    end
  end
end
 


Code:

classdef classB
 
  properties (Access = private)
    y = 0;
  end
 
  methods
    function obj = classB()
      % Constructor
      display('Constructor classB');
    end
   
    function result = addYToX(obj, Y, X)
     
      InstanceClassA = classA;              % Instance of ClassA
      %% Check numbers of inputs
      switch nargin
        case 3                              % (obj, Y and X)
          %% All Paramters
          obj.y = Y;                        % New Value for Y
          InstanceClassA.x = X;             % New Value for X
          result = obj.y + InstanceClassA.x;
        case 2                              % (obj and Y)
          %% X is missing
          obj.y = Y;                        % New Value for Y
          result = obj.y + InstanceClassA.x;
        case 1                              % (only obj)
          %% X and Y is missing  
          result = obj.y + InstanceClassA.x;
      end
    end
  end
end
 


Code:

>> test = classB;
Constructor classB
>> test.addYToX(1,2)
Constructor classA

ans =

     3

>> test

test =

  classB with no properties.

>> test.addYToX(7)
Constructor classA

ans =

     7

>> test.addYToX();
Constructor classA
>> test

test =

  classB with no properties.
 


Achtung, dies sind Value-Klassen, deshalb bleiben die Werte bei dem Aufruf test.addYToX mit weniger als zwei Parametern auch nicht gespeichert.

Dies sagt dann auch, die Ausgabe:
Code:

test =

  classB with no properties.
 


Aber in den Unterschied von Handle- und Value-Klassen und ihre richtige Nutzung habe ich mich noch nicht richtig eingelesen, da müssen dann andere weiterhelfen.
Private Nachricht senden Benutzer-Profile anzeigen
 
ROIIOR
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 23
Anmeldedatum: 18.01.16
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 28.06.2016, 09:18     Titel:
  Antworten mit Zitat      
vielen vielen Dank für die tolle Erklärung
Private Nachricht senden Benutzer-Profile anzeigen
 
punkNgrind
Forum-Century

Forum-Century


Beiträge: 136
Anmeldedatum: 10.03.11
Wohnort: Hamburg
Version: R2014b
     Beitrag Verfasst am: 28.06.2016, 10:03     Titel:
  Antworten mit Zitat      
Kein Problem. Freu mich, wenn es weiter geholfen hat. Smile

Wenn du es soweit verstanden hast, denke bitte daran den Status des Threads (ganz oben) zu ändern.
Private Nachricht senden Benutzer-Profile anzeigen
 
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.