2015-07-03 100 views
2

在MATLAB的classdef中,你能定義一個執行any_function的方法嗎?在MATLAB的classdef中,你能定義一個「any_function」嗎?

例如,說我在MATLAB中定義這個自定義類的類型:

classdef custfloat 

    properties 
     value = double(0); % Double value 
    end 

    methods 


     function obj = custfloat(v, ex, mant) 

      obj.value = ........blah blah blah; 
     end 


     function v = any_function(arg1,arg2) 

      v = any_function(arg1.value, arg2.value); 
     end 

    end 
end 

所以只要any_function爲兩個雙打定義,它會工作,不管什麼any_function實際上是。

這有道理嗎?

+0

我不明白這個問題。 – Daniel

+0

我也不明白這個問題。您能否提供一個例子,說明如何在實踐中使用'any_function'方法以及任何預期的輸出或行爲? – TroyHaskin

回答

1

我不確定你的問題意味着什麼,但我認爲你可以得到你正在尋找我剛纔的子類double

例如,下面是一個簡單的類,它擴展了double以創建類似double的東西,但也有一個單位(例如米或秒)。

classdef custDouble < double 

    properties 

     unit 

    end 

    methods 

     function obj = custDouble(v, u) 
      % Do something with exponents and mantissas instead if you like, 
      % I can't remember floating point stuff well enough for this 
      % example 
      obj = [email protected](v); 
      obj.unit = u; 
     end 

     function val = myExtraMethod(obj) 

      val = custDouble(obj*2, obj.unit); 

     end 

    end 

end 

現在,您可以創建一個custDouble這樣的:

>>a = custDouble(2, 'm') 
a = 
    custDouble with properties: 

    unit: 'm' 
    double data: 
    2 

你可以打電話給你額外的方法:

>> b=a.myExtraMethod 
b = 
    custDouble with properties: 

    unit: 'm' 
    double data: 
    4 

,你可以調用適用於雙打任何常規功能:

>> sqrt(a) 
ans = 
     1.4142 

但請注意,sqrt此處將返回double,而不是custDouble - 它只是作用於底層的double。如果您希望像sqrt這樣的常規函數​​返回custDouble,則需要使用custDouble上的方法使它們超載,這些方法的行爲將以適當的方式進行(例如,在底層的double上調用builtin('sqrt',...),然後構建正確的單元,然後將它們放在一起custDouble - 以上面myExtraMethod的方式)。

搜索「子類化MATLAB內置類型」的文檔以獲取更多信息。

+0

很好的簡單的子類化例子給了我很多想法。謝謝 :-) – Hoki

相關問題