MATLAB 面向对象编程(六)Handle类和Value类的set和get方法

无需关注,查看原文
set 和get 方法是为对象属性赋值和访问的一个中间层,当我们运行代码 a.x的时候,其实会隐性的调用set.x()方法,下面我们来介绍如何自定义set和get方法。

set方法

Handle类

classdef Point < handle
  properties
    x = 0
    y = 0
  end
  properties (Hidden,Dependent)
      r
  end
  methods
    function obj = Point(x,y)  % 可以使用nargin得到复杂初始化
        obj.x  = x;
        obj.y = y ;
    end
    function disp(obj)  % 自定义显示方法
       disp('------------------');
       s = sprintf('坐标为(%3.3d,%3.3d)\n',obj.x,obj.y);
       disp( [s 'obj.disp was called.'])
    end
    function r = get.r(obj)  % get方法获取r的信息
        r = sqrt(obj.x^2+obj.y^2);
    end
    function set.x(obj,var)  % 用set 方法可以限制随意赋值
    if var > 0
        obj.x = var;
    else
        error('x应为正数');
    end
    end
  end
  end 

上面的 set方法有两个输入参数,没有输出参数,其限制了x的范围必须大于0,否则无法复制,这样有利于防止bug产生,未自定义set方法实际上采用默认set方法即:

function set.x(obj,var)
obj.x = var;
end

运行代码a = Point2(-1,1,1);查看效果:
在这里插入图片描述

Value类

value类和Handle类的set函数一个重要的区别就是有没有输出,我们在之前说过,value类的输入参数是深拷贝,独立于原来的参数,在函数体外会销毁,无法改变原来的值,因此我们需要将上面的set函数改成:

function obj = set.x(obj,var)
 if var > 0
        obj.x = var;
    else
        error('x应为正数');
    end
end

比如我们有下面的定义:

classdef Point
    properties
        x = 1;
    end
    methods
        function obj = set.x(obj,var)
                obj.x = var + 1;            
        end
    end
end

在这里插入图片描述

get方法

我们在访问属性的时候,会隐性的调用get方法,Value类和Handle类的get方法一致。

classdef Point < handle
  properties
    x = 0
    y = 0
  end
  properties (Hidden,Dependent)
      r
  end
  methods
    function obj = Point(x,y)  % 可以使用nargin得到复杂初始化
        obj.x  = x;
        obj.y = y ;
    end
 function r = get.r(obj)  % get方法获取r的信息
        r = sqrt(obj.x^2+obj.y^2);
    end
  end 

这里的r是Dependent属性,只能访问而不能赋值。
在这里插入图片描述
r会在访问r的时候计算出来。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肆拾伍

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值