【发布时间】:2012-07-22 19:54:44
【问题描述】:
我想为内置的ss 类创建一个子类ess。我希望能够将现有的 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.
当然我可以手动复制所有对象属性,但在我看来应该有更好的方法。
【问题讨论】:
-
不要在构造函数中编写它,而是有一个辅助函数,它接受一个
ss实例并从中返回一个新的ess实例 -
我不确定该评论是否对我有帮助。我该怎么做?让我尝试更清楚一点:我希望能够采用现有的
ss实例并添加其他信息(例如w的值)。如果不手动复制原始对象中的所有值,这可能吗?
标签: oop matlab inheritance casting