在Matlab中创建类

Matlab也支持面向对象编程,实际上Matlab中的任何一个变量都属于一个类,例如基本的数据类型double和char等
用户可以通过如下的结构定义一个简单的类(包括属性块和方法块)

classdef  Point2D < handle	%定义类的开头 Point2D为类名字
	properties		%属性block开始
		%......
	end			%属性block结束
	methods		%方法block开始
		%......
	end			%方法block结束
end						%类定义结束

说明:

  • Matlab中的类定义都是由关键词classdef开始,end结束

  • classdef 后面紧跟类的名字,上例为Point2D

  • 类名后面有一个<handle,意思就是该类继承自handle类,其中handle类是Matlab中内置的一个类,自定义的基类一般都是继承自handle的,如果定义了其他的子类,则自类名称后面应跟着<Base(Base表示父类名称)

  • 上例中的properties和methods分别是属性块和方法块的关键词

    下面举一个例子进一步说明,定义一个Point2D类

classdef Point2D <handle
    properties
        x ;
        y;   			%共有属性,部可访问
    end
    properties(Constant)
        area = 0;		%常量属性
    end
    methods			%方法块开始
        function obj = Point2D(x0,y0)	%构造函数,特点也是和类同名
            if nargin == 2
                obj.x = x0;
                obj.y = y0;
            elseif nargin ==0
                obj.x = cos(pi/12);
                obj.y = sin(pi/12);
            end
            %Matlab函数不能根据输入参数个数重载,只能判断输入参数个数自行分支
        end
        function normalize(obj) 		%归一化
            r1 = sqrt(obj.x^2+obj.y^2);
            obj.x = obj.x/r1;
            obj.y = obj.y/r1;
        end
    end				%方法块结束
 end					%类定义结束

通过下面的方式来实现类的实例化和方法的调用

p1 = Point2D(1,1);
p1.normalize();

进一步,定义一个子类Point3D,这时名称后面应该跟着<Point2D,即希望将二维点扩展到三维点

classdef Point3D <Point2D
    properties
        z
    end
    methods
        function obj = Point3D(x0,y0,z0)
            obj = obj@Point2D(x0,y0);
            obj.z = z0;
        end
      function normalize(obj)   %归一化
            r1 = sqrt(obj.x^2+obj.y^2+obj.z^2);
            obj.x = obj.x/r1;
            obj.y = obj.y/r1;
            obj.z = obj.z/r1;
        end
    end
end

可用类似的方法进行实例化

p2 = Point3D(1,1,1);
p2.normalize();

以上内容参考自数目《Matlab面向对象编程——从入门到设计模式》,徐潇和李远编著,该书写的还是比较通俗流畅的,很适合初学者阅读

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值