搬運自
官方鏈結
類的基本目的是定義封裝資料的物件以及對該資料執行的操作。
例如,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...