classdef MyClassName
properties % 定义属性
prop1
prop2
end
methods
function obj = MyClassName(val1,val2)% 构造函数
obj.prop1 = val1;
obj.prop2 = val2;
end
end
end
MCN2 = MyClassName(3,4);% MCN2 =% MyClassName - 属性:% prop1:3% prop2:4
classdef MyClassName
properties % 定义属性
prop1 = date;% date返回当前日期
prop2 = datestr(now);% 启动程序时的时间,默认值,可以为任意
end
methods
function obj = MyClassName(val1,val2)% 构造函数
if nargin ==2% 使用可变参数,即可无参构造,又可以有参构造
obj.prop1 = val1;
obj.prop2 = val2;
end
end
function outarg = ordMethod(obj,arg1)
outarg = obj.prop1 + arg1;
end
end
end
MCN1 = MyClassName;% 创建对象
MCN2 = MyClassName(3,4);
classdef SimpleClass
properties
x
y =9;
end
methods
function SC = SimpleClass(varargin)if nargin ==0
SC.x =0;
elseif nargin ==1
SC.x = varargin{1};else
SC.x = varargin{1};
SC.y = varargin{2};
end
end
function outarg = ordMethod(obj,arg1)% obj表示当前对象
outarg = obj.x + obj.y +arg1;
end
end
end
newobj = SimpleClass;
ordMethod(newobj,1);% 调用方法
newobj.ordMethod(1);% 使用对象调用方法,输入参数不要对象参数
45. Overloading
classdef MyClassName
properties % 定义属性
prop1 % date返回当前日期
prop2 = datestr(now);% 启动程序时的时间,默认值,可以为任意
end
methods
function obj = MyClassName(val1,val2)% 构造函数
if nargin ==2% 使用可变参数,即可无参构造,又可以有参构造
obj.prop1 = val1;% obj 代表当前对象
obj.prop2 = val2;
end
end
function outarg = ordMethod(obj,arg1)
outarg = obj.prop1 + arg1;% obj 代表当前对象
end
% a + b == plus(a,b)
function objout = plus(obj1,obj2)
objout = MyClassName;
objout.prop1 = obj1.prop1+obj2.prop1;
end
% a - b == minus(a,b)
function objout = minus(obj1,obj2)
objout = MyClassName;
objout.prop1 = obj1.prop1-obj2.prop1;
end
% a < b == lt(a,b)% a > b == gt(a,b)
function out = gt(obj1,obj2)if isa(obj2,'MyClassName')
out = gt(obj1.prop1,obj2.prop1);else
out = gt(obj.prop1,3);
end
end
end
MCN1 = MyClassName(1,2);% MCN1 =% MyClassName - 属性:% prop1:1% prop2:2
MCN2 = MyClassName(2,3);% MCN2 =% MyClassName - 属性:% prop1:2% prop2:3
MCN1 + MCN2;% ans =% MyClassName - 属性:% prop1:3% prop2:'07-May-2022 16:44:34'
gt(MCN1,MCN2);% MCN1 > MCN2;0
gt(MCN1,0);% MCN1 >0;1
isa(MCN1,'MyClassName');% 判断 MCN1 是否为MyClassName类型,logical 1
46. 类的继承与构造方法
classdef SuperClass
properties % 定义属性
prop1
prop2
end
methods
function obj = SuperClass(val1,val2)% 构造函数
if nargin ==2% 使用可变参数,即可无参构造,又可以有参构造
obj.prop1 = val1;% obj 代表当前对象
obj.prop2 = val2;
end
end
end
end
classdef MySubclass < Superclass
properties
prop3
end
methods
function obj = MySubclass(val1,val2,val3)% 子类的构造方法
if~exist(val1,'var')
val1 =[];
end
if~exist(val2,'var')
val2 =[];
end
if~exist(val2,'var')
val2 =[];
end
obj@SuperClass(val1,val2);% 这句不能放在if中,用父类构造方法赋值prop1,prop2
obj.prop3 = val3;
end
end
end
MS = MySubclass(1,2,3);
47. handle类与value类
% value class: double,一个杯子加一个柄
% handle class: 继承了handle类,给同一个杯子加一个柄
classdef MyClassName < handle
properties % 定义属性
prop1
prop2 = datestr(now);% 启动程序时的时间,默认值,可以为任意
end
methods
function obj = MyClassName(val1,val2)% 构造函数
if nargin ==2% 使用可变参数,即可无参构造,又可以有参构造
obj.prop1 = val1;% obj 代表当前对象
obj.prop2 = val2;
end
end
end
end
A = MyClassName(1,2);% 给杯子x加一个柄
B = A;% 给杯子x再加一个柄,改变A的值,即改变B的值
C = MyClassName(1,2);% 给杯子y加一个柄
isequal(A,C);% 判断两个的属性是否完全相同,logical 1
48. 类的属性特性
% 属性
% private protected public
% get within classwithin subclass otherwise
%set within classwithin subclass otherwise
% function set.属性(obj,val) end:等价于“= val”, 对属性进行赋值的函数重载
% A.fun(val)== fun(A,val)
classdef valAttributes
properties (GetAccess = public)
num =0;
end
properties (SetAccess = public,GetAccess = public)%== Access = public
word ='hello';
end
methods
function obj = valAttributes(n,v)if nargin ==2
obj.num = n;
obj.word = w;
end
end
end
methods (Abstract)
function curve
end
end
methods (Hiiden)
function shownum(obj)
disp(obj.num);
end
end
methods (Hiiden)
function shownum2(obj)
disp(obj.num);
end
end
methods (Static)% 该方法不需要对象就可以调用
function passOrFile = isPass(num)if num >=20
passOrFile ='pass';else
passOrFile ='fail';
end
end
end
end
classdef subVal < valAttributes
methods
function changeNum(obj,num)
obj.num = num;
end
function changeWord(obj,word)
obj.word = word;
end
function curve
obj.num = sqrt(obj.num)*10;
end
end
end
valAttributes.isPass(60);%'pass'