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

Funktion der Superclass aus Unterklasse aufrufen

 

Daedalus
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 09.01.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2010, 20:31     Titel: Funktion der Superclass aus Unterklasse aufrufen
  Antworten mit Zitat      
Hi,

ich habe ein Problem mit Klassen. Bin blutiger Anfänger auf dem Gebiet. Ich will aus der Unterklasse eine Funktion der Hauptklasse aufrufen.
Es gibt die Klasse c_frequencyPoints mit Messdaten an Frequenzpunkten, und die Klasse c_measurementdata, welche allgemeine Informationen der Messungen enthält. In dieser Klasse ist auch eine Funktion setPlotMenu, welche mir von plots die menus erzeugt. Ich habe die mit in die Superclass mit rein, damit alle späteren Plots gleich aussehen, ohne das ich viel zaubern muss. Nun würde ich diese Funktion gern direkt aufrufen, so wie es z.B. mit measValues.getMeasurementInfo auch geht, also:

Code:

measValues.setPlotMenu(target)
 


Aber das geht nicht. Statisch ist es kein Problem. Aber ich würde es gern auch "anders" können. Danke für die Hilfe

Hier die Klassen:

Code:
classdef c_frequencyPoints < c_measurementdata
    properties
        valuesVector;
      freqVector;
    end
    methods

        function obj = c_frequencyPoints(freqVector, valuesVector, date, description, device, die)
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        %%% constructor
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
            obj = obj@c_measurementdata(date, description, device, die);
         obj.valuesVector   = valuesVector;
            obj.freqVector      = freqVector;
      end
     
      function plotFrequencyValues(self, target)
      %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
        %%% plot data
        %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
         axes(target);
         plot(self.freqVector, self.valuesVector);      
         c_measurementdata.setPlotMenu(target) % static
      end
    end
end
 


Klasse 2:


Code:

classdef c_measurementdata %< handle
   properties
      date;         % when measured
      description;   % more info about the data
      device;         % device name
      die;         % name of the measured die
     
   end
   methods (Static = false)
      function obj = c_measurementdata(date, description, device, die)
         switch nargin
            case 0
               obj.date      = '';
               obj.description = '';
               obj.device      = '';
            case 4
               obj.date      = date;
               obj.description = description;
               obj.device      = device;
               obj.die         = die;
         end
      end
      function returnString = getMeasurementInfo(self)
            returnString   = char(   ['Measurement date :        ', self.date,],...
                              ['Measurement device :      ', self.device,],...
                              ['Die Name:                 ', self.die,],...
                              ['Measurement description : ', self.description,]);
      end
   end
   methods (Static = true)
      function setPlotMenu(target)
         axes(target);
         % Define a context menu; it is not attached to anything
         hcmenu = uicontextmenu;        
         h1 = uimenu(hcmenu,'label','LineWidth');            % Make a menu for the lineWidth
         h2 = uimenu(hcmenu,'label','LineStyle');            % Make a menu for the lineStyle
         h3 = uimenu(hcmenu,'label','Extras');               % Make a menu for the extras
         
         
         % Define callbacks for context menu items that change linestyle
         width1   = ['set(gco, ''LineWidth'', 1)'];
         width2   = ['set(gco, ''LineWidth'', 2)'];
         width3   = ['set(gco, ''LineWidth'', 3)'];
         width4   = ['set(gco, ''LineWidth'', 4)'];
         lin1   = ['set(gco, ''LineStyle'', ''--'')'];
         lin2   = ['set(gco, ''LineStyle'', '':'')'];
         lin3   = ['set(gco, ''LineStyle'', ''-'')'];
         extra1   = ['delete(gco)'];
         % Define the context menu items and install their callbacks
         uimenu(h1, 'Label', '1', 'Callback', width1);
         uimenu(h1, 'Label', '2', 'Callback', width2);
         uimenu(h1, 'Label', '3', 'Callback', width3);
         uimenu(h1, 'Label', '4', 'Callback', width4);
         uimenu(h2, 'Label', 'dashed', 'Callback', lin1);
         uimenu(h2, 'Label', 'dotted', 'Callback', lin2);
         uimenu(h2, 'Label', 'solid',  'Callback', lin3);
         uimenu(h3, 'Label', 'DELETE',  'Callback', extra1);
         % Locate line objects
         hlines = findall(target, 'Type','line');
         % Attach the context menu to each line
         for line = 1:length(hlines)
            set(hlines(line),'uicontextmenu',hcmenu)
         end
      end  
   end
end
 


Und hier das Hauptprogramm:

Code:

% TESTER der Objectklasse

clc; clear all; clear classes; close all;
clear c_frequencyPoints
clear c_measurementdata

% load('20100729104019_none.mat')

data.frequency      = 100 : 100 : 10000;
data.measValOsci   = rand(1, length(data.frequency)) ;
data.description   = 'TEST';
measValues = c_frequencyPoints(data.frequency, data.measValOsci, '20100729', data.description, 'Tektronix 2012B', 'none');

measValues.getMeasurementInfo

figure;
h = axes; grid on; hold all;
measValues.plotFrequencyValues(h)
%%%%%%%%%%%%%%%%%%%%%%
%%% GEHT NICHT, WARUM?
%%%%%%%%%%%%%%%%%%%%%%
measValues.setPlotMenu(target)  
 
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.