[英]Matlab: Convert superclass to subclass object
我想創建一個子類, ess
說,到內置的ss
級。 我希望能夠將現有的ss
對象轉換為ess
對象,並同時通過以下方法添加缺少的屬性,例如w
sys=ss(a,b,c,d);
esys=ess(sys,w);
但我不知道如何正確設置構造函數。 實現此目標的最佳方法是什么? 我的代碼目前看起來像這樣
classdef ess < ss
properties
w
end
methods
function obj = ess(varargin)
if nargin>0 && isa(varargin{1},'StateSpaceModel')
super_args{1} = sys;
else
super_args = varargin;
end
obj = obj@ss(super_args{:});
end
end
end
但這不起作用,因為出現以下錯誤:
>> ess(ss(a,b,c,d))
??? When constructing an instance of class 'ess', the constructor must preserve
the class of the returned object.
當然,我可以手動復制所有對象屬性,但是在我看來應該有更好的方法。
這是我所想到的一個例子:
classdef ss < handle
properties
a
b
end
methods
function obj = ss(varargin)
args = {0 0}; %# default values
if nargin > 0, args = varargin; end
obj.a = args{1};
obj.b = args{2};
end
end
end
和:
classdef ess < ss
properties
c
end
methods
function obj = ess(c, varargin)
args = {};
if nargin>1 && isa(varargin{1}, 'ss')
args = getProps(varargin{1});
end
obj@ss(args{:}); %# call base-class constructor
obj.c = c;
end
end
end
%# private function that extracts object properties
function props = getProps(ssObj)
props{1} = ssObj.a;
props{2} = ssObj.b;
end
讓我們測試這些類:
x = ss(1,2);
xx = ess(3,x)
我得到:
xx =
ess handle
Properties:
c: 3
a: 1
b: 2
Methods, Events, Superclasses
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.