MATLAB程序设计详细记录_第十一章_面向对象的编程

43. 绘图对象

fig1 = figure(1); 
% fig1 = 
%   Figure (1) - 属性:
%       Number: 1
%         Name: ''
%        Color: [0.9400 0.9400 0.9400]
%     Position: [488 342 560 420] % 横坐标起始点,纵坐标起始点,横坐标像素,纵坐标像素
%        Units: 'pixels'
fig1.Color; % rgb 0.9400 0.9400 0.9400
fig1.Color = [1 0 0]; % 修改颜色
line1 = plot(rand(1,10));
%  line1 = 
%   Line - 属性:
%               Color: [0 0.4470 0.7410]
%           LineStyle: '-'
%           LineWidth: 0.5000
%              Marker: 'none'
%          MarkerSize: 6
%     MarkerFaceColor: 'none'
%               XData: [1 2 3 4 5 6 7 8 9 10]
%               YData: [1×10 double]
%               ZData: [1×0 double]
% 
%   显示 所有属性
line1.LineStyple = '--';
fig2 = figure(2);
fig2.Color = [0 1 0];
line2 = plot(rand(1,10));
ax1 = fig1.Children;
% ax1 = 
%   Axes - 属性: (坐标系)
%              XLim: [1 10]
%              YLim: [0 1]
%            XScale: 'linear'
%            YScale: 'linear'
%     GridLineStyle: '-'
%          Position: [0.1300 0.1100 0.7750 0.8150] %坐标系在画布中的位置,左下角x和y,右上角x,y       
%             Units: 'normalized'
% 
%   显示 所有属性
line1 = ax1.Children;
line1.Parent; % ax1
ax1.Parent; % fig1
fig1.Parent;
% ans =  
%   Graphics Root - 属性: (显示器)
%           CurrentFigure: [1×1 Figure]
%     ScreenPixelsPerInch: 96
%              ScreenSize: [1 1 1536 864]
%        MonitorPositions: [1 1 1536 864]
%                   Units: 'pixels'
%   显示 所有属性
eq(fig1,fig2); % 判断对象是否相等,logical 0
groot;
% ans = 
%   Graphics Root - 属性:
%           CurrentFigure: [1×1 Figure]
%     ScreenPixelsPerInch: 96
%              ScreenSize: [1 1 1536 864]
%        MonitorPositions: [1 1 1536 864]
%                   Units: 'pixels'
%   显示 所有属性
current_fig = gcf; % 返回当前被激活的figure
current_axes = gca; % 返回当前被激活的axes

44. 用户自定义的类

% 定义类
classdef MyClassName
  properties % 定义属性
     prop1
     prop2
  end
end
MCN1 = MyClassName; % 创建对象
% MCN1 = 
%   MyClassName - 属性:
%     prop1: []
%     prop2: []
MCN1.prop1 = 3;
MCN1.prop2 = 4;
classdef MyClassName
  properties % 定义属性
     prop1
     prop2
  end
  
  methods
      function obj = MyClassName(val1,val2) % 构造函数
         obj.prop1 = val1;
         obj.prop2 = val2;
      end
  end
end
MCN2 = MyClassName(3,4);
% MCN2 = 
%   MyClassName - 属性:
%     prop1: 3
%     prop2: 4
classdef MyClassName
  properties % 定义属性
     prop1 = date; % date返回当前日期
     prop2 = datestr(now); % 启动程序时的时间,默认值,可以为任意
  end
  
  methods
      function obj = MyClassName(val1,val2) % 构造函数
          if nargin == 2 % 使用可变参数,即可无参构造,又可以有参构造
            obj.prop1 = val1;
            obj.prop2 = val2;
          end
      end
      
      function outarg = ordMethod(obj,arg1)
          outarg = obj.prop1 + arg1;
      end
  end
end
MCN1 = MyClassName; % 创建对象 
MCN2 = MyClassName(3,4); 
classdef SimpleClass
   properties
      x
      y = 9;
   end
   
   methods
       function SC = SimpleClass(varargin)
          if nargin == 0
              SC.x = 0;
          elseif nargin == 1
              SC.x = varargin{1};
          else
              SC.x = varargin{1};
              SC.y = varargin{2};
          end
       end
       
       function outarg = ordMethod(obj,arg1) % obj表示当前对象
           outarg = obj.x + obj.y +arg1;
       end
   end
end
newobj = SimpleClass;
ordMethod(newobj,1); % 调用方法
newobj.ordMethod(1); % 使用对象调用方法,输入参数不要对象参数

45. Overloading

classdef MyClassName
  properties % 定义属性
     prop1   % date返回当前日期
     prop2 = datestr(now); % 启动程序时的时间,默认值,可以为任意
  end
  
  methods
      function obj = MyClassName(val1,val2) % 构造函数
          if nargin == 2 % 使用可变参数,即可无参构造,又可以有参构造
            obj.prop1 = val1; % obj 代表当前对象
            obj.prop2 = val2;
          end
      end
      
      function outarg = ordMethod(obj,arg1)
          outarg = obj.prop1 + arg1; % obj 代表当前对象
      end
      
      % a + b == plus(a,b)
      function objout = plus(obj1,obj2)
          objout = MyClassName;
          objout.prop1 = obj1.prop1+obj2.prop1;
      end

      % a - b == minus(a,b)
      function objout = minus(obj1,obj2)
          objout = MyClassName;
          objout.prop1 = obj1.prop1-obj2.prop1;
      end
      % a < b == lt(a,b)
      % a > b == gt(a,b)
      function out = gt(obj1,obj2)
          if isa(obj2,'MyClassName')
              out = gt(obj1.prop1,obj2.prop1);
          else
              out = gt(obj.prop1,3);
          end
  end
end  
MCN1 = MyClassName(1,2);
% MCN1 = 
%   MyClassName - 属性:
%     prop1: 1
%     prop2: 2
MCN2 = MyClassName(2,3);
%   MCN2 = 
%   MyClassName - 属性:
%     prop1: 2
%     prop2: 3
MCN1 + MCN2; 
% ans =  
%   MyClassName - 属性:
%     prop1: 3
%     prop2: '07-May-2022 16:44:34'  
gt(MCN1,MCN2); % MCN1 > MCN2; 0
gt(MCN1,0); % MCN1 > 0; 1
isa(MCN1,'MyClassName'); % 判断 MCN1 是否为MyClassName类型,logical 1

46. 类的继承与构造方法

classdef SuperClass
  properties % 定义属性
     prop1
     prop2
  end
  
  methods
      function obj = SuperClass(val1,val2) % 构造函数
          if nargin == 2 % 使用可变参数,即可无参构造,又可以有参构造
            obj.prop1 = val1; % obj 代表当前对象
            obj.prop2 = val2;
          end
      end
  end
end
  
classdef MySubclass < Superclass
    properties
        prop3
    end
    
    methods
        function obj = MySubclass(val1,val2,val3) % 子类的构造方法
           if ~exist(val1,'var')
               val1 = [];
           end
           if ~exist(val2,'var')
               val2 = [];
                      end
           if ~exist(val2,'var')
               val2 = [];
           end
           
           obj@SuperClass(val1,val2); % 这句不能放在if中,用父类构造方法赋值prop1,prop2
           obj.prop3 = val3;    
        end
    end
end
MS = MySubclass(1,2,3); 

47. handle类与value类

% value class : double,一个杯子加一个柄
% handle class : 继承了handle类,给同一个杯子加一个柄
classdef MyClassName < handle
  properties % 定义属性
     prop1  
     prop2 = datestr(now); % 启动程序时的时间,默认值,可以为任意
  end
  
  methods
      function obj = MyClassName(val1,val2) % 构造函数
          if nargin == 2 % 使用可变参数,即可无参构造,又可以有参构造
            obj.prop1 = val1; % obj 代表当前对象
            obj.prop2 = val2;
          end
      end
  end
end
A = MyClassName(1,2); % 给杯子x加一个柄
B = A; % 给杯子x再加一个柄,改变A的值,即改变B的值
C = MyClassName(1,2); % 给杯子y加一个柄

isequal(A,C); % 判断两个的属性是否完全相同,logical 1

48. 类的属性特性

% 属性
%             private               protected                 public
% get       within class          within subclass           otherwise
% set       within class          within subclass           otherwise
% 方法
% Access    within class          within subclass           otherwise  
% abstract  within class          within subclass           otherwise
% Hidden : 方法不会再方法列表中看到
% Sealed: 方法不能再子类中重新定义
% Static: 不需要实例化就可以时使用
% function set.属性(obj,val) end:等价于“= val”, 对属性进行赋值的函数重载
% A.fun(val) == fun(A,val)
classdef valAttributes
    properties (GetAccess = public) 
        num = 0;
    end
    
    properties (SetAccess = public,GetAccess = public) % == Access = public
        word = 'hello';
    end
    
    methods
        function obj = valAttributes(n,v)
            if nargin == 2
                obj.num = n;
                obj.word = w;
            end
        end
    end
    
    methods (Abstract)
        function curve
        end
    end
    
    methods (Hiiden)
        function shownum(obj)
            disp(obj.num);
        end
    end
    
    methods (Hiiden)
        function shownum2(obj)
            disp(obj.num);
        end
    end
    
    methods (Static) % 该方法不需要对象就可以调用
        function passOrFile = isPass(num)
            if num >= 20
                passOrFile = 'pass';
            else
                passOrFile = 'fail';
            end
        end
    end
    
end
  
classdef subVal < valAttributes
    methods
        function changeNum(obj,num)
            obj.num = num;
        end
        function changeWord(obj,word)
            obj.word = word;
        end
        function curve
            obj.num = sqrt(obj.num)*10;
        end
    end
end
valAttributes.isPass(60); % 'pass'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值