matlab面向对象编程基础
时间:2022-07-23
本文章向大家介绍matlab面向对象编程基础,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
matlab面向对象编程基础
转载自www.cnblogs.com/hdu-zsk[1]很棒的一篇博文!学到了不少!谢谢!
Matlab面向对象大体结构
- 类定义的普通模板
代码清单2.1.1
classdef className<handle & superclass1 & superclass2
properties
property1;
property2;
end
methods
function F1 = Func1(class_obj,parameter1)
...
end
function class_obj = Func2(class_obj)
...
end
end
methods(Static)
function display(class_obj)
disp(class_obj.property1);
disp(class_obj.property2);
end
end
end
- 在这段代码中,classdef关键字后给出了类名,className<handle说明handle是className类的父类(继承性),className可以使用handlle类中除指明privacy(类的私有属性,只允许该类的函数或变量访问)的所有函数。
- className可以从多个父类中继承(多态性),方法就是在多个父类名间加入‘&’。如果一个类没有父类,则classdef后接类名后什么都不用写。
- properties关键字给出类的属性。methods关键字给出类的方法(函数)。
- 特别要注意的是,如果一个类有静态方法,即该方法和具体的对象无关而是类所固有的方法,即使用类名进行调用 则该类函数应单独写入一个methods之内并在其后加上(Static)。
如何调用methods中的函数
- 代码清单2.2.1
obj = className;
obj.Func1(parameter1);
obj.Func2;
className.display(obj);
- 这段代码是基于在清单2.1.1中给出的类定义衍生的。第一句话用类className创造了一个实例obj。第二句话实例obj调用类中函数Func1,这里要注意虽然在Func1的定义中有两个参数,一个是class_obj,另一个是parameter1,但是在调用的时候仅写parameter1就足够了,class_obj是系统自动传入的。如果参数调用的时候写class_obj则会报错(错误提示:传入过多参数)。同理,第三句话是Func2的调用,由于Func2是只有一个class_obj当参数,所以调用的时候直接省略所有的参数,连括号都省略了。
- 当然也可以直接写为Func1(obj,parameter1)和Func2(obj)
- 在写函数的时候也要注意,无论是静态methods还是普通methods,写函数的参数都必须包括class_obj,否则,会提示一个错误(错误提示:未定义以‘double’型变量为参数的函数Func1)。
- 对于
className.display(obj)
由于display是静态methods,上文中我们提到过,静态methods与对象无关而与类本身相关,所以调用静态方法的主体是类,本例中就是className而不是实例化得obj。同时,请注意,与普通方法不同,静态方法调用的时候必须传入实例为参数 。
如何将类声明文件分布在多个文件中
- 与C++和Java相同,matlab在定义类中方法时,允许只在methods中声明函数而将函数的实际文件及代码单独剥离成为另一个文件。这样做的好处是可以使代码简单易懂。
- 对于一个类,首先建立类文件包。方法时新建文件夹,然后更改文件夹名称为@+类名。比如@className
- 在@className 文件中建立classdef类定义文件。比如代码清单2.3.1
classdef className<handle & superclass1 & superclass2
properties
property1;
property2;
end
methods
F1 = Func1(class_obj,parameter1);
class_obj = Func2(class_obj);
value = Func3(class_obj);
end
methods(Static)
display(class_obj);
end
end
- 可以看到methods中只包含方法的函数声明及返回值而不包括函数的具体定义。然我们看看函数的具体定义怎么写
- 在@className 文件夹中建立新的m文件,内容如清单2.3.2所示
function F1 = Func1(class_obj,parameter1)
F1 = class_obj.Func3+parameter1;
end
- 可以看到,这与普通的m文件没有任何区别。但是需要注意的是,该函数Func1中,实际上又调用了类中的另一个函数Func3。而Func3在类中事先已经声明过了。如果在类文件@className中直接建立一个m文件作为函数,而在classdef中的methods中不声明,则Func1在调用的时候无法看到该函数。所以请注意:所有被对象调用的函数以及不被对象调用而被对象的函数调用函数,除matlab内建函数(sqrt,pow,length等等),必须在类中予以声明才能使用,否则必会报错。
- 在经历上述步骤后,一个类就算定义完成了。但是仍然要注意,如果你想像在代码清单2.2.1中建立并使用自己的对象。则必须退出@className文件,在@className的上一级文件中才能使用。
参考资料
[1]
www.cnblogs.com/hdu-zsk: https://www.cnblogs.com/hdu-zsk/p/5787150.html
- 佛系编程[如何创建一个安全可靠的应用程序]
- 请正确使用http状态码,谢谢!
- Hell is empty and all the devils are here.
- kNN之改进约会网站配对效果(附源码)
- Codeforces 768A Oath of the Night's Watch
- 网站性能测试利器:Puppeteer
- FZU 1889 龟兔赛跑
- 1381 硬币游戏
- 零基础学并查集算法
- POJ 2492 A Bug's Life
- 【Scrapy】走进成熟的爬虫框架
- Codeforces 777C Alyona and Spreadsheet
- HDU 1039 Easier Done Than Said?
- Codeforces 777A Shell Game
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法