Matlab 构造函数无法访问其自己类的私有属性?
我正试图编写一个类来创建积分对象。但是,构造函数工作不正常。当GetAccess设置为private或protected时,它无法将integral.value设置为正确值。只有当GetAccess设置为public时,它才能工作。为什么 这是密码Matlab 构造函数无法访问其自己类的私有属性?,matlab,oop,properties,constructor,Matlab,Oop,Properties,Constructor,我正试图编写一个类来创建积分对象。但是,构造函数工作不正常。当GetAccess设置为private或protected时,它无法将integral.value设置为正确值。只有当GetAccess设置为public时,它才能工作。为什么 这是密码 classdef nintegral properties(GetAccess=private, SetAccess=private) value end methods function v =
classdef nintegral
properties(GetAccess=private, SetAccess=private)
value
end
methods
function v = nintegral(j) %class constructor
if isa(j,'pf')==0
disp('Function object is not a piecewise function')
else
v.value = integral(@(x) j.p1(1)*x.^2 + j.p1(2)*x + j.p1(3),j.r1(1),j.r1(2)) + integral(@(x) j.p2(1)*x.^2 + j.p2(2)*x + j.p2(3),j.r2(1),j.r2(2));
end
end
end
结束
这是pf课程
classdef pf
properties(GetAccess=public,SetAccess=private)
r1=[-1,0]; %range 1
r2=[0,1]; %range 2
p1=[1,1,1]; %polynomial 1
p2=[1,1,1]; %polynomial 2
end
methods
function j=pf(r1,p1,r2,p2) % class constructor
if r1(2)>r2(1)
disp('ERROR FUNCTION DEFINITION: Overlaping range')
else
j.r1=r1;
j.r2=r2;
j.p1=p1;
j.p2=p2;
end
end
function v=eval(j,x)
if x<j.r1(1) | x>j.r2(2)
disp('Error: Out of Range')
else
if x>j.r1(1) & x<=j.r1(2)
v=polyval(j.p1,x);
else
v=polyval(j.p2,x);
end
end
end
end
classdef pf
属性(GetAccess=public,SetAccess=private)
r1=[-1,0];%范围1
r2=[0,1];%范围2
p1=[1,1,1];%多项式1
p2=[1,1,1];%多项式2
终止
方法
函数j=pf(r1,p1,r2,p2)%class构造函数
如果r1(2)>r2(1)
disp('错误函数定义:重叠范围')
其他的
j、 r1=r1;
j、 r2=r2;
j、 p1=p1;
j、 p2=p2;
终止
终止
函数v=eval(j,x)
如果xj.r2(2)
disp('错误:超出范围')
其他的
如果x>j.r1(1)&x如何检查该值?如果你在构造器外检查它,那么它是正常的…有要检查的函数吗?你能把代码显示在你检查值的地方吗?你是说你想要一个pf对象吗?“让我和你分享一下。”拉特伯特请解释一下。我是新手。检查构造函数之外的值是什么意思?我看到的是,我尝试将pf对象传递给nintegral构造函数,执行一些计算,然后将结果设置为nintegral.value。如果我创建pf,然后将其传递给nintegral,您的代码对我来说运行良好。但是,在复制代码时,您遗漏了“end”语句。