MATLAB 面向對象編程(十一)成員方法共享Static和屬性共享constant、persistent

  1. 類的成員方法
    靜態成員方法(Static)也叫做類方法,在前面的loadobj方法中有涉及,它不需要具體的對象就可以調用。
classdef Base1 < handle
    properties
        x
    end
    methods
        function obj = Base1()
            disp('Base1');
        end
    end
    methods(Static)
        function foo()
            disp('Static function')
        end
    end
end

在命令行裏面輸入Base1.foo(),直接通過類名就可以調用,可以得到
在這裏插入圖片描述

同樣也可以用對象來調用
在這裏插入圖片描述
可以發現靜態方法和普通方法一個重要的不同就是,靜態方法的輸入參數中沒有obj作爲對象輸入,同樣這也說明了靜態方法不能調用普通方法也不能訪問屬性,否則就沒有必要定義爲靜態方法。

  1. 共享屬性
    共享屬性可以分爲兩類,一類是常量,一類是變量。、

常量: 對於常量可以通過Constant實現共享。

classdef Base1 
    properties (Constant)
        x = rand(100,100);
    end
    methods
        function obj = Base1()
            disp('Base1');
        end
    end
    methods(Static)
        function foo()
            disp('Static function')
        end
    end
end
classdef Base2 
    properties
        x = rand(100,100);   
    end
    methods
        function obj = Base2()
            disp('Base1');
        end
    end
    methods(Static)
        function foo()
            disp('Static function')
        end
    end
end

我們可以對比上面兩種方法,
在這裏插入圖片描述
說明x並沒有算入A的內存中,我們再聲明一個Base1對象,觀察x是否相同。
在這裏插入圖片描述
說明所有Base1對象共享相同的x屬性。

變量: 變量共享可以使用persistent實現共享。

classdef Sub 
    properties 
       z
    end
    methods
        function obj = Sub()
             persistent count ;
             if isempty(count)
                 count = 1;
             else
                 count = count + 1;
             end
           count
        end
    end
end

在這裏插入圖片描述
可以看出count的值是跟隨着增加的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章