【发布时间】:2015-06-18 07:28:02
【问题描述】:
你好可爱的社区,
我在这里很新,但仍然希望有人可以帮助我。我过去只是在 Matlab 上工作过,想做一个新项目。早些时候,我只是将所有内容存储在一个 Matlab 文件中,不需要使用类。现在已经改变了,所以我希望有人能解释我做错了什么。
我的愿望是创建基于项目对象。因此我开始在主文件夹中创建新文件夹:
C:\Users\Luftfahrt\MAV\
文件夹名称为:
+Data
+Model
读完第一章后
面向 MATLAB 的编程指南
我发现我正在使用加号创建公共对象。正是我想要的。在每个文件夹中,我插入了一个抽象接口和一个子接口。
DataLoaderIF
classdef DataLoaderIF< handle
methods (Abstract=true)
Data = LoadData(Asset,Start,End)
Status = getStatus(Obj)
Info = getInfo(Obj)
end
end
当我在上面运行这段代码时,他告诉我抽象类无法实例化,但我完全按照书中的方式进行了实例化。也许我想,从抽象接口运行代码是愚蠢的,所以没有问题,是吗?
DataLoader
classdef DataLoader < DataManager.DataLoaderIF
%Inheritent from DataLoaderIF. Is setting parameter and Importing
properties (Access=protected)
mStatus =-1; %nothing done
mInfo ='Import'; %
mData; %saving the imported data
mCollector; %to save the prices after structuring
end
methods
%creating the constructor
function Obj = DataManager
function getStatus(Obj)
mStatus=1;
end
function getInfo(Obj)
Info='Import';
mInfo= Info;
end
function LoadData(Asset,Start,End)
connection = yahoo;
mData= fetch(connection, Asset, Start,End, 'd');
close(connection)
%'JPY=X', '01-Jun-2011', datestr(now,'dd-mmm-yyyy'), 'd');
mCollector= [{'date' 'open' 'high' 'low' 'close' 'volume' 'adj-close'}
cellstr(datestr(mData(:,1))) num2cell(mData(:,2:end))];
end
end
我现在想做的是创建一个对象,然后给这个对象变量来执行获取。但是我现在如何实例化对象呢?他说我的构造函数是假的。
有人有什么想法吗?
附:我已经看过这里Documentation Matlab,但这并没有帮助我。
非常感谢!
【问题讨论】:
-
是错字还是您的构造函数缺少
end? -
我只是在写一行代码的时候想,这个结尾是不是必须的?我错了吗?刚加了,还是不能实例化一个Object :(
-
DataManager 是抽象类吗?另外,你能更好地解释一下层次结构吗?我很难理解为什么你从 DataLoaderIF 继承然后使用 DataManager 构造函数。
-
看起来您的方法块中也缺少“结束”。另外,LoadData 不应该将“obj”作为第一个参数吗?