200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > 学习笔记----MATLAB面向对象编程入门02--类的方法 构造函数

学习笔记----MATLAB面向对象编程入门02--类的方法 构造函数

时间:2021-03-17 14:01:33

相关推荐

学习笔记----MATLAB面向对象编程入门02--类的方法 构造函数

本系列内容为《MATLAB面向对象编程–从入门到设计模式》学习笔记,特此说明。

定义类的方法

类的方法(Method)一般用来查询(Query)对象的状态,或者向对象发出一个命令(Command),比如操作对象中的数据。在MATLAB面向对象编程中,类方法的定义要放在method block中,和一般函数定义类似,方法的定义以关键词function开始,以关键词end结束。

......methodsfunction [returnValue]=functionName(arguments)......endend

若成员方法代码量比较大,可以在类定义中仅给出函数的声明,把函数实现放到一个独立的文件中。

说明:

这种方法需要创建一个@classname的文件夹,然后把类的定义和方法的实现都放到该文件夹中,然后在@classname的外部调用该类的构造函数。某些函数不能采用这种方式,比如类的Constructor和Destructor(析构函数),以及Static方法,都必须在类的定义中实现。

调用类的方法

点调用方式:obj.memberFunction(arg1,arg2)

函数调用方式:memberFunction(obj,arg1,arg2)

点调用和函数调用类方法的区别

虽然两种方法基本等价,但仍有一些细微的区别:

使用点调用方式符合面向对象的风格,程序的可读性高,这是施加在对象上的一种操作。使用函数调用方式满足传统的面向过程的编程习惯,在某些情况下,兼容旧的MATLAB代码。使用点调用可以清楚的表示MATLAB调用的时成员方法还是函数。

类的构造函数

构造函数(Constructor)是一种特殊的成员方法:

Constructor和类的名称相同,用来创造类的实例。MATLAB类定义中只能有1个Constructor·。Constructor有且只能有一个返回值,且必须是新创建的对象,这是唯一创建一个新的对象的方式。

classdef Point2D < handlepropertiesxyendmethodsfunction obj = Point2D(x0,y0) %返回值必须是一个objobj.x=x0;obj.y=y0;endendend

>> clear classes;>> p1=Point2D(1.0,2.0); %使用构造函数创建对象

在构造函数中给属性赋值

在Constructor中也可以给对象的属性赋值。即使在property block中已经提供了默认值,Constructor中赋的新值也将取代property block中的默认值。

classdef Point2D < handlepropertiesx=cos(pi/2); %Constructor被调用之前x的默认值y=sin(pi/3); %Constructor被调用之前y的默认值endmethodsfunction obj = Point2D(x0,y0) %返回值必须是一个objobj.x=x0; %新的x0,y0将会取代初值obj.y=y0;endendend

MATLAB在声明一个对象时的工作顺序是:先装载类的定义,然后再调用构造函数,这时属性被重新赋值。

如何让构造函数接受不同数目的参数

由于MATLAB是弱类型检查的解释性语言,不能通过函数函数重载的方式找到相匹配的函数,但是可以通过参数数目(nargin)的不同来选择不同的代码。

classdef Point2D < handlepropertiesx=cos(pi/2); %Constructor被调用之前x的默认值y=sin(pi/3); %Constructor被调用之前y的默认值endmethodsfunction obj = Point2D(x0,y0) if nargin == 0 % 如果没有提供参数obj.x=cos(pi/2);obj.y=sin(pi/3);else if nargin == 2 %如果提供了参数obj.x=x0;obj.y=y0;endendendend

默认构造函数

默认构造函数(Default Constructor)一般性定义:不带任何参数的构造函数。

可以把默认构造函数理解成构造函数内部可以处理nargin==0的情况,并且返回新构建的对象的那部分代码。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。