matlab如何写一个类
2011-11-08 19:15
134 查看
先看一个matlab中的类代码:
在上述代码中,
classdef TensileData
...
end
是定义一个TensileData类。代码:
properties
Material = 'carbon steel';
SampleNumber = 0;
Stress
Strain
end
是定义这个类的属性,也就是C++中类的成员变量。但是和C++不同的是,matlab中的类定义还有一个比较特别的地方的,就是定义依赖属性,如下述代码:
properties (Dependent)
Modulus
end
这表示Modulus这个属性是个依赖属性,它的值是通过其他属性计算得到的,其中Dependent的默认属性值为True。
它的值是通过下面函数实现的:
% Modulus get function
function modulus = get.Modulus(obj)
ind = find(obj.Strain > 0); % Find nonzero strain
modulus = mean(obj.Stress(ind)./obj.Strain(ind));
end
类的方法(函数)的定义是以methods ... end的的形式出现的。如下面的类方法的定义:
methods
function td = TensileData(material,samplenum,stress,strain)
if nargin > 0
td.Material = material;
td.SampleNumber = samplenum;
td.Stress = stress;
td.Strain = strain;
end
end
end
该函数块定义了TensileData构造函数方法。上述代码中的最后一个方法 methods (Access = 'private')
中的Access = 'private'表示该方法仅能被类本身访问和修改,是个私有成员方法。其中属性Access又可分为
SetAccess和GetAccess,属性值和Access相同。
在disp函数语句中出现“...”表示下一行和当前行是连接在一起的。如:
function disp(td)
fprintf(1,'Material: %s\nSample Number: %g\nModulus: %1.5g\n',...
td.Material,td.SampleNumber,td.Modulus);
end
就表示第二行和第三行是连在一起的。
classdef TensileData properties Material = 'carbon steel'; SampleNumber = 0; Stress Strain end properties (Dependent) Modulus end methods function td = TensileData(material,samplenum,stress,strain) if nargin > 0 td.Material = material; td.SampleNumber = samplenum; td.Stress = stress; td.Strain = strain; end end % TensileData end methods function obj = set.Material(obj,material) if ~(strcmpi(material,'aluminum') ||... strcmpi(material,'stainless steel') ||... strcmpi(material,'carbon steel')) error('Material must be aluminum, stainless steel, or carbon steel') end obj.Material = material; end % Material set function function modulus = get.Modulus(obj) ind = find(obj.Strain > 0); % Find nonzero strain modulus = mean(obj.Stress(ind)./obj.Strain(ind)); end % Modulus get function function obj = set.Modulus(obj,~) fprintf('%s%d\n','Modulus is: ',obj.Modulus) error('You cannot set Modulus explicitly'); end function disp(td) fprintf(1,'Material: %s\nSample Number: %g\nModulus: %1.5g\n',... td.Material,td.SampleNumber,td.Modulus); end % disp function plot(td,varargin) plot(td.Strain,td.Stress,varargin{:}) title(['Stress/Strain plot for Sample ',num2str(td.SampleNumber)]) xlabel('Strain %') ylabel('Stress (psi)') end % plot end methods (Access = 'private') % Access by class members only function m = CalcModulus(td) % Over-simplified calculation of Elastic Modulus ind = find(td.Strain > 0); % Find nonzero strain m = mean(td.Stress(ind)./td.Strain(ind)); end % CalcModulus end end % classdef
在上述代码中,
classdef TensileData
...
end
是定义一个TensileData类。代码:
properties
Material = 'carbon steel';
SampleNumber = 0;
Stress
Strain
end
是定义这个类的属性,也就是C++中类的成员变量。但是和C++不同的是,matlab中的类定义还有一个比较特别的地方的,就是定义依赖属性,如下述代码:
properties (Dependent)
Modulus
end
这表示Modulus这个属性是个依赖属性,它的值是通过其他属性计算得到的,其中Dependent的默认属性值为True。
它的值是通过下面函数实现的:
% Modulus get function
function modulus = get.Modulus(obj)
ind = find(obj.Strain > 0); % Find nonzero strain
modulus = mean(obj.Stress(ind)./obj.Strain(ind));
end
类的方法(函数)的定义是以methods ... end的的形式出现的。如下面的类方法的定义:
methods
function td = TensileData(material,samplenum,stress,strain)
if nargin > 0
td.Material = material;
td.SampleNumber = samplenum;
td.Stress = stress;
td.Strain = strain;
end
end
end
该函数块定义了TensileData构造函数方法。上述代码中的最后一个方法 methods (Access = 'private')
中的Access = 'private'表示该方法仅能被类本身访问和修改,是个私有成员方法。其中属性Access又可分为
SetAccess和GetAccess,属性值和Access相同。
在disp函数语句中出现“...”表示下一行和当前行是连接在一起的。如:
function disp(td)
fprintf(1,'Material: %s\nSample Number: %g\nModulus: %1.5g\n',...
td.Material,td.SampleNumber,td.Modulus);
end
就表示第二行和第三行是连在一起的。
相关文章推荐
- 如何解决每当打开一个m文件时,matlab应用程序随之打开
- Matlab函数产生的Figure图形框如何嵌入C# Winform中的一个Panel中?
- matlab如何将一个文件夹下内容复制到另一个文件夹下
- 如何在matlab中载入一个文件夹中的多张图片
- matlab中,如何一次读取同一个目录下的多个文件?
- 如何在MATLAB画一个首尾相连的数据矩阵图形
- 如何matlab 读取同一个文件中的多个txt 文档
- matlab中如何求某一个矩阵的标准差和均值
- 如何用matlab生成一个单位正交矩阵?
- 如何让opencv成为MATLAB中的一个工具箱
- 如何在matlab中打开一个.dat文件,并载入数据
- FIR和IIR滤波器的使用范围区别,如何用matlab设计一个滤波器
- Matlab如何判断一个点是否落在一个不规则的封闭区域中
- matlab如何写一个类
- matlab之如何设置colormap, 以一个figure中画多幅图
- 如何将一个C#字符串数组传递给MATLAB
- 如何用matlab读出一个灰度图像各点灰度值大小?
- matlab如何提取程序所依赖的所有自定义函数文件到一个文件夹中去
- MATLAB中如何绘制一个球
- 【matlab】:如何用matlab写一个批量读入图并且显示的功能