首先,抱歉标题不好 - 我是OO编程的新手 - 基本上我想了解Matlab如何使用oop类。
在我提出问题之前,这是我想要做的基本例子:
我有两个房子和一些关于他们的数据,我有了想法,与oop课程一起工作。这是我的.m文件。
classdef building
properties
hohe = 0;
lange = 0;
breite = 0;
xabstandsolar = 0;
yabstandsolar = 0;
end
methods
function obj = building(hohe, lange, breite, xabstandsolar, yabstandsolar)
obj.hohe = hohe;
obj.lange = lange;
obj.breite = breite;
obj.xabstandsolar = xabstandsolar;
obj.yabstandsolar = yabstandsolar;
end
function hohenwinkel(h)
h = h
d = sqrt(obj.xabstandsolar^2 + yabstandsolar^2);
gamma_v = atand((obj.hohe - h)/(d));
end
end
end
我填写了一些数据 - 例如
>>H1 = building(10,8,6,14,8)
>>H2 = building(18,8,6,14,0)
现在我想为每个建筑物计算“gamma_v”(作为1x2阵列)。任何想法,我如何存档?
编辑: 我想自动为类“building”中的所有对象创建gamma_v(作为数组)。最后的剧本中会有更多的“房子”。
答案 0 :(得分:3)
您的hohenwinkel
方法需要接受两个输入参数。非静态方法的第一个参数始终是对象本身(与C ++不同,您必须将其显式列为输入参数),第二个输入将是您的h
变量。您还希望使用方法的输出参数实际返回gamma_v
值。
function gamma_v = hohenwinkel(obj, h)
d = sqrt(obj.xabstandsolar^2 + obj.yabstandsolar^2);
gamma_v = atand((obj.hohe - h)/(d));
end
然后,您可以在每个建筑物上调用此方法以获取值
gamma_v1 = hohenwinkel(H1);
gamma_v2 = hohenwinkel(H2);
如果您想拥有一系列建筑物,可以创建该阵列
houses = [building(10,8,6,14,8), building(18,8,6,14,0)];
gamma_v = hohenwinkel(houses);
然后构造您的hohenwinkel
函数以对每个函数进行操作并返回结果
function gamma_v = hohenwinkel(obj, h)
if numel(obj) > 1
% Compute hohenwinkel for each one
gamma_v = arrayfun(@(x)hohenwinkel(x, h), obj);
return
end
d = sqrt(obj.xabstandsolar^2 + obj.yabstandsolar^2);
gamma_v = atand((obj.hohe - h)/(d));
end
答案 1 :(得分:0)
有一些棘手的解决方案(不推荐)(@ Suever解决方案更好) 你应该创建一个句柄类
classdef gvclass<handle
properties
gvarr=[];
end
methods
function setgvarr(obj,value)
obj.gvarr=[obj.gvarr,value];
end
end
end
然后在您的构建类
中使用此类classdef building<handle
properties
gv
hohe = 0;
lange = 0;
breite = 0;
xabstandsolar = 0;
yabstandsolar = 0;
end
methods
function obj = building(hohe, lange, breite, xabstandsolar, yabstandsolar,handle_of_your_gv_class,h)
obj.hohe = hohe;
obj.lange = lange;
obj.breite = breite;
obj.xabstandsolar = xabstandsolar;
obj.yabstandsolar = yabstandsolar;
obj.gv=handle_of_your_gv_class;
obj.hohenwinkel(h);
end
function hohenwinkel(obj,h)
d = sqrt(obj.xabstandsolar^2 + yabstandsolar^2);
gamma_v = atand((obj.hohe - h)/(d));
obj.gv.setgvarr(gamma_v);
end
end
end
最后在创建任何建筑之前,你应该创建一个gv类的对象并将其传递给建筑构造函数,
Egv=gvclass();
H1 = building(10,8,6,14,8,Egv,2)
H2 = building(18,8,6,14,0,Egv,3)
并访问gv数组:
Egv.gvarr
你应该在这个问题上做更多的努力来调试可能的错误。