构造函数是对类进行操作时第一个运行的函数,它常常用于对象数据的初始化。可以通过调用构造函数并给它传递合适的输入参数来创建类。在MATLAB中,构造函数与类具有相同的名称。构造函数方法必须在classdef文件中定义。
构造函数必须运行一定的函数,这样,对象才能在MATLAB环境中正确运行。通常,根据输入参数的个数和类型的不同,构造函数有3种,分别对应于没有输入参数、同一个类的一个对象作为输入参数和某种类型的数据作为输入参数的情况。
1.没有输入参数
如果没有输入参数,构造函数将创建一个默认对象。因为没有输入参数,没有数据可用于创建对象,所以用空值或默认值简单地初始化对象的数据,调用类函数实例化对象,并返回对象作为输出参数。在下面两种情况下需要使用本语法:
在工作空间中载入对象时,load函数调用没有参数的构造函数。
创建对象数组时,MATLAB向数组中添加对象。
2.对象输入参数
如果参数列表中的第一个输入参数是同一类的对象,构造函数将简单地返回对象,使用isa函数确定参数是否为该类对象。
3.数据输入参数
如果有输入参数,但没有同一类的对象,则构造函数使用输入的数据,常用于使用varargin输入参数有开关控制的程序中。
下面结合一个定义圆的ccircle类来介绍构造函数的创建。如上所述,构造函数有没有输入参数、一个对象输入参数和数据输入参数三种情况。对于ccircle类,有数据输入时又分两种情况,一种是用圆心和半径定义圆,此时有3个输入参数;另一种是用圆心和圆上一点定义圆,此时有4个输入参数。后一种情况可以转化为前一种情况。
ccircle类的构造函数如下所示,可以看出,与VC, VB和.NET程序定义类的构造函数不同,由于可以使用变参varargin,MATLAB定义构造函数时是将参数个数不同时的构造函数放在一起的。
code.matlab
function cc=ccircle(varargin)
%ccircle类的构造函数
%cc=ccircle(CenterX,CenterY,Radius)
switch nargin
case 0
%如果没有输入参数,创建一个默认对象
cc.centerx=0;
cc.centery=0;
cc.radius=0;
case 1
%如果有一个参数,返回它
if(isa(varargin{1},'ccircle'))
cc=varargin{1};
else
error('输入参数不是ccircle对象')
end
case 3
%已知圆心和半径绘圆
cc.centerx=varargin{1};
cc.centery=varargin{2};
cc.radius=varargin{3};
case 4
%已知圆心和圆上一点绘圆
cc.centerx=varargin{1};
cc.centery=varargin{2};
rad=((varargin(3)-varargin(1))^2+(varargin(4)-varargin(2))^2)^(1/2);
cc.radius=rad;
otherwise
error('参数个数错误')
end
end