34.2类方法

有许多基本类方法可以(也应该)定义为允许查询和设置类的内容。其中最基本的是disp方法这个disp每当类应该显示在屏幕上时,Octave都会使用方法。通常,这是不以分号结尾的Octave表达式的结果。如果没有定义这个方法,那么Octave在显示aclass的内容时不会打印任何内容,这可能会令人困惑。

的一个示例disp多项式类的方法可能是

函数disp(p)a=p.poly;first=true;对于i=1:长度(a);如果(a(i)!=0)如果(first)first=false;elseif(a(i)>0||是一个(a(i))printf(“+”);endif if(a(i)<0)printf(“-”);endif if(i==1)printf(“%.5g”,abs(a(i)));elseif(abs(a(i))!=1) printf(“%.5g*”,abs(a(i)));endif if(i>1)printf(“X”);endif if(i>2)printf(“^%d”,i-1);endif endif endfor if(first)printf(“0”);endif printf(“\n”);结束函数

为了与Octave图形句柄类保持一致,类还应该定义getset方法。这个get方法接受一个或两个参数。第一个自变量是propertificass的对象。如果没有给出第二个参数,那么该方法应该返回一个具有类的所有属性的structure。如果提供了可选的第二个参数,则该参数应为属性名称,并且应检索指定的属性。

函数val=get(p,prop)if(nargin<1)print_usage();endif如果(nargin==1)val.poly=p.poly;else-if(!ischar(prop))错误(“@p多项式/get:PROPERTY必须是字符串”);endif开关(prop)case“poly”val=p.poly;否则错误('@p多项式/get:invalid PROPERTY“%s”',prop);结束开关结束函数

类似地,的第一个参数set方法应该是一个对象,任何其他参数都应该是属性/值对。

函数pout=集(p,varargin)if(numel(varargin0)错误(“@多项式/set:应为PROPERTY/VALUE对”);endif pout=p;而(numel(varargin)>1)prop=varargin{1};val=varargin{2};varargin(1:2)=[];if(!ischar(prop)||!strcmp(prop,“poly”))错误(“@p多项式/set:多项式类的PROPERTY无效”);elseif(!(isreal(val)&&isvector(val)))错误(“@多项式/set:VALUE必须是实向量”);endif pout.poly=val(:).';#强制行向量endwhileend函数

请注意,Octave不实现按引用传递;因此,修改对象需要一个赋值语句,该语句使用set方法

p=集合(p,“poly”,[1,0,0,1]);

这个set方法利用subs方法,因此也必须定义此方法。这个subs方法将在下一节中进行更深入的讨论(详见索引对象).

最后,用户类可以被认为是一种特殊类型的结构体,它们可以以与结构体相同的方式保存到文件中。例如:

p=多项式([1,0,1]);保存userclass.mat pc清除pload userclass.ma特

支持的所有文件格式拯救加载支持。在某些情况下,用户类可能包含一个不需要保存的字段,或者一个在保存之前需要初始化的字段。这可以通过saveobj类的方法。

 
: b = saveobj (a)

类的方法,以便在将对象保存到文件之前对其进行操作。

函数saveobj当对象a正在保存使用拯救作用的使用示例saveobj可能是删除对象中没有保存意义的字段,也可能用于确保在保存对象之前初始化对象的某些字段。例如

函数b=saveobj(a)b=a;如果(isempty(b.field))b.field=initfield(b);endifend函数

详见: loadobj, .

saveobj在将类保存到文件之前调用。类似地loadobj方法是在从文件加载类之后立即调用的,可用于确保将任何删除的字段重新插入到用户对象中。

 
: b = loadobj (a)

一个类的方法,用于在从文件加载对象后对其进行操作。

函数loadobj当对象a正在加载使用加载作用的使用示例saveobj可能是向一个保存起来没有意义的对象添加字段。例如

函数b=loadobj(a)b=a;b.addmissingfield=添加字段(b);结束函数

详见: saveobj, .


版权所有 © 2024 Octave中文网

ICP备案/许可证号:黑ICP备2024030411号