MATLAB建立簡單的類

2021-10-23 11:12:42 字數 4297 閱讀 1598

搬運自

官方鏈結

類的基本目的是定義封裝資料的物件以及對該資料執行的操作。

例如,basicclass 定義乙個屬性和對該屬性中的資料執行操作的兩個方法:

value - 此屬性包含儲存在類物件中的數值資料

roundoff - 此方法將屬性值捨入到兩位小數

multiplyby - 此方法將屬性值乘以指定數值

以下是 basicclass 的定義:

classdef basicclass

properties

value

endmethods

function r =

roundoff

(obj)

r =round

([obj.value],2

);end

function r =

multiplyby

(obj,n)

r =[obj.value]

* n;

endend

end

有關類語法的彙總,請參閱 classdef。

要使用類,請執行以下操作:

將類定義儲存在與該類同名的 .m 檔案中。

建立該類的乙個物件。

訪問屬性以將資料賦給屬性。

呼叫方法以對這些資料執行操作。

使用類名建立類的乙個物件:

a = basicclass

a =

basicclass with properties:

value:
屬性值最初為空。

訪問屬性

使用物件變數加點加屬性名稱的方式為 value 屬性賦值:

a.value = pi/

3;

要返回屬性值,請使用不帶賦值的圓點表示法:

a.value

ans =

1.0472

有關類屬性的資訊,請參閱class properties。

呼叫方法

對物件 a 呼叫 roundoff 方法:

roundoff

(a)ans =

1.0500

將物件作為第乙個引數傳遞給接受多個引數的方法,此處以 myltiplyby 方法的呼叫為例:

multiplyby(a,3)

ans =

3.1416
您也可以使用圓點表示法來呼叫方法:

a.

multiplyby(3

)

使用圓點表示法時,沒有必要將物件作為參數顯式傳遞。該表示法將物件置於方法名稱左側,用點隔開。

有關類方法的資訊,請參閱方法和函式

新增建構函式

類可以定義乙個特殊的方法來建立類物件,稱為建構函式。您可以使用建構函式方法將引數傳遞給建構函式,用以對屬性賦值。basicclass 的 value 屬性使用 mustbenumeric 函式限制其可能的值。

以下是 basicclass 類的建構函式。如果在呼叫建構函式時帶有輸入引數,此引數會被賦給 value 屬性。如果在呼叫建構函式時不帶輸入引數,則 value 屬性採用其預設值,即空 ()。

methods        

function obj =

basicclass

(val)

if nargin ==

1 obj.value = val;

endend

end

通過將此建構函式新增到類定義中,只需乙個步驟即可建立物件並設定屬性值:

a =

basicclass

(pi/3)

a =

basicclass with properties:

value:

1.0472

建構函式還可以執行與建立類物件相關的其他操作。

有關建構函式的資訊,請參閱類建構函式方法

方法向量化

matlab® 支援運算向量化。例如,您可以向向量新增數字:

[1 2 3] + 2

ans =

3     4     5
matlab 將數字 2 新增到陣列 [1 2 3] 中的每個元素。要向量化算術運算子方法,請將 obj.value 屬性引用括在方括號中。

[obj.value]

+2

此語法使方法能夠處理物件陣列。例如,使用索引賦值建立乙個物件陣列。

obj(1

)=basicclass

(2.7984);

obj(2)

=basicclass

(sin

(pi/3)

);obj(3)

=basicclass(7

);

則以下表示式:

[obj.value]

+2

等效於以下表示式:

[

obj(1)

.value obj(2

).value obj(3

).value]

+2

由於 roundoff 方法是向量化的,因此它可以對陣列執行運算:

roundoff

(obj)

ans =

2.8000

0.8700

7.0000

過載函式

類可以通過定義與現有 matlab 函式同名的方法來實現現有功能,例如加法。例如,假設您要新增兩個 basicclass 物件。這通常意味著將每個物件的 value 屬性的值相加。

下面是 matlab plus 函式的過載版本。它將 basicclass 類的加法定義為屬性值相加:

method

function r =

plus

(o1,o2)

r =[o1.value]

+[o2.value]

; end

end

通過實現名為 plus 的方法,您可以對 basicclass 的物件使用「+」運算子。

a =

basicclass

(pi/3)

;b =

basicclass

(pi/4)

;a + b

ans =

1.8326

通過向量化 plus 方法,您可以對物件陣列執行運算。

a =

basicclass

(pi/3)

;b =

basicclass

(pi/4)

;c =

basicclass

(pi/2)

;ar =

[a b]

;ar + c

ans =

2.6180

2.3562

相關資訊

有關過載函式的資訊,請參閱在類定義中過載函式。

有關過載運算子的資訊,請參閱運算子過載。

basicclass **列表

以下是新增本主題中討論的功能後的 basicclass 定義:

classdef basicclass

properties

value

endmethods

function obj =

basicclass

(val)

if nargin ==

1 obj.value = val;

endend

function r =

roundoff

(obj)

r =round

([obj.value],2

);end

function r =

multiplyby

(obj,n)

r =[obj.value]

* n;

endfunction r =

plus

(o1,o2)

r =[o1.value]

+[o2.value]

; end

endend

Matlab中如何建立類函式?

今天偶然發現了matlab可以像python一樣,有類函式的概念。具體這麼做 假設現在需要設計乙個數學計算類,類下面可以自己定義加減乘除,然後呼叫這個類實現混合運算。定義類函式 function m my math m.add my add m.del my del m.mult my mult m...

Matlab中如何建立類函式?

今天偶然發現了matlab可以像python一樣,有類函式的概念。具體這麼做 假設現在需要設計乙個數學計算類,類下面可以自己定義加減乘除,然後呼叫這個類實現混合運算。定義類函式 function m my math m.add my add m.del my del m.mult my mult m...

matlab陣列的建立

原文 1 直接輸入 行向量 a 1,2,3,4,5 列向量 a 1 2 3 4 5 2 用 生成向量 a j k 生成的行向量是a j,j 1,k a j d k 生成行向量a j,j d,j m d m fix k j d 3 函式linspace 用來生成資料按等差形式排列的行向量 x lins...