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

Leeres Objekt erzeugen

 

Nicolas S.
Forum-Century

Forum-Century


Beiträge: 143
Anmeldedatum: 15.07.09
Wohnort: ---
Version: R2014a/b
     Beitrag Verfasst am: 24.09.2009, 14:52     Titel: Leeres Objekt erzeugen
  Antworten mit Zitat      
Hallo zusammen,
ich suche eine Möglichkeit, ein leeres Objekt einer eigenen Klasse zu erzeugen, in etwa so:
Code:

classdef foo < handle
   
    properties (SetObservable = true)
        dofs
    end
   
    methods
        % Konstruktor
        function obj = foo(inp)
            if isempty(inp)
                obj = [];  % <-- geht natuerlich nicht
            else
                obj.dofs = inp;
            end
        end % Ende Konstruktor
    end % Ende methods
   
end
 

Es ist klar, daß obiger Code nicht funktionieren kann, da [] kein Objekt der Klasse foo ist. Aber wie geht's?

Grüße
Nicolas

P.S.: Wahrscheinlich muß ich dann auch isempty für die Klasse foo überladen werden?
_________________

--
The programmer suggested it.
Private Nachricht senden Benutzer-Profile anzeigen


Nicolas S.
Themenstarter

Forum-Century

Forum-Century


Beiträge: 143
Anmeldedatum: 15.07.09
Wohnort: ---
Version: R2014a/b
     Beitrag Verfasst am: 24.09.2009, 15:07     Titel:
  Antworten mit Zitat      
Ein fieser Hack sähe so aus:
Code:

classdef foo < handle
   
    properties (SetObservable = true)
        dofs
    end
   
    properties (Hidden = true, SetAccess = private, GetAccess = private)
        empty
    end
   
    methods
        % Konstruktor
        function obj = foo(inp)
            if isempty(inp)
                obj.empty = true;
            else
                obj.empty = false;
                obj.dofs = inp;
            end
        end % Ende Konstruktor
       
       
        function out = isempty(obj)
            out = obj.empty;
        end
       
        function disp(obj)
            if isempty(obj)
                disp('[]');
            else
                disp(obj.dofs);
            end
        end
       
    end % Ende methods
end
 

Aber gibt es auch eine saubere Möglichkeit?
_________________

--
The programmer suggested it.
Private Nachricht senden Benutzer-Profile anzeigen
 
Titus
Forum-Meister

Forum-Meister


Beiträge: 871
Anmeldedatum: 19.07.07
Wohnort: Aachen
Version: ---
     Beitrag Verfasst am: 28.09.2009, 14:28     Titel:
  Antworten mit Zitat      
Hallo,
ganz sicher bin ich nicht, was Du mit leeres Object meinst:
- ein Array der Größe nx0? Es gibt ein Kapitel, welches die Methode "empty" beschreibt (suche nach "Creating Empty Arrays", der erste hit)
- oder dass man unterscheiden kann innerhalb des Konstruktors nach "echtem" Konstruktor und "Defaultkonstruktor"? Das geschieht normalerweise über
Code:
function obj = foo(p1, p2, p3) % z.B.
if nargin==0
  % default constructor, setze alle properties auf default werte
else
  % "normaler" constructor
  obj.p1 = p1; % etc.
end
 


Titus
Private Nachricht senden Benutzer-Profile anzeigen
 
Nicolas S.
Themenstarter

Forum-Century

Forum-Century


Beiträge: 143
Anmeldedatum: 15.07.09
Wohnort: ---
Version: R2014a/b
     Beitrag Verfasst am: 28.09.2009, 15:40     Titel:
  Antworten mit Zitat      
Hallo Titus,

danke für die Antwort. "If everything else fails, read the manual!" - Ich hätte es beherzigen sollen.

Der Defaultkonstruktor sollte tatsächlich ein leeres Objekt zurückliefern.

Damit lautet das, was ich wirklich wollte so:
Code:

classdef foo < handle
   
    properties (SetObservable = true)
        dofs
    end
   
    methods
        % Konstruktor
        function obj = foo(varargin)
           
            if nargin == 0
            % Wenn leerer Input leeres Objekt zurückliefern
                obj = obj.empty;
            elseif nargin == 1
            % Input in dofs speichern
                obj.dofs = varargin{1};
            else
                error('Too many input arguments');
            end
        end % Ende Konstruktor
    end % Ende methods
end
 


Danke und viele Grüße
Nicolas
_________________

--
The programmer suggested it.
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.