通常一個類應該包含四個基本的成員函數:
構造函數 ―― 與類名相同,可以在其中完成成員初始化的工作;
顯示函數 ―― 名為display,用於顯示成員的數據;
賦值函數 ―― 名為set,用於設置類成員的數值;
取值函數 ―― 名為get,用於讀取類成員的函數。
與C++的類不同的是,MATLAB的類不需要特別的析構函數。如果類用到了一些特殊的內容需要釋放的話,可以編寫一個成員函數,比如classclear,用包來釋放所占用的資源。
下面用一個簡單的例子類介紹一些類如何使用。定義一個名為list的類,它有兩個數據成員x和y,希望通過一個成員函數prod()來獲取x和y的乘積。本例的類是這樣的:
類名: list
成員變量:x,y
成員函數:
list:構造函數
display:顯示函數
get:取值函數
set:賦值函數
prod:計算函數現在就來建立它。
(1) 在工作目錄上建立一個子目錄:
cd E:\MyProgram\matlab7\chap4
mkdir @list
類名前面要加上一個字符'@’,對於這樣形式的目錄里所有保存的M文件,MATLAB都認為是類的成員函數。
(2) 編寫5個成員函數的M文件保存在E:\MyProgram\matlab7\chap4\@list 目錄下:
% list.mfunction d = list(x,y)
d.x=x;
d.y=y;
d=class(d,'list');
% display.mfunction display(d)
fprintf('list class:\n');
fprintf('x=%d\n',d.x);
fprintf('y=%d\n',d.y);
% get.mfunction val = get(d,prop_name)switch prop_name
case 'x' val=d.x;
case 'y' val=d.y;
otherwise error([prop_name,'is not a valid list property']);
end
%set.mfunction d = set(d,varargin)
% 該函數的定義在后面的章節再詳細講解
argin=varargin;
while length(argin)>=2, prop=argin{1};
val=argin{2};
argin=argin(3:end);
switch prop case 'x' d.x=val;
case 'y' d.y=val;
otherwise error('Asset properties:x,y');
endend
%prod.mfunction z=prod(d)z=d.x*d.y;
(3) 在MATLAB命令行中進行如下操作:
cd E:\MyProgram\matlab7\chap4 d = list(11,22) list class:x=11y=22 prod(d) ans =242 d = set(d,'x',7);get(d,'x') ans =7 prod(d) ans =154
下面對操作步驟中的細節加以詳細解釋。
1. 類的創建創建一個新的類,首先需要在構造函數中用結果類型struct建立一個結構變量,包含所需要的成員變量。注意,這里不用考慮成員函數。然后用class命令將七轉換成類,並返回。
class的語法很簡單:類變量 = class(結構變量,'類名');
這里類名和構造函數名相同。程序中要創建這個類的新的變量時,只需調用其構造函數,返回的變量就屬於這個類的了。當然,這里的list.m太過簡單,沒有任何變量檢查,使用中還可以根據情況添加一些擴充功能。
2. 類成員變量的賦值本例中,類的成員變量是在構造函數中賦值的。MATLAB中,類成員變量都是private的,必須在成員函數中訪問,因此就不能箱struct那樣,用d.x和d.y等形式訪問其成員變量了。不過,這個問題不嚴重,編個專門的成員函數get就行了。另外,成員函數的調用有個跟普通的函數一樣。注意在get和set函數中,成員變量是以字符串的形式指定的,要通過字符串比較的辦法進行區分,然后對輸出變量進行賦值。本例中的set函數支持同時對兩個成員變量賦值,因此用到了不定長輸入產生表varargin,例如:d = set(d,'x',12) % 只對其中一個成員變量賦值 list class:x=12y=22 d = set(d,'x',23,'y',34) % 同時對兩個成員變量賦值 list class:x=23y=34
3. 成員變量的顯示成員被變量display不是必須的,不過她可以顯示類的有用信息。如果在命令行上輸入一個類變量,不加分號就回車,這時其display函數就自動調用。在該函數中,可以顯示任何與該類信息相關的信息,當然也可以是不相關的。
4. 工作目錄一個工作目錄嚇可以仿真多個類目錄。通常可以把大程序按功能分開,用類重新組織起來,使程序更具有結構化,增強其可讀性。
論壇上有很多matlab的書,你可以去看看!!