|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 eecsseudl 于 2013-4-29 10:23 编辑
文中有大量的例子,是一份很好的资料。
【例7.10.2-1】本例演示:创建“先进先出”FIFO队列queue类的全过程。在本例中,读者应充分注意:构架域(Fields of a structure array)和定义在其上的方法函数(Method function)之间的关系。
[@queue\queue.m]
function q=queue(v)
%@QUEUE\QUEUE
% 调用格式
%
%
superiorto('double','sparse','struct','cell','char','inline','sym');
%
<6>
if nargin>1;error('Too many arguments.');end;
if nargin==0
%
q.value=[];
q.name='';
q=class(q,'queue');
elseif isa(v,'queue');
%
q=v;
%
else
%
q.value=v;
%
q.name=inputname(1);
if isempty(q.name)
q.name=['(' class(v) ')'];
end
q=class(q,'queue');
%
<20>
end
(4)
[@queue\display.m]
function display(q,ki,kj)
%QUEUE\DISPLAY
% 调用格式
%
%
%
if nargin==0;error('缺少输入宗量,即被显示对象!');end
switch nargin
case 1
[m,n]=size(q);
vname=inputname(1);
if isempty(vname)
fprintf('ans=\n');
elseif fprintf('%s=\n',vname);
end;
if isempty(q)
fprintf('
[ empty
')
%<17>
fprintf('%s',class(q))
%<18>
fprintf(' ]\n\n');
%<19>
elseif m*n==1;
fprintf('
%s: ',q.name);
disp(q.value);
fprintf('\n');
else
fprintf('
[ %d*%d ',m,n]
%<25>
fprintf('%s',class(q))
%<26>
fprintf(' ]\n\n');
%<27>
end
case 2
disp(['The content of ',inputname(1),'(',int2str(ki),')'])
disp(['is a ''',class(q(ki).value),''' object'])
fprintf('
%s=\n',q(ki).name);
disp(q(ki).value);
fprintf('\n');
case 3
disp(['The content of ',inputname(1),'(',int2str(ki),',',int2str(kj),')'])
disp(['is a ''',class(q(ki,kj).value),''' object'])
fprintf('
%s=\n',q(ki,kj).name);
disp(q(ki,kj).value);
fprintf('\n');
end
(5)
[@queue\isempty.m]
function f=isempty(q)
%@QUEUE\ISEMPTY
f=0;
[m,n]=size(q);
if m*n==1;
if isempty(q.value) & isempty(q.name)
%<6>
f=1;
end;
end;
(6)
[ @queue\comein.m]
function q=comein(p,varargin)
% @QUEUE\COMEIN
% 调用格式
%
%
%
if nargin<2 error('comein needs at least two arguments.');end;
if ~isa(p,'queue') error([inputname(1),' is not a queue']);end;
q0=p;
qzzy=class(p);
%
<10>
for i=1:length(varargin)
temp=varargin{i};
s=eval([qzzy,'(temp)']);
%
<13>
s.name=inputname(i+1);
if isempty(s.name)
s.name=['(' class(temp) ')'];
end
if isempty(q0)
q0=s;
else
q0=[q0 s];
end
end
if nargout==0;
assignin('caller',inputname(1),q0);
evalin('caller',inputname(1));
else
q=q0;
end
[@queue\goout.m]
function [n,v,q]=goout(p)
% @QUEUE\GOOUT
% 调用格式
%
%
%
%
%
if nargin==0 ;error('No queue specifide.');end;
if nargout>3;error('Too many output arguments.');end;
if nargin>1 error('Too many input arguments.');end;
if ~isa(p,'queue');error([inputname(1),' is not a queue.']);end;
if isempty(p)
q1=p;
else
[m,n]=size(p);
v1=p(1).value;n1=p(1).name;
if m*n==1
q1=queue;
else
q1=p(2:end);
end
end
if nargout<3;
assignin('caller',inputname(1),q1);
end;
if nargout==0,
evalin('caller',inputname(1));
end
if nargout>=1;v=v1;end;
if nargout>=2;n=n1;end;
if nargout==3;q=q1;end;
. |
|