matlab中類的定義和使用


通常一個類應該包含四個基本的成員函數:
構造函數 ―― 與類名相同,可以在其中完成成員初始化的工作;
顯示函數 ―― 名為display,用於顯示成員的數據;
賦值函數 ―― 名為set,用於設置類成員的數值;
取值函數 ―― 名為get,用於讀取類成員的函數。
    與C++的類不同的是,MATLAB的類不需要特別的析構函數。如果類用到了一些特殊的內容需要釋放的話,可以編寫一個成員函數,比如classclear,用包來釋放所占用的資源。
下面用一個簡單的例子類介紹一些類如何使用。定義一個名為list的類,它有兩個數據成員xy,希望通過一個成員函數prod()來獲取xy的乘積。本例的類是這樣的:
類名:     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.xd.y等形式訪問其成員變量了。不過,這個問題不嚴重,編個專門的成員函數get就行了。另外,成員函數的調用有個跟普通的函數一樣。注意在getset函數中,成員變量是以字符串的形式指定的,要通過字符串比較的辦法進行區分,然后對輸出變量進行賦值。本例中的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的書,你可以去看看!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM