有时候常看文献附带得matlab代码的时候,经常会遇到有一些m文件是类函数,这引起我的注意,也想适当的学习下,以后自己用的时候也比较方便,把相关的函数都放在一个类中,不必有那么多冗杂的文件。
本文只是笔者浅显的研究下写成,只是探讨怎么正确的去用,但是高级用法或者理论上的错误还请海涵,也算是我自己记录下用法,忘记了的话还能自己看看,算是笔记了。
类函数的构造
首先感谢这篇博主的总结:
先举个例子
classdef (AllowedSubclasses = ?lxx) lx < handle%<是继承的意思
%这个是帮助内容 在函数名下方写的注释就是帮助内容
%
properties
a
end
methods
function x = lx(var) %类定义 'lx' 最多只能定义一个构造函数。
x.a = var;
end
end
methods(Static) %要被引用必须加(Static),且引用的方式为lx.lx1
function x = lx1(var)
x.a = var + 1;
end
function x = lx2(var)
x = var + 1;
end
function x = lx3(var)
x = lx4(var);
end
end
end
function x = lx4(var)
x = var;
end
classdef lxx < lx %继承lx
properties
c
end
methods(Static)
function x = lx1(var)
x = lx1@lx(var); %继承lx里的lx1计算后的属性值
x.c = var + 2;
end
end
end
clear
import lx.*; % 有这句话就不用lx.lx1了直接用lx1
A = lx(10); %类定义 'lx' 最多只能定义一个构造函数。
B = lx.lx1(10);%类函数
B1 = lxx.lx1(10);
C = lxxx(10); %不写handle类对象间的赋值操作,会引发一次所有属性值的拷贝
C1 = C;
C1.a = 11;
A1 = A; %handle类的对象在赋值时,不创建新的拷贝,只复制一个句柄
A1.a = 12; %会让A里的也变成12,就像是指针
aa = lx.lx2(10);
aa1 = lx.lx3(10);
help lx
首先在新建的脚本里,使用classdef就可以创建一个类,后面lx就是类名。
properties是定义一个类属性变量,它可以在整个类函数中使用。
感觉也没什么能说的,就说几个注意的地方吧。
1.在类函数中,只能有一个名字为类函数名的构造函数
2.我尝试了下,构造函数和成员函数中都不能用其他的成员函数,只能引用非此类的函数。
3.method要使用Static,才能在主程序中使用method里面的函数。
4.关于继承,继承的使用大概是我第三部分代码,这么使用,定义类函数名的时候要用(< 要继承的类),然后在写成员函数的时候,假设如果成员函数a要继承 被继承类函数b里面的成员函数c,a和c的名字要一样,要用(a的名字@被继承的类b名字(a函数的参数))这样的格式给a函数中变量赋值。
5.<号是继承的意思,有个<handle的用法,如果使用了这个,那么handle类的对象在赋值时,不创建新的拷贝,只复制一个句柄,如果a = b,如果更改b值,a也会改。
6.使用import 类函数名.* 可以直接使用其中的成员函数,不需要如lx.lx1这样的写法。
7.函数的help可以直接在函数下面写注释,就是help的内容。
测试代码是随意写的,只是为了试试功能。